我创建了很多 QPushButtons,添加了点击信号和插槽名称
deneme()
到所有带有 QT DESIGNER
的按钮,我想做的是;当我单击任何按钮时,应该执行一些操作,最后应该禁用该按钮,但我们不知道单击了哪个按钮。我知道我可以使用 setEnabled()
和 isEnabled()
禁用按钮,但我不知道如何禁用它们。
如果我理解正确的话,您将各种
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);
}
}
您的意思是按钮必须在单击后立即禁用?我想在这种情况下你可能想做这样的事情:
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);
}
布鲁诺的答案是正确的。
sender();
返回一个
QObject*
您可以将其投射到 QPushButton*
使用任一
C 风格演员即 QPushButton* clickedButton = (QPushButton*)(sender())
或者
QPushButton* clickedButton = static_cast<QPushButton*>(sender())
或者
QPushButton * clickedButton = qobject_cast(sender());
据我所知,qobject_cast 的工作方式类似于 C++ 中的dynamic_cast<>。但如果您遇到编译问题,上面给出的任何解决方案都应该可以正常工作。