c++ Qt信号槽示例
时间: 2024-10-22 17:28:58 浏览: 22
Qt5.9 C++开发指南.pdf 及示例源码
5星 · 资源好评率100%
在C++中,Qt提供了一套强大的信号槽系统用于处理事件驱动的编程。信号(signal)是当某个特定事件发生时发出的通知,而槽(slot)是处理这些信号的函数。下面是一个简单的C++ Qt信号槽的例子,使用QSignalMapper来处理QComboBox中的`activated`信号:
```cpp
#include <QObject>
#include <QComboBox>
#include <QSignalMapper>
class ComboBoxDelegate : public QObject {
public slots:
void onItemActivated(int index) {
QString itemText = comboBox->itemText(index);
qDebug() << "Selected item: " << itemText;
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建窗口和QComboBox
QWidget *window = new QWidget();
QComboBox *comboBox = new QComboBox(window);
comboBox->addItems({"Option 1", "Option 2", "Option 3"});
// 创建信号映射器
QSignalMapper *mapper = new QSignalMapper(this);
// 将comboBox的activated信号映射到onItemActivated槽
connect(comboBox, &QComboBox::activated, mapper, SLOT(map()));
connect(mapper, &QSignalMapper::mapped, this, &ComboBoxDelegate::onItemActivated, Qt::QueuedConnection);
// 当信号激活时,信号映射器会将索引映射到对应的槽
mapper->setMapping(comboBox, comboBox->currentIndex());
window->show();
return app.exec();
}
```
在这个例子中,当我们点击QComboBox中的选项时,`activated`信号会被发送给信号映射器,然后映射到`onItemActivated`槽,显示所选的选项。这里使用了`Qt::QueuedConnection`确保槽函数在UI线程中安全地执行。
阅读全文