亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt實現(xiàn)兩個獨立窗口的信號通信

 更新時間:2022年01月05日 14:48:45   作者:唐維康  
這篇文章主要為大家詳細介紹了Qt實現(xiàn)兩個獨立窗口的信號通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

知識點

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

結(jié)果演示

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;//關(guān)閉按鈕
? ? 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關(guān)鍵字來聲明
? ? ? ? ? * 信號沒有返回值,但可以有參數(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("關(guān)閉");
? ? shutdown->move(100,0);

? ? //關(guān)閉所有窗口
? ? 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ù)一定沒有返回值
? ? ? ? */

? ? //主窗口調(diào)用子窗口的信號
? ? //主窗口顯示,子窗口隱藏
? ? //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();
}

//關(guān)閉窗口
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);

}

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論