Qt實現(xiàn)兩個獨立窗口的信號通信
更新時間:2022年01月05日 14:48:45 作者:唐維康
這篇文章主要為大家詳細介紹了Qt實現(xiàn)兩個獨立窗口的信號通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Qt實現(xiàn)兩個獨立窗口的信號通信的具體代碼,供大家參考,具體內容如下
知識點
Qt兩個窗口的建立、窗口的通信、處理子窗口的信號、信號的重載、Lamber表達式、自定義信號和自定義槽函數(shù)
結果演示
main.cpp
#include "mainwindow.h" #include "subwidget.h" #include <QApplication> int main(int argc, char *argv[]) { ? ? QApplication a(argc, argv); ? ? MainWindow w; ? ? w.show(); ? ? return a.exec(); }
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> #include "subwidget.h" class MainWindow : public QMainWindow { ? ? Q_OBJECT public: ? ? MainWindow(QWidget *parent = 0); ? ? ~MainWindow(); public slots: ? ? void changeWin(); ? ? void ShutDown(); ? ? void delSub(); ? ? void delSubPrint(int,QString); private: ? ? QPushButton *p1; ? ? QPushButton *shutdown;//關閉按鈕 ? ? SubWidget subW; }; #endif // MAINWINDOW_H
subwidget.h
#ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushButton.h> class SubWidget : public QWidget { ? ? Q_OBJECT public: ? ? explicit SubWidget(QWidget *parent = 0); ? ? void sendSlot(); signals: ? ? /* 信號必須有signals關鍵字來聲明 ? ? ? ? ? * 信號沒有返回值,但可以有參數(shù) ? ? ? ? ? * 信號就是函數(shù)的聲明,只需聲明,無需定義 ? ? ? ? ? * 使用:emit mySignal(); ? ? ? ? ? * 信號可以重載 ? ? ? */ ? ? void mySignal(); ? ? void mySignal(int,QString); public slots: private: ? ? QPushButton *subP1;//子窗口按鈕 }; #endif // SUBWIDGET_H
mainwindow.cpp
#include "mainwindow.h" #include <QDebug> //打印 MainWindow::MainWindow(QWidget *parent) ? ? : QMainWindow(parent) { ? ? resize(400,300); ? ? this->setWindowTitle("BOSS"); ? ? p1=new QPushButton(this); ? ? //p1->setParent(this); ? ? p1->setText("切換到子窗口"); ? ? shutdown=new QPushButton(this); ? ? shutdown->setText("關閉"); ? ? shutdown->move(100,0); ? ? //關閉所有窗口 ? ? connect(shutdown,&QPushButton::released,this,&MainWindow::ShutDown); ? ? //主窗口隱藏,子窗口顯示 ? ? connect(p1,&QPushButton::released,this,&MainWindow::changeWin); ? ? /* &p1: 信號發(fā)出者,指針類型 ? ? ? ? * &QPushButton::pressed:處理的信號, ?&發(fā)送者的類名::信號名字 ? ? ? ? * this: 信號接收者 ? ? ? ? * &MainWidget::close: 槽函數(shù),信號處理函數(shù) ?&接收的類名::槽函數(shù)名字 ? ? ? ?*/ ? ? ? ?/* 自定義槽,普通函數(shù)的用法 ? ? ? ? * Qt5:任意的成員函數(shù),普通全局函數(shù),靜態(tài)函數(shù) ? ? ? ? * 槽函數(shù)需要和信號一致(參數(shù),返回值) ? ? ? ? * 由于信號都是沒有返回值,所以,槽函數(shù)一定沒有返回值 ? ? ? ? */ ? ? //主窗口調用子窗口的信號 ? ? //主窗口顯示,子窗口隱藏 ? ? //connect(&subW,&SubWidget::mySignal,this,&MainWindow::delSub);//函數(shù)重載用不了 ? ? //信號的重載 一個有參數(shù) 一個無參數(shù) ? ? //接收子窗口的信號方式一 // ? ?void (SubWidget::*SignalOnly)()=&SubWidget::mySignal; // ? ?connect(&subW,SignalOnly,this,&MainWindow::delSub); // ? ?void (SubWidget::*SignalCanShu)(int,QString)=&SubWidget::mySignal; // ? ?connect(&subW,SignalCanShu,this,&MainWindow::delSubPrint); ? ? //接收子窗口的信號方式二:宏函數(shù)SIGNAL ? ? connect(&subW,SIGNAL(mySignal()),this,SLOT(delSub())); ? ? connect(&subW,SIGNAL(mySignal(int,QString)),this,SLOT(delSubPrint(int,QString))); ? ? //Lambda表達式, 匿名函數(shù)對象 ? ? //C++11增加的新特性, 項目文件: CONFIG += C++11 ? ? //Qt配合信號一起使用,非常方便 ? ? QPushButton *LamPush=new QPushButton(this); ? ? LamPush->setText("Lamber表達式"); ? ? LamPush->move(180,0); ? ? int a=10; ? ? connect(LamPush,&QPushButton::clicked, ? ? ? ? ? ? [=](){ ? ? ? ? ? ? ? ? ? ? qDebug()<<a; ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ); } void MainWindow::changeWin(){ ? ? this->hide(); ? ? subW.show(); } //關閉窗口 void MainWindow::ShutDown(){ ? ? this->close(); ? ? subW.close(); } void MainWindow::delSub(){ ? ? subW.hide(); ? ? this->show(); } void MainWindow::delSubPrint(int age,QString name){ ? ? // str.toUtf8() -> 字節(jié)數(shù)組QByteArray ? ? ?// ……data() ?-> QByteArray -> char * ? ? qDebug() << age << name.toUtf8().data(); } MainWindow::~MainWindow() { }
subwidget.cpp
#include "subwidget.h" SubWidget::SubWidget(QWidget *parent) : ? ? QWidget(parent) { ? ? this->setWindowTitle("SUB"); ? ? subP1=new QPushButton(this); ? ? subP1->setText("切換到主窗口"); ? ? resize(500,400); ? ? //子窗口發(fā)送信號 信號是有參數(shù)+無參數(shù)的 ? ? connect(subP1,&QPushButton::clicked,this,&SubWidget::sendSlot); } //回調函數(shù) void SubWidget::sendSlot(){ ? ? emit mySignal(); ? ? emit mySignal(26,"唐維康"); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Qt串口通信開發(fā)之QSerialPort模塊詳細使用方法與實例
- Qt串口通信開發(fā)之Qt串口通信模塊QSerialPort開發(fā)完整實例(串口助手開發(fā))
- PyQt5通信機制 信號與槽詳解
- Qt串口通信開發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法
- QT網(wǎng)絡編程Tcp下C/S架構的即時通信實例
- Qt串口通信開發(fā)之QSerialPort模塊簡單使用方法與實例
- QT網(wǎng)絡編程UDP下C/S架構廣播通信(實例講解)
- QT串口通信的實現(xiàn)方法
- QT5實現(xiàn)UDP通信的示例代碼
- Qt實現(xiàn)簡單UDP通信
相關文章
利用C++實現(xiàn)從std::string類型到bool型的轉換
利用C++實現(xiàn)從std::string類型到bool型的轉換。需要的朋友可以過來參考下。希望對大家有所幫助2013-10-10C++詳解使用floor&ceil&round實現(xiàn)保留小數(shù)點后兩位
這篇文章主要介紹了C++使用floor&ceil&round實現(xiàn)保留小數(shù)點后兩位的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07c++創(chuàng)建二維動態(tài)數(shù)組與內存釋放問題
這篇文章主要介紹了c++創(chuàng)建二維動態(tài)數(shù)組與內存釋放問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06