2016-02-12 8 views
1

У меня есть выпадающее меню с 5-6 элементами в нем.Виджет должен показать или скрыть на основе опции, выбранной в выпадающем меню

Я хочу, чтобы другие виджеты отображались в том же окне, когда я выбираю конкретный параметр в ComboBox. Например: когда я выбрал «1-Стандарт» в ComboBox, виджет, определенный в acc_ui, должен появиться и так далее.

Это код, который я попробовал:

require 'Qt' 
class Auth < Qt::Widget 

    slots 'slotFunctionChanged(int)' 

    def initialize(parent=nil) 
    super(parent) 
    setWindowTitle("Action"); 
    setFixedSize 750,530 

    function_ui 

    show 
    end 

    def function_ui 
    @funLabel = Qt::Label.new "Func: ", self 
    @funLabel.setFont Qt::Font.new("Times New Roman", 14) 
    combo = Qt::ComboBox.new self 
    combo.setFont Qt::Font.new("Times New Roman", 12) 
    combo.addItem "1- Standard" 
    combo.addItem "2- Custom" 
    combo.addItem "3- Non-custom" 
    combo.addItem "4- Non-Standard" 
    combo.addItem "5- Plastic" 

    connect combo, SIGNAL('activated(int)'), self, SLOT('slotFunctionChanged(int)') 
    combo.resize 170,20 
    combo.move 170,100 
    @funLabel.move 95,100 

    end 

    def slotFunctionChanged(index) 
    case index 
    when 0 
     acc_ui() 
    when 1 
     store_ui()  
    end 
    end 

    def acc_ui 
    @accLineedit = Qt::Lineedit.new(self) 
    @accLineedit.setFont Qt::Font.new("Times New Roman", 12) 
    @accLabel = Qt::Label.new "Acc: ", self 
    @accLabel.setFont Qt::Font.new("Times New Roman", 14) 
    @accLabel.move 95,185 
    @accLineedit.resize 170,20 
    @accLineedit.move 170,185 
    end 

    def store_ui 
    @storeLineedit = Qt::Lineedit.new(self) 
    @storeLineedit.setFont Qt::Font.new("Times New Roman", 12) 
    @storeLabel = Qt::Label.new "Store: ", self 
    @storeLabel.setFont Qt::Font.new("Times New Roman", 14) 
    @storeLabel.move 120,210 
    @storeLineedit.resize 140,20 
    @storeLineedit.move 170,210 

    end 

end 

app = Qt::Application.new(ARGV) 
widget = Auth.new 
widget.show 
app.exec 
+0

В чем проблема? Нам нужно описание того, что он делает неправильно. Пожалуйста, прочитайте «[ask]». Кроме того, это минимальный код, необходимый для демонстрации проблемы? Если нет, уменьшите его. Много кода замедляет нашу способность помочь вам и забирает наше время для помощи другим. [Mcve]. –

+0

Извините за это. Это был первый раз, когда я отправлял сообщения, это будет помнить со следующего раза. Моя проблема здесь: Внутри оператора case, когда я пытаюсь вызвать метод, который я определил отдельно, он не вызывается. – topjay

ответ

0
  • двигаться весь код от acc_ui и от store_ui до function_ui
  • в function_ui: применять метод show всех виджетов, которые должны быть показаны по умолчанию, и метод hide для всех виджетов, которые должны быть скрыты по умолчанию
  • в acc_ui и store_ui: использовать только show и hide методы, позволяющие виджетам появляться и исчезать по вашему желанию
+0

Если я хочу показать виджет storeLabel, как его показать? показать и скрыть методы, похоже, не работает с этим – topjay

+0

'@ storeLabel.show' должен делать. Если нет, вы можете загрузить свой последний код на https://gist.github.com/ и поделиться ссылкой. Я буду рад проверить там и помочь вам запустить его. – bogl

+0

Спасибо. Вышеупомянутый способ шоу и скрыть действительно работал для меня. Тем не менее, я не понимаю, как установить внешний вид по умолчанию, прежде чем будут рассмотрены отдельные случаи. – topjay