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

 更新时间:2022年01月05日 19:13:29   作者:踏莎行hyx  
这篇文章主要为大家详细介绍了Qt开发实现跨窗口信号槽通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

多窗口通信,如果是窗口类对象之间互相包含,则可以直接开放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、通过信号槽函数传递消息参数

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

相关文章

  • C++中类型推断(auto和decltype)的使用

    C++中类型推断(auto和decltype)的使用

    在C++11之前,每个数据类型都需要在编译时显示声明,在运行时限制表达式的值,但在C++的新版本之后,引入了 auto 和 decltype等关键字,本文就来介绍一下C++中类型推断(auto和decltype)的使用,感兴趣的可以了解一下
    2023-12-12
  • 基于OpenGL实现多段Bezier曲线拼接

    基于OpenGL实现多段Bezier曲线拼接

    这篇文章主要为大家详细介绍了基于OpenGL实现多段Bezier曲线拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++11运算符重载和向量类重载实例详解(<<,>>,+,-,*等)

    C++11运算符重载和向量类重载实例详解(<<,>>,+,-,*等)

    这篇文章主要给大家介绍了关于C++11运算符重载和向量类重载的相关资料,主要包括<<,>>,+,-,*等,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • C++ 多线程之互斥量(mutex)详解

    C++ 多线程之互斥量(mutex)详解

    这篇文章主要为大家详细介绍了C++多线程之互斥量(mutex),文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++实现图书馆管理系统

    C++实现图书馆管理系统

    这篇文章主要为大家详细介绍了C++实现图书馆管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈C++为什么非要引入那几种类型转换

    浅谈C++为什么非要引入那几种类型转换

    这篇文章主要介绍了C++为什么非要引入那几种类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C++超详细梳理IO流操作

    C++超详细梳理IO流操作

    当程序与外界进行信息交换时,存在两个对象,一个是程序中的对象,另一个是文件对象。流是信息流动的一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动
    2022-07-07
  • 搭建C语言开发环境(Windows平台)汇总

    搭建C语言开发环境(Windows平台)汇总

    本文给大家汇总了5种在WIN平台下搭建C语言开发环境的方法,包括一、在Windows平台配置GNU环境,二、使用Sublime Test开发C语言程序,三、使用VisualStudio开发C语言程序,四、搭建EclipseCDT集成开发环境,五、搭建Clion集成开发环境,有需要的小伙伴可以参考下
    2015-11-11
  • C++实现LeetCode(58.求末尾单词的长度)

    C++实现LeetCode(58.求末尾单词的长度)

    这篇文章主要介绍了C++实现LeetCode(58.求末尾单词的长度),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • MFC自绘Button按钮分析和实现

    MFC自绘Button按钮分析和实现

    这篇文章主要为大家详细介绍了MFC自绘Button按钮分析和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论