我创建了很多QPushButtons,添加了点击信号,并为QT DESIGNER
的所有按钮添加了一个插槽名称'deneme()',我想做的事情是;当我点击任何按钮时,应该完成一些操作,最后应该禁用该按钮,但我们不知道点击了哪个按钮。我知道我可以使用setEnabled()
和isEnabled()
停用按钮,但我不知道如何禁用它们。
答案 0 :(得分:26)
如果我理解正确,您将各种QPushButtons
连接到同一个广告位。在广告位deneme()
内,您想知道哪个按钮是clicked
。
你可以这样做:
void deneme() {
QPushButton * b = qobject_cast<QPushButton *>(sender());
if (b) {
if (b == button1) { //button1 clicked
//doSomething();
}
else {
if (b == button2) {
//doSomething();
}
}
b->setEnabled(false);
}
}
答案 1 :(得分:7)
为什么setEnabled不工作呢? The reference
这么简单的setEnabled(false);就够了。
QPushButton* button = new QPushButton(someParent);
button->setEnabled(false);
如果在按钮的click事件上连接事件处理程序,您可能应该查看QT文档: Signal and slots
答案 2 :(得分:2)
你的意思是按钮必须在点击后立即被禁用?我想在那种情况下你可能想做这样的事情:
class MyWidget : public QWidget
{
Q_OBJECT
// ...
private slots:
void disableButton();
private:
QPushButton *myButton;
// ...
};
MyWidget::MyWidget(QWidget *parent = NULL) : QWidget(parent)
{
///...
myButton = new QPushButton("click me", this);
connect(myButton, SIGNAL(clicked), this, SLOT(disableButton));
// ...
}
void MyWidget::disableButton()
{
myButton->setEnabled(false);
}
答案 3 :(得分:0)
布鲁诺的回答是正确的。
sender();
返回QObject*
你可以把它投射到QPushButton*
使用其中之一
C风格,QPushButton* clickedButton = (QPushButton*)(sender())
要么
QPushButton* clickedButton = static_cast<QPushButton*>(sender())
要么
QPushButton * clickedButton = qobject_cast(sender());
据我所知,qobject_cast的工作方式类似于dynamic_cast&lt;&gt;在C ++中。但是,如果您遇到编译问题,上面给出的任何解决方案都可以正常工作。