zoukankan      html  css  js  c++  java
  • qt的信号和槽

    qt的信号和槽 网上有很多代码。就是定义两个函数。一个是信号函数。一个是槽函数。连起来就能用了;

    一个是插头。一个是插座。插上就有电了。

    设计的绝妙啊;

    可是我觉得麻烦啊

    我需要一个简单的机制。弄个信号槽的大全。在工程里面那里都能随便用。不要每次需要的时候才去定义信号和槽函数。那多麻烦。我就想一次定义。到处使用。免得下次还去找怎么定义

    这样才能让老子满意。否则那些机制多难记i啊。

    最简单的就是我需要传递消息。传递值。定义一次。很多地方都抓起来就用。

    怎么实现呢。两个类 。

    先创建一个类 。这个是为了发消息;

    ZXGlobalSendMsg类的头文件

    #ifndef ZXGLOBALSENDMSG_H
    #define ZXGLOBALSENDMSG_H
    
    
    #include <QObject>
    
    
    class ZXGlobalSendMsg : public QObject
    {
        Q_OBJECT
    public:
        explicit ZXGlobalSendMsg(QObject *parent = 0);
    
    
    signals:
    void sendData(const QString strmsg);//对。最关键的是这个。我要发送数据;。当然了。函数的参数你可以随便定义。可以是结构体。指针。数组列表等等都可以;
    public slots:
    };
    
    
    #endif // ZXGLOBALSENDMSG_H

    cpp里面可什么都没用到写的
    #include "zxglobalsendmsg.h"
    
    
    ZXGlobalSendMsg::ZXGlobalSendMsg(QObject *parent) : QObject(parent)
    {
    
    
    }

    再来一个类XGlobal。这个是我最常用的编码风格了。就是我习惯了写很多静态函数。常用的函数在这个类里面
    以后任何地方包含了这个类的头文件。然后两个点就可以用函数鸟。。。。。

    #include <qDebug>
    #include <QFile>
    #include "QComboBox.h"
    #include "ZXGlobalSendMsg.h"
    
    
    
    
    
    
    class XGlobal : public QObject
    {
        Q_OBJECT
    public:
        ~XGlobal();
    
    
        static  ZXGlobalSendMsg mZXGlobalSendMsg;//这个就是那个信号所在的类;
    public slots:
        static   void mShowMessage(const QString strmsg);//这个就是我任何地方要发送消息或者传递值的函数。就是任何地方。我调用这个函数。就把消息发出去了;

    };
    cpp文件里面只有一个函数;
    void XGlobal::mShowMessage(const QString strmsg)
    {
        emit mZXGlobalSendMsg.sendData(strmsg);
        // XSystemParam::pmXGlobal->showMessage(strmsg);
    }

    以后任何地方我都这么发消息就好。头文件一包括。就调用这个就行;
    对啊消息发了。发到那里去了呢
    对,我常常要在mainwindow 里面显示。

    MainWindow的构造函数如下;

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);

     QObject::connect(&XGlobal::mZXGlobalSendMsg,SIGNAL(sendData(QString)),this,SLOT(receiveOtherWndData(QString)));//

    //没错。这是信号和槽关联的地方;

    }

    
    
    void MainWindow::receiveOtherWndData(const QString data)
    {
         showMessage(data);     //获取传递过来的数据
    }

    //真正显示的地方在这里;拿到了消息。你爱怎么折腾都行;我是显示到界面的列表里;
    void MainWindow::showMessage(QString strmsg)
    {
    if(myListInfo->count()>3000)
    {
    myListInfo->clear();
    }
    QListWidgetItem*item=new QListWidgetItem;
    item->setText(strmsg);
    //设置列表项的文本
    myListInfo->addItem(item); //加载列表项到列表框
    }

    好了。到现在为止,一切都好了。使用很简单了;

    #include "XGlobal.h"
    XGlobal::mShowMessage("查看关于信息");
    先包括头文件。然后任何地方都可以
    XGlobal::mShowMessage
    是不是很方便就在任何地方把消息都发送到主窗口了?

    理解了没?


    宋世鹏宇宙信息网 。看多了宇宙之书。编程就懒惰起来了。就喜欢一次编写。到处使用 ;;
    
    

    
    
    
    
    
    
  • 相关阅读:
    Office Access 2007 的连接方法变了
    程序员的灯下黑:坚持和良好心态近乎道
    Unity浅析
    WPF设置样式的几种方式
    关于常用 软件授权 Licence说明
    WCF消息队列
    委托利用GetInvocationList处理链式委托
    WCF chatroom源码解析
    写一个Jquery字体插件
    浅谈AsyncState与AsyncDelegate使用的异同
  • 原文地址:https://www.cnblogs.com/zhoujgssp/p/7917635.html
Copyright © 2011-2022 走看看