让QPushButton隐形但仍然有效?

时间:2013-07-15 00:54:51

标签: c++ qt qpushbutton

在我的项目中,我有一些按钮在可见和不可见之间改变:

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

然而,似乎当它们看不见时,它们也不起作用?我怎么能绕过这个?

我已经尝试过这个:

ui->button->setEnabled(true);

所有这些都没有变化。

3 个答案:

答案 0 :(得分: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

这样,按钮仍然在逻辑上处于布局中(并占据适当的空间),但它没有显示,因为它完全以透明颜色显示。

答案 1 :(得分:3)

setVisible()设置按钮是否可见,将其从小部件的布局中完全删除。 setEnabled()设置按钮是否被禁用(灰色)。

如果您希望它可用,但在视觉上不可用,请尝试使用pushButton->setFlat(true)将按钮设置为flat。 这使按钮文本可见,但按钮背景在按下之前不可见(尝试并查看我的意思)。如果您也希望隐藏文本,则可以使用pushButton->setText("")将文本设置为空。

答案 2 :(得分:0)

使按钮不可见的另一种方法是:

ui->errorMask->setStyleSheet("QPushButton { background-color: rgba(10, 0, 0, 0); }");