Qt 如何禁用QPushButton

Qt 如何禁用QPushButton,qt,Qt,我用QT DESIGNER在所有按钮上创建了很多,添加了点击信号和插槽名称“deneme()”,我想做的是;当我点击任何按钮,一些操作应该做,最后按钮应该被禁用,但我们不知道哪个按钮被点击。我知道我可以用setEnabled()和isEnabled()禁用按钮,但我不知道如何禁用它们。为什么setEnabled不起作用 因此,一个简单的setEnabled(false);够了 QPushButton* button = new QPushButton(someParent); button-&g

我用
QT DESIGNER
在所有按钮上创建了很多,添加了点击信号和插槽名称“deneme()”,我想做的是;当我点击任何按钮,一些操作应该做,最后按钮应该被禁用,但我们不知道哪个按钮被点击。我知道我可以用
setEnabled()
isEnabled()
禁用按钮,但我不知道如何禁用它们。

为什么setEnabled不起作用

因此,一个简单的setEnabled(false);够了

QPushButton* button = new QPushButton(someParent);
button->setEnabled(false);
如果在按钮的click事件上连接事件处理程序,您可能应该查看QT文档:

你的意思是在点击按钮后必须立即将其禁用?我想在这种情况下,你可能想做这样的事情:

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);
}

如果我理解正确,您将各种
qpushbutton
连接到同一插槽。在插槽的内部
deneme()
您想知道哪些按钮被单击了
。
您可以执行以下操作:

  void deneme() {
    QPushButton * b = qobject_cast<QPushButton *>(sender());
    if (b) {
       if (b == button1) { //button1 clicked
           //doSomething();
       } 
       else {
          if (b == button2) {
             //doSomething();
          }
       }
       b->setEnabled(false);
    }
  }
void deneme(){
QPushButton*b=qobject_cast(sender());
如果(b){
如果(b==button1){//button1被点击
//doSomething();
} 
否则{
如果(b==按钮2){
//doSomething();
}
}
b->setEnabled(假);
}
}

布鲁诺的答案是正确的

sender();
返回
QObject*
您可以将其强制转换为
QPushButton*
使用其中一个 C样式转换,即
QPushButton*clickedButton=(QPushButton*)(sender())
QPushButton*clickedButton=static\u cast(sender())
或 QPushButton*clickedButton=qobject_cast(sender());
据我所知,QObjtType的工作原理类似于C++中的动态映射。但是,如果您有编译问题,上面给出的任何解决方案都可以正常工作。

问题在于我创建了Gui,并使用Qt designer添加了所有按钮。单击任何按钮后,将执行一些操作,最后应禁用该按钮。您的答案可能正确,但问题是我创建了Gui,并使用Qt designer添加了所有按钮。单击任何按钮后,将执行一些操作,最后应禁用该按钮,我对该编程非常熟悉:(你的意思是,在这种方法中,你无法定义按下了哪个按钮?这个问题也是可以解决的。你只需使用QSignalMapper。它允许你映射无参数信号(如clicked()QPushButton)中的信号发送到接受一个参数的插槽。因此,您可以修改上述代码示例中的disableButton()方法,以接收指示单击了哪个按钮的参数。我认为这是正确的,但它给出了错误,即“
qobject\u cast
未在此范围内声明”,即使我包含
qobject.h