日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Qt實現兩個獨立窗口的信號通信_C 語言

作者:唐維康 ? 更新時間: 2022-03-23 編程語言

本文實例為大家分享了Qt實現兩個獨立窗口的信號通信的具體代碼,供大家參考,具體內容如下

知識點

Qt兩個窗口的建立、窗口的通信、處理子窗口的信號、信號的重載、Lamber表達式、自定義信號和自定義槽函數

結果演示

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關鍵字來聲明
? ? ? ? ? * 信號沒有返回值,但可以有參數
? ? ? ? ? * 信號就是函數的聲明,只需聲明,無需定義
? ? ? ? ? * 使用: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: 信號發出者,指針類型
? ? ? ? * &QPushButton::pressed:處理的信號, ?&發送者的類名::信號名字
? ? ? ? * this: 信號接收者
? ? ? ? * &MainWidget::close: 槽函數,信號處理函數 ?&接收的類名::槽函數名字
? ? ? ?*/

? ? ? ?/* 自定義槽,普通函數的用法
? ? ? ? * Qt5:任意的成員函數,普通全局函數,靜態函數
? ? ? ? * 槽函數需要和信號一致(參數,返回值)
? ? ? ? * 由于信號都是沒有返回值,所以,槽函數一定沒有返回值
? ? ? ? */

? ? //主窗口調用子窗口的信號
? ? //主窗口顯示,子窗口隱藏
? ? //connect(&subW,&SubWidget::mySignal,this,&MainWindow::delSub);//函數重載用不了

? ? //信號的重載 一個有參數 一個無參數
? ? //接收子窗口的信號方式一
// ? ?void (SubWidget::*SignalOnly)()=&SubWidget::mySignal;
// ? ?connect(&subW,SignalOnly,this,&MainWindow::delSub);

// ? ?void (SubWidget::*SignalCanShu)(int,QString)=&SubWidget::mySignal;
// ? ?connect(&subW,SignalCanShu,this,&MainWindow::delSubPrint);

? ? //接收子窗口的信號方式二:宏函數SIGNAL
? ? connect(&subW,SIGNAL(mySignal()),this,SLOT(delSub()));
? ? connect(&subW,SIGNAL(mySignal(int,QString)),this,SLOT(delSubPrint(int,QString)));

? ? //Lambda表達式, 匿名函數對象
? ? //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() -> 字節數組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);

? ? //子窗口發送信號 信號是有參數+無參數的
? ? connect(subP1,&QPushButton::clicked,this,&SubWidget::sendSlot);

}

//回調函數
void SubWidget::sendSlot(){
? ? emit mySignal();
? ? emit mySignal(26,"唐維康");
}

原文鏈接:https://blog.csdn.net/taw19960426/article/details/121939735

欄目分類
最近更新