В моем проекте у меня есть несколько кнопок, которые переключаются между видимым и невидимым, используя это:
ui->button->setVisible(true);
//or
ui->button->setVisible(false);
Однако кажется, что когда они невидимы, они тоже не работают? Как я могу обойти это?
Я уже пробовал это:
ui->button->setEnabled(true);
для всех них, но ничего не меняется.
Когда вы звоните 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
Таким образом, кнопка по-прежнему логически находится в макете (и занимает соответствующее место), но она не отображается, потому что она полностью отображается с прозрачным цветом.
setVisible()
устанавливает, будет ли кнопка видимой или нет, полностью удаляя ее из макета виджета.
setEnabled()
устанавливает, отключена ли кнопка (неактивна) или нет.
Если вы хотите использовать его, но не визуально, попробуйте установить кнопку в плоский с помощью pushButton->setFlat(true)
,
Это оставляет текст кнопки видимым, но фон кнопки невидимым до нажатия (попробуйте и посмотрите, что я имею в виду). Если вы хотите, чтобы текст тоже был скрыт, вы можете установить текст на ничего pushButton->setText("")
,
В моем проекте у меня есть несколько кнопок, которые переключаются между видимым и невидимым, используя это:
ui->button->setVisible(true);
//or
ui->button->setVisible(false);
Однако кажется, что когда они невидимы, они тоже не работают? Как я могу обойти это?
Я уже пробовал это:
ui->button->setEnabled(true);
для всех них, но ничего не меняется.
Когда вы звоните 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
Таким образом, кнопка по-прежнему логически находится в макете (и занимает соответствующее место), но она не отображается, потому что она полностью отображается с прозрачным цветом.
setVisible()
устанавливает, будет ли кнопка видимой или нет, полностью удаляя ее из макета виджета.
setEnabled()
устанавливает, отключена ли кнопка (неактивна) или нет.
Если вы хотите использовать его, но не визуально, попробуйте установить кнопку в плоский с помощью pushButton->setFlat(true)
,
Это оставляет текст кнопки видимым, но фон кнопки невидимым до нажатия (попробуйте и посмотрите, что я имею в виду). Если вы хотите, чтобы текст тоже был скрыт, вы можете установить текст на ничего pushButton->setText("")
,