QSignalMapper类是Qt中的一个辅助类,它可以将多个信号映射到同一槽函数上。在使用QSignalMapper类时,需要先创建一个QSignalMapper对象,并为其设置一个槽函数,然后再调用其map()函数来映射信号和参数。当有信号发出时,QSignalMapper会根据不同的参数调用对应的槽函数。
下面是一个使用QSignalMapper类的示例:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QSignalMapper>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget widget;
widget.setWindowTitle("QSignalMapper Example");
// 创建QSignalMapper对象并为其设置槽函数
QSignalMapper signalMapper(&widget);
QObject::connect(&signalMapper, SIGNAL(mapped(QString)), &widget, SLOT(setWindowTitle(QString)));
// 创建三个按钮,并将它们的点击信号与QSignalMapper的map()函数关联起来
QPushButton button1("Button 1", &widget);
signalMapper.setMapping(&button1, "Button 1 Clicked");
QObject::connect(&button1, SIGNAL(clicked()), &signalMapper, SLOT(map()));
QPushButton button2("Button 2", &widget);
signalMapper.setMapping(&button2, "Button 2 Clicked");
QObject::connect(&button2, SIGNAL(clicked()), &signalMapper, SLOT(map()));
QPushButton button3("Button 3", &widget);
signalMapper.setMapping(&button3, "Button 3 Clicked");
QObject::connect(&button3, SIGNAL(clicked()), &signalMapper, SLOT(map()));
widget.show();
return app.exec();
}
在上面的示例中,创建了一个QWidget窗口和三个QPushButton按钮,将每个按钮的点击信号与QSignalMapper的map()函数关联起来,并为QSignalMapper设置了一个槽函数setWindowTitle()。当点击每个按钮时,QSignalMapper会调用setMapping()函数将相应的参数(字符串)映射到map()函数上,并触发mapped()信号,然后QSignalMapper会根据不同的参数调用对应的槽函数setWindowTitle(),从而更新窗口的标题。
运行程序后,点击任意一个按钮,可以看到窗口的标题会相应地改变。这就是QSignalMapper类的作用。