2013-07-15 237 views
4

在我的项目,我有一些按钮是有形和无形使用此之间切换:使QPushButton不可见但仍然有效?

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

然而,似乎当他们是无形的,他们也没有工作?我怎样才能解决这个问题?

我已经尝试过这样的:

ui->button->setEnabled(true); 

为所有的人,但没有任何变化。

+1

你是什么意思“仍然工作”。如何(代码方式)你想与他们互动,而他们是不可见的?你是什​​么意思,“没有什么变化”。你希望'setEnabled()'做什么?描述你希望它做什么,而不使用'enable'或'disable'这个词。不要试图暴露或痛苦,只是试图理解你的期望和要求! =) –

+0

我想让按钮变得可用。你点击它,并发生了一些事情。我的意思是“没有任何变化”,因为按钮仍然无法使用。 – mrg95

回答

10

当您拨打QWidget::setVisible(false)时,您不仅可以将其隐藏起来,还可以从布局中将其从逻辑上删除,因此不再有响应按键或鼠标点击的响应。你想要的是保持这个小部件在那里,而不显示它。我会试着在你的情况正在发生变化与QPushButton相关的QPalette使其透明(即不可见)

// 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

完美:)作品很好 – mrg95

+0

这是一个很好的建议,可以动态地隐藏设计元素,而无需自动更改布局! (这在Qt4中根本不可能)。谢谢你的想法! – Thalia

2

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

如果您希望它可用但不可见,请尝试使用pushButton->setFlat(true)将按钮设置为flat。 这使按钮文本可见,但按钮背景不可见,直到按下(尝试它,看看我的意思)。如果你想隐藏文字,可以用pushButton->setText("")将文字设置为空。

相关问题