• QSignalMapper的使用


    官方文档:http://doc.qt.io/qt-5/qsignalmapper.html

    参考:      https://blog.csdn.net/nirendao/article/details/51607115

    QSignalMapper 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参数的信号,在具体的项目中我们可以根据需要进行相应的转换。用例子来说明比较直观:

    一个基于Widget的QT工程,头文件:

    #ifndef WIDGET_H
    #define WIDGET_H
    #include <QWidget>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = 0);
        ~Widget();
    public slots: void handleBtn(QString text); }; #endif // WIDGET_H

    实现文件:

    #include "widget.h"
    #include <QSignalMapper>
    #include <QPushButton>
    #include <QDebug>
    #include <QGridLayout>
    #include <QList>
    #include <QString>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
        QList<QString> texts;
        texts.append("button1");
        texts.append("button2");
    
        QSignalMapper *signalMapper = new QSignalMapper(this);
    
        QGridLayout *gridLayout = new QGridLayout;
        for (int i = 0; i < texts.size(); ++i) {
            QPushButton *button = new QPushButton(texts[i]);
    
            signalMapper->setMapping(button, texts[i]);
            connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
    
            gridLayout->addWidget(button, i / 3, i % 3);
        }
    
        connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(handleBtn(QString)));
    
        setLayout(gridLayout);
    }
    
    void Widget::handleBtn(QString text)
    {
        qDebug() << "cliked button is " << text << " ------------>";
    }
    
    Widget::~Widget()
    {
    
    }

    运行效果:

     

    点击按钮,在输出窗口可以看到:

    cliked button is  "button1"  ------------>
    cliked button is  "button2"  ------------>
  • 相关阅读:
    最长上升子序列(矩形嵌套)
    中国剩余定理模板poj1006
    POJ 2891 扩展欧几里德
    2015多校联赛第三场(部分题解)
    树链剖分
    深度理解链式前向星
    POJ 1228 Grandpa's Estate(凸包)
    旋转卡壳(一)
    最小圆覆盖 hdu 3007
    半平面求交 模板
  • 原文地址:https://www.cnblogs.com/hpcpp/p/8880061.html
Copyright © 2020-2023  润新知