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