Qt開(kāi)發(fā)實(shí)現(xiàn)跨窗口信號(hào)槽通信
多窗口通信,如果是窗口類(lèi)對(duì)象之間互相包含,則可以直接開(kāi)放public接口調(diào)用,不過(guò),很多情況下主窗口和子窗口之間要做到異步消息通信,就必須依賴(lài)到跨窗口的信號(hào)槽,以下是一個(gè)簡(jiǎn)單的示例。
母窗口
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、子窗口發(fā)送信號(hào)
2、主窗口打開(kāi)子窗口,并創(chuàng)建好信號(hào)槽關(guān)聯(lián)
3、通過(guò)信號(hào)槽函數(shù)傳遞消息參數(shù)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中類(lèi)型推斷(auto和decltype)的使用
在C++11之前,每個(gè)數(shù)據(jù)類(lèi)型都需要在編譯時(shí)顯示聲明,在運(yùn)行時(shí)限制表達(dá)式的值,但在C++的新版本之后,引入了 auto 和 decltype等關(guān)鍵字,本文就來(lái)介紹一下C++中類(lèi)型推斷(auto和decltype)的使用,感興趣的可以了解一下2023-12-12基于OpenGL實(shí)現(xiàn)多段Bezier曲線(xiàn)拼接
這篇文章主要為大家詳細(xì)介紹了基于OpenGL實(shí)現(xiàn)多段Bezier曲線(xiàn)拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C++11運(yùn)算符重載和向量類(lèi)重載實(shí)例詳解(<<,>>,+,-,*等)
這篇文章主要給大家介紹了關(guān)于C++11運(yùn)算符重載和向量類(lèi)重載的相關(guān)資料,主要包括<<,>>,+,-,*等,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書(shū)館管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03淺談C++為什么非要引入那幾種類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了C++為什么非要引入那幾種類(lèi)型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03搭建C語(yǔ)言開(kāi)發(fā)環(huán)境(Windows平臺(tái))匯總
本文給大家匯總了5種在WIN平臺(tái)下搭建C語(yǔ)言開(kāi)發(fā)環(huán)境的方法,包括一、在Windows平臺(tái)配置GNU環(huán)境,二、使用Sublime Test開(kāi)發(fā)C語(yǔ)言程序,三、使用VisualStudio開(kāi)發(fā)C語(yǔ)言程序,四、搭建EclipseCDT集成開(kāi)發(fā)環(huán)境,五、搭建Clion集成開(kāi)發(fā)環(huán)境,有需要的小伙伴可以參考下2015-11-11C++實(shí)現(xiàn)LeetCode(58.求末尾單詞的長(zhǎng)度)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(58.求末尾單詞的長(zhǎng)度),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07