如何禁用 QPushButton

问题描述 投票:0回答:4

我创建了很多 QPushButtons,添加了点击信号和插槽名称

deneme()
到所有带有
QT DESIGNER
的按钮,我想做的是;当我单击任何按钮时,应该执行一些操作,最后应该禁用该按钮,但我们不知道单击了哪个按钮。我知道我可以使用
setEnabled()
isEnabled()
禁用按钮,但我不知道如何禁用它们。

qt
4个回答
46
投票

如果我理解正确的话,您将各种

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

13
投票

为什么 setEnabled 不起作用? 参考.

所以一个简单的setEnabled(false);就够了。

QPushButton* button = new QPushButton(someParent);
button->setEnabled(false);

如果在按钮的单击事件上连接事件处理程序,也许您应该查看 QT 文档: 信号和插槽


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

1
投票

布鲁诺的答案是正确的。

sender();

返回一个

QObject*
您可以将其投射到
QPushButton*
使用任一 C 风格演员即
QPushButton* clickedButton = (QPushButton*)(sender())
或者
QPushButton* clickedButton = static_cast<QPushButton*>(sender())
或者 QPushButton * clickedButton = qobject_cast(sender()); 据我所知,qobject_cast 的工作方式类似于 C++ 中的dynamic_cast<>。但如果您遇到编译问题,上面给出的任何解决方案都应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.