Qt学习(一):两个独立窗口的信号通信
生活随笔
收集整理的這篇文章主要介紹了
Qt学习(一):两个独立窗口的信号通信
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1知識點
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_OBJECTpublic: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_Hsubwidget.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_Hmainwindow.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);//接收子窗口的信號方式二:宏函數SIGNALconnect(&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学习(一):两个独立窗口的信号通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows10自动填充密码开机自动登
- 下一篇: Qt学习(二):菜单栏、工具栏和对话框