2013-07-15 5 views
4

В моем проекте, у меня есть несколько кнопок, которые изменяют между видимым и невидимым с помощью этого:Сделать QPushButton невидимым, но все еще работать?

ui->button->setVisible(true); 
//or 
ui->button->setVisible(false); 

Тем не менее, кажется, что, когда они невидимы, они не работают? Как я могу обойти это?

Я уже пробовал это:

ui->button->setEnabled(true); 

для всех из них, но ничего не меняется.

+1

Что значит «все еще работать». Как (кодовым) вы хотите взаимодействовать с ними, пока они невидимы? И что вы имеете в виду, «ничего не меняется». Что вы надеетесь, 'setEnabled()' делает? Опишите, на что вы надеетесь, без использования слова «включить» или «отключить». Не пытаясь быть злым или больным, просто пытаясь понять, чего вы ожидаете и просите! =) –

+0

Я хочу, чтобы кнопка была полезной, я думаю. Вы нажимаете на него, и все происходит. Я имел в виду «ничего не изменилось», поскольку кнопки все еще непригодны для использования. – mrg95

ответ

10

Когда вы вызываете QWidget::setVisible(false), вы не только скрываете его от просмотра, но и логически удаляете его из макета, поэтому больше не можете отвечать на нажатия клавиш или щелчки мышью. Вы хотите сохранить виджет там, не отображая его. То, что я хотел бы попробовать в вашей ситуации меняется QPalette связанные с QPushButton, чтобы сделать его прозрачным (т.е. невидимо)

// Make the button "invisible" 
QBrush tb(Qt::transparent); // Transparent brush, solid pattern 
ui->button->setPalette(QPalette(tb, tb, tb, tb, tb, tb, tb, tb, tb)); // Set every color roles to the transparent brush 

// Make the button "visible" 
ui->button->setPalette(QPalette()); // Back to the default palette 

Таким образом, кнопка остается логически в макете (и занимает соответствующее место), но он не отображается, потому что он полностью отображается с прозрачным цветом.

+0

Perfect :) отлично работает – mrg95

+0

Это отличное предложение для скрытия элементов дизайна динамически без автоматического изменения макета! (что просто невозможно в Qt4). Спасибо за идею! – Thalia

2

setVisible() устанавливает, является ли кнопка видимой или нет, полностью удаляя ее из макета виджетов. setEnabled() устанавливает, отключена ли кнопка (выделена серым цветом) или нет.

Если вы хотите его использовать, но не визуально присутствовать, попробуйте установить кнопку flat, используя pushButton->setFlat(true). Это оставляет текст кнопки видимым, но кнопка фона невидима до нажатия (попробуйте и посмотрите, что я имею в виду). Если вы хотите, чтобы текст был скрыт, вы можете установить текст в нуль с помощью pushButton->setText("").

Смежные вопросы