如何禁用QPushButton

时间:2011-04-19 09:38:26

标签: qt

我创建了很多QPushButtons,添加了点击信号,并为QT DESIGNER的所有按钮添加了一个插槽名称'deneme()',我想做的事情是;当我点击任何按钮时,应该完成一些操作,最后应该禁用该按钮,但我们不知道点击了哪个按钮。我知道我可以使用setEnabled()isEnabled()停用按钮,但我不知道如何禁用它们。

4 个答案:

答案 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 ++中。但是,如果您遇到编译问题,上面给出的任何解决方案都可以正常工作。