我创建了很多QPushButtons,添加了点击信号和一个插槽名称'deneme()',所有按钮都使用了QT DESIGNER
并且我想要做的事情是;当我点击任何按钮时,应该做一些操作,最后应该禁用按钮,但我们不知道哪个按钮被点击。我知道我可以禁用与setEnabled()
和isEnabled()
按钮,但我不知道如何禁用它们。如何使一个QPushButton被禁用
回答
如果我理解正确你连接各种QPushButtons到同一个插槽。插槽deneme()里面你想知道哪个按钮被点击了。 你可以这样做:
void deneme() {
QPushButton * b = qobject_cast<QPushButton *>(sender());
if (b) {
if (b == button1) { //button1 clicked
//doSomethin();
}
else {
if (b == button2) {
//doSomething();
}
}
b->setEnabled(false);
}
}
为什么setEnabled无法正常工作呢? The reference。
所以一个简单的setEnabled(false);足够。
QPushButton* button = new QPushButton(someParent);
button->setEnabled(false);
如果一个事件处理程序的按钮的Click事件连接也许你应该看看Qt文档: Signal and slots
问题是我创建了Gui并添加了与Qt设计器的所有按钮。当我点击任何按钮后,将会执行一些操作,最后该按钮应该被禁用。 – Cengaver 2011-04-19 10:07:40
你的意思是按钮点击后立即被禁用?我想在这种情况下,你可能想要做这样的事情:
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);
}
你的答案可能是正确的,但问题是我创建了Gui并添加了与Qt设计器的所有按钮。当我点击任何按钮后,会执行一些操作,最后该按钮应该被禁用,并且我在这个编程中很新颖:( – Cengaver 2011-04-19 10:08:27
你的意思是你的问题是在这个方法中你不能定义哪个按钮被按下了?你可以使用QSignalMapper,它允许你将非参数信号(如QPushButton中的clicked()信号)映射到接受一个参数的插槽,因此你可以在上面的代码示例中修改disableButton()方法来接收指示哪个按钮被点击 – beduin 2011-04-19 12:09:53
非常感谢你 – Cengaver 2011-04-19 15:00:51
布鲁诺的答案是正确的。
sender();
返回QObject*
可以使用它转换为一个QPushButton*
任 空调风格投即QPushButton* clickedButton = (QPushButton*)(sender())
或 QPushButton* clickedButton = static_cast<QPushButton*>(sender())
或 QPushButton * clickedButton = qobject_cast(发送者()); 据我所知,qobject_cast在C++中的作用类似于dynamic_cast <>。但是,如果你有编译问题,上面给出的任何解决方案都应该正常工作。
非常感谢 – Cengaver 2011-04-19 15:01:27
- 1. 如何禁用默认qpushbutton
- 2. 当另一个被检查时禁用两个QPushButton
- 3. 链路QPushButton宽度到另一个QPushButton
- 4. 如何检查QPushButton是否被点击
- 5. 切换一个QPushButton
- 6. 如何使一个text_field被禁用,直到使用firewatir打入启用状态?
- 7. 在任务之前禁用QPushButton
- 8. 如何在QPushButton中使用Button_SetElevationRequiredState?
- 9. pyqt:如何禁用QPushButton的多次点击?
- 10. 如何使HTML看起来被禁用?
- 11. 如何使一个ItemsSource不被使用?
- 12. 如何使一个GridViewColumn只读/禁用?
- 13. Java-如何问“如果一个JButton被禁用,然后___”
- 14. 禁用一个KeyboardInterrupt它已被使用过一次后
- 15. 使一个单元格被禁用,直到另一个按钮被选中TableViewCell
- 16. 如何旋转QPushButton?
- 17. 如何迭代QPushButton
- 18. 如何找出一个元素被禁用的原因?
- 19. 如何禁用按钮的另一个按钮被点击
- 20. 如何检查一个控件是否被禁用?
- 21. 使用两个图像设计QPushButton
- 22. 如何继承Qpushbutton信号
- 23. 如何通过点击QPushbutton
- 24. 如何包装一个QFileDialog和QPushButton对象中的
- 25. 如何在QPushButton点击位置绘制一个形状?
- 26. 如何改变一个QPushButton图标,当它有焦点?
- 27. PyQT如何在QPushbutton上创建一个QEvent.Enter?
- 28. 使容器格被禁用
- 29. 不能使msdropdown被禁用
- 30. 我该如何禁止一个方法被触发?
我认为这是正确的,但它提供了错误,“qobject_cast没有在此范围内声明”,即使我包含“qobject.h” – Cengaver 2011-04-19 12:31:30