QT 按钮的重复点击,第一次点击后断开按钮槽函数连接或者禁用按钮还是多次触发怎么办
时间: 2023-09-11 18:07:17 浏览: 116
可以使用一个标志位来控制按钮是否可以继续触发槽函数。具体实现方式如下:
1. 在按钮所在类的头文件中定义一个 bool 类型的变量,用来表示按钮是否可以继续触发槽函数。初始值为 true。
```c++
private:
bool m_buttonEnabled;
```
2. 在按钮所在类的构造函数中,将 m_buttonEnabled 初始化为 true。
```c++
MyClass::MyClass(QWidget *parent)
: QWidget(parent)
, m_buttonEnabled(true)
{
// ...
}
```
3. 在按钮的槽函数中,先检查 m_buttonEnabled 是否为 true。如果为 true,则执行槽函数中的代码,并将 m_buttonEnabled 设置为 false。如果为 false,则不执行槽函数中的代码。
```c++
void MyClass::onButtonClicked()
{
if (m_buttonEnabled) {
// 执行槽函数中的代码
// ...
// 设置 m_buttonEnabled 为 false,禁止重复触发槽函数
m_buttonEnabled = false;
}
}
```
4. 在槽函数中执行完需要执行的代码后,可以通过 QTimer 来延迟一定时间后再将 m_buttonEnabled 设置为 true,这样就可以让按钮重新可以触发槽函数了。
```c++
void MyClass::onButtonClicked()
{
if (m_buttonEnabled) {
// 执行槽函数中的代码
// ...
// 设置 m_buttonEnabled 为 false,禁止重复触发槽函数
m_buttonEnabled = false;
// 延迟一定时间后,将 m_buttonEnabled 设置为 true,按钮就可以再次触发槽函数了
QTimer::singleShot(1000, [=]() {
m_buttonEnabled = true;
});
}
}
```
阅读全文