Qt连接信号和插槽

Qt连接信号和插槽

问题描述:

在我的Qt项目中,我有QPushButtonQLineEdit实例。我想在按下QPushButton时将QLineEdit设置为禁用状态。Qt连接信号和插槽

我写这段代码:

this->btn = new QPushButton(this); 
this->txt = new QLineEdit(this); 
QObject::connect(this->btn,SIGNAL(clicked(bool)),this->txt,SLOT(setDisabled(bool))); 

不工作。 你能帮我吗?我的错误是什么?

clicked(bool)信号始终为false,用于非可选按钮。除非您设置setCheckable(true),否则它绝不会发出true,在这种情况下,您在检查时会发出true,而在您取消选中时发出false。不可检查的按钮不能被检查(显然),这就是为什么信号始终发出false

因此,在这种情况下,只需提供您自己的插槽,您可以在setDisabled(true)setDisabled(false)之间手动切换。或者先用setCheckable(true)(这可能更适合在这种情况下,可以更适合这个按钮进行检查;只是测试它并查看。)

QLineEdit不具有方法setDisabled根据documentation

尝试setReadOnly代替。

+1

该文档说明它具有'19个从QWidget继承的公共槽'和'void \t setDisabled布尔禁用)'特别是。 – Kolyunya

+0

Sry,你说得对。按钮是否可检查?否则,争论似乎一直是错误的。 – slosd

+0

不,可以检查按钮...好像我应该实现自己的信号? – Kolyunya