Qt开发实现跨窗口信号槽通信
程序员文章站
2022-06-21 16:07:54
多窗口通信,如果是窗口类对象之间互相包含,则可以直接开放public接口调用,不过,很多情况下主窗口和子窗口之间要做到异步消息通信,就必须依赖到跨窗口的信号槽,以下是一个简单的示例。母窗口mainwi...
多窗口通信,如果是窗口类对象之间互相包含,则可以直接开放public接口调用,不过,很多情况下主窗口和子窗口之间要做到异步消息通信,就必须依赖到跨窗口的信号槽,以下是一个简单的示例。
母窗口
mainwindow.h
#ifndef mainwindow_h #define mainwindow_h #include <qmainwindow> #include <qlabel> #include <qstring> class mainwindow : public qmainwindow { q_object public: mainwindow(qwidget *parent = 0); ~mainwindow(); private slots: void receivemsg(qstring str); private: qlabel *label; }; #endif // mainwindow_h
mainwindow.cpp
#include "mainwindow.h" #include "subwindow.h" mainwindow::mainwindow(qwidget *parent) : qmainwindow(parent) { setwindowtitle("mainwindow"); setfixedsize(400, 300); // add text label label = new qlabel(this); label->settext("to be changed"); // open sub window and connect subwindow *subwindow = new subwindow(this); connect(subwindow, signal(sendtext(qstring)), this, slot(receivemsg(qstring))); subwindow->show(); // use open or exec both ok } void mainwindow::receivemsg(qstring str) { // receive msg in the slot label->settext(str); } mainwindow::~mainwindow() { }
子窗口
subwindow.h
#ifndef subwindow_h #define subwindow_h #include <qdialog> class subwindow : public qdialog { q_object public: explicit subwindow(qwidget *parent = 0); signals: void sendtext(qstring str); public slots: void onbtnclick(); }; #endif // subwindow_h
subwindow.cpp
#include "qpushbutton" #include "subwindow.h" subwindow::subwindow(qwidget *parent) : qdialog(parent) { setwindowtitle("subwindow"); setfixedsize(200, 100); qpushbutton *button = new qpushbutton("click", this); connect(button, signal(clicked()), this, slot(onbtnclick())); } void subwindow::onbtnclick() { // send signal emit sendtext("hello qt"); }
截图:
基本思路:
1、子窗口发送信号
2、主窗口打开子窗口,并创建好信号槽关联
3、通过信号槽函数传递消息参数
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。