C/C++ qt怎么实现在一个类中点击一个按钮后给外部发生一个信号,然后有一个接口可以让外部设置结束标志位(普通函数,不是槽函数),然后等待外部通过接口修改这个类的一个标志位后才能继续执行
时间: 2024-10-25 09:13:38 浏览: 16
在C++中,Qt提供了一套强大的信号(Signal)和槽(Slot)机制来处理这种交互场景。你可以创建一个拥有点击事件的自定义类,并在其内部定义一个信号,当按钮被点击时发出。对于外部设置结束标志位的操作,可以设计一个公共的接口(比如成员函数),外部可以通过该接口改变类内的标志。
首先,你需要在`QObject`派生类上声明信号和槽。假设我们有一个名为`MyButton`的类,它有一个名为`endFlag`的成员变量:
```cpp
class MyButton : public QObject {
public:
explicit MyButton(QObject *parent = nullptr)
: QObject(parent) {
connect(this, &MyButton::buttonClicked, this, &MyButton::waitForEndFlag);
}
void clickButton() {
emit buttonClicked(); // 触发信号
}
void setEndFlag(bool flag) { // 公开的接口
endFlag = flag;
}
signals:
void buttonClicked(); // 点击信号
private:
bool endFlag; // 结束标志位
};
```
接下来,在需要响应按钮点击的地方,你可以在`waitForEndFlag`槽函数中监听信号并检查标志位:
```cpp
void MyButton::waitForEndFlag() {
while (!endFlag) {
qApp->processEvents(QEventLoop::AllEvents); // 检查标志位,如果没有设置则等待
}
// 当标志位变为true时,这里可以开始执行后续操作
}
```
阅读全文