亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt如何實現兩個獨立窗口的信號通信

發布時間:2022-01-05 17:24:38 來源:億速云 閱讀:215 作者:小新 欄目:開發技術

小編給大家分享一下Qt如何實現兩個獨立窗口的信號通信,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

具體內容如下

知識點

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

結果演示

Qt如何實現兩個獨立窗口的信號通信

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,"唐維康");
}

看完了這篇文章,相信你對“Qt如何實現兩個獨立窗口的信號通信”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

泊头市| 屯留县| 台安县| 弥勒县| 囊谦县| 武定县| 简阳市| 慈溪市| 门头沟区| 南木林县| 美姑县| 彰武县| 大足县| 淮安市| 桃江县| 密云县| 高淳县| 平原县| 南部县| 湟源县| 甘德县| 水城县| 谢通门县| 苗栗市| 康保县| 凉城县| 泰兴市| 河曲县| 彭水| 府谷县| 祁阳县| 多伦县| 砚山县| 阳山县| 乐亭县| 沁源县| 兴安县| 大名县| 西充县| 若羌县| 兴国县|