欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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");
}

截图:

Qt开发实现跨窗口信号槽通信

基本思路:

1、子窗口发送信号

2、主窗口打开子窗口,并创建好信号槽关联

3、通过信号槽函数传递消息参数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。