【QT】QT的多界面跳轉以及界面之間傳遞參數

QT的多界面跳轉以及界面之間傳遞參數

  • 一、在QT工程中添加新的界面
  • 二、多界面跳轉的兩種情況
    • 1、A界面跳到B界面,不需要返回
    • 2、A界面跳到B界面,需要返回
      • 1)使用this指針傳遞將當前界面地址傳遞給下一界面
      • 2)使用parentWidget函數獲取上一級窗口的指針
      • 示例代碼:
  • 三、界面之間傳遞參數(本質上是類跟類之間傳遞信息)
    • 1、B界面的類中定義了一個公有的方法,通過調用這個公有方法把參數傳遞過去
    • 2、通過自定義信號來傳遞參數(發送信號,信號帶參數)

一、在QT工程中添加新的界面

右鍵點擊工程名–》選擇添加新文件–》QT–》QT設計師界面類–》模板選擇MainWindow
詳細步驟如下:
1、
在這里插入圖片描述
2、
在這里插入圖片描述
3、
在這里插入圖片描述
4、
在這里插入圖片描述
5、
在這里插入圖片描述

二、多界面跳轉的兩種情況

1、A界面跳到B界面,不需要返回

//創建主界面對象
MainWindow *newwin=new MainWindow(); //堆空間
//把主界面顯示出來
newwin->show();
//把登錄界面關閉 ,與需要返回的差別
this->close();

2、A界面跳到B界面,需要返回

1)使用this指針傳遞將當前界面地址傳遞給下一界面

// 創建主界面對象
MainWindow *newwin=new MainWindow(this); //此時必須傳遞this,原因是返回的時候需要根據這個this找到上一級窗口的地址
qDebug()<<"登錄界面的首地址是: "<<this;
//把主界面顯示出來
newwin->show();
//把登錄界面隱藏--》把登錄界面轉入系統后臺運行
this->hide();

2)使用parentWidget函數獲取上一級窗口的指針

QWidget *QWidget::parentWidget() const  返回值:返回上一級窗口的指針原理:當初你跳到下一個界面的時候必須把當前界面的地址傳遞給下一個界面

示例代碼:

// 第二個界面:info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"傳遞過來的參數是第一個界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}
//返回上一級界面按鈕的槽函數(第一個界面,登錄界面)
void info_win::on_btn_back_clicked()
{//得到上一級界面的地址//思路1:當初創建第二個界面的時候,把第一個界面的地址通過構造函數傳遞過來//      定義的私有成員save_mainwin就是用來保存傳遞過來的第一個界面的地址// 顯示上級界面
//    save_mainwin->show();//思路2:QT提供了一個函數,叫做parentWidget(),該函數用來返回上一級界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//關閉當前(第二個界面)界面delete this;    // this->close();
}// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();private slots:void on_btn_back_clicked();private:Ui::info_win *ui;QWidget *save_mainwin;
};#endif // INFO_WIN_H

三、界面之間傳遞參數(本質上是類跟類之間傳遞信息)

A界面傳遞參數給B界面(A是第一個界面,B是第二個界面)

1、B界面的類中定義了一個公有的方法,通過調用這個公有方法把參數傳遞過去

// A界面

// 第一個界面:// mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "info_win.h"
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
// 登錄按鈕的槽函數
void MainWindow::on_pushButton_clicked()
{// 獲取輸入的用戶名和密碼QString account = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(account == "aaa" && pswd == "123"){//創建第二個界面對象,必須傳遞this指針(把第一個界面的地址傳給第二個界面)info_win *info_w = new info_win(this);// 將第一個界面的賬號和密碼傳遞給第二個界面info_w->getMsg(account, pswd);qDebug()<<"第一界面的地址是"<<this;// 顯示第二個界面info_w->show();//隱藏第一個界面/*隱藏:把界面轉入到系統后臺運行,這個界面對象依然存在關閉:界面釋放掉,對象不存在了*/this->hide();}else{qDebug()<<"賬號或密碼錯誤,重新輸入";}
}

// B 界面

// 第二個界面
// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();void getMsg(QString account, QString pswd);private slots:void on_btn_back_clicked();private:Ui::info_win *ui;QWidget *save_mainwin;QString main_account;QString main_pswd;
};#endif // INFO_WIN_H// info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"傳遞過來的參數是第一個界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}
// 獲取第一個界面的賬號和密碼
void info_win::getMsg(QString account, QString pswd)
{main_account = account;main_pswd = pswd;qDebug()<<"第一個界面傳遞過來的賬號和密碼:"<<main_account<<"  "<<main_pswd;
}
//返回上一級界面按鈕的槽函數(第一個界面,登錄界面)
void info_win::on_btn_back_clicked()
{//得到上一級界面的地址//思路1:當初創建第二個界面的時候,把第一個界面的地址通過構造函數傳遞過來//      定義的私有成員save_mainwin就是用來保存傳遞過來的第一個界面的地址// 顯示上級界面
//    save_mainwin->show();//思路2:QT提供了一個函數,叫做parentWidget(),該函數用來返回上一級界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//關閉當前(第二個界面)界面delete this;    // this->close();
}

2、通過自定義信號來傳遞參數(發送信號,信號帶參數)

// 第一個界面:
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();signals: //自定義信號void sendSign(QString, QString);private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "info_win.h"
#include <QString>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
// 登錄按鈕的槽函數
void MainWindow::on_pushButton_clicked()
{// 獲取輸入的用戶名和密碼QString account = ui->lineEdit->text();QString pswd = ui->lineEdit_2->text();if(account == "aaa" && pswd == "123"){//創建第二個界面對象,必須傳遞this指針(把第一個界面的地址傳給第二個界面)info_win *info_w = new info_win(this);// 將第一個界面的賬號和密碼傳遞給第二個界面 --信號發送connect(this, SIGNAL(sendSign(QString, QString)), info_w, SLOT(recvSlot(QString, QString)));emit sendSign(account, pswd);qDebug()<<"第一界面的地址是"<<this;// 顯示第二個界面info_w->show();this->hide();}else{qDebug()<<"賬號或密碼錯誤,重新輸入";}
}
// 第二個界面:
// info_win.h
#ifndef INFO_WIN_H
#define INFO_WIN_H#include <QMainWindow>namespace Ui {
class info_win;
}class info_win : public QMainWindow
{Q_OBJECTpublic:explicit info_win(QWidget *parent = nullptr);~info_win();//void getMsg(QString account, QString pswd);private slots:void on_btn_back_clicked();void recvSlot(QString account, QString pswd);private:Ui::info_win *ui;QWidget *save_mainwin;QString main_account;QString main_pswd;
};#endif // INFO_WIN_H// info_win.cpp
#include "info_win.h"
#include "ui_info_win.h"
#include <QDebug>
#include <QWidget>info_win::info_win(QWidget *parent) :QMainWindow(parent),ui(new Ui::info_win)
{ui->setupUi(this);save_mainwin = parent;qDebug()<<"傳遞過來的參數是第一個界面的地址:"<<parent;
}info_win::~info_win()
{delete ui;
}//返回上一級界面按鈕的槽函數(第一個界面,登錄界面)
void info_win::on_btn_back_clicked()
{//得到上一級界面的地址//思路1:當初創建第二個界面的時候,把第一個界面的地址通過構造函數傳遞過來//      定義的私有成員save_mainwin就是用來保存傳遞過來的第一個界面的地址// 顯示上級界面
//    save_mainwin->show();//思路2:QT提供了一個函數,叫做parentWidget(),該函數用來返回上一級界面地址QWidget *main_win = this->parentWidget();main_win->show();qDebug()<<"main_win界面地址:"<<main_win;//關閉當前(第二個界面)界面delete this;    // this->close();
}void info_win::recvSlot(QString account, QString pswd)
{qDebug()<<"通過信號傳遞過來的參數"<<account<<"  "<<pswd;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75278.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【力扣hot100題】(022)反轉鏈表

非常經典&#xff0c;我寫的比較復雜&#xff0c;一直以來的思路都是這樣&#xff0c;就沒有去找更簡單的解法&#xff1a;&#xff08;做鏈表題習慣加頭結點的前置節點了&#xff0c;去掉也行&#xff09; /*** Definition for singly-linked list.* struct ListNode {* …

劍指Offer(數據結構與算法面試題精講)C++版——day2

劍指Offer(數據結構與算法面試題精講)C++版——day2 題目一:只出現一次的數據題目二:單詞長度的最大乘積題目三:排序數組中的兩個數字之和題目一:只出現一次的數據 一種很簡單的思路是,使用數組存儲出現過的元素,比如如果0出現過,那么arr[0]=1,但是有個問題,題目中沒…

【C++游戲引擎開發】《線性代數》(3):矩陣乘法的SIMD優化與轉置加速

一、矩陣乘法數學原理與性能瓶頸 1.1 數學原理 矩陣乘法定義為:給定兩個矩陣 A ( m n ) \mathrm{A}(mn) A(mn)和 B ( n p ) \mathrm{B}(np) B(np),它們的乘積 C = A B \mathrm{C}=AB C=AB 是一個 m p \mathrm{m}p mp 的矩陣,其中: C i , j = ∑ k = 1…

Vue Transition組件類名+TailwindCSS

#本文教學結合TailwindCSS實現一個Transition動畫的例子# 舉例代碼&#xff1a; <transition enter-active-class"transition-all duration-300 ease-out"enter-from-class"opacity-0 translate-y-[-10px]"enter-to-class"opacity-100 translate-…

技術回顧day2

1.獲取文件列表 流程&#xff1a;前端根據查詢條件封裝查詢信息&#xff0c;后端接收后進行封裝&#xff0c;封裝為FileInfoQuery,根據fileInfoQuery使用mybatis的動態sql來進行查詢。 2.文件分片上傳 每次上傳需要上傳包括(文件名字&#xff0c;文件&#xff0c;md5值&#…

DeepSeek-R1 模型現已在亞馬遜云科技上提供

2025年3月10日更新—DeepSeek-R1現已作為完全托管的無服務器模型在Amazon Bedrock上提供。 2025年2月5日更新—DeepSeek-R1 Distill Llama 和 Qwen模型現已在Amazon Bedrock Marketplace和Amazon SageMaker JumpStart中提供。 在最近的Amazon re:Invent大會上&#xff0c;亞馬…

STP --- 生成樹協議

協議信息 配置 BPDU Protocol identifier&#xff1a;協議標識 Version&#xff1a;協議版本&#xff1a;STP 為 0&#xff0c;RSTP 為 2&#xff0c;MSTP 為 3 type&#xff1a; BPDU 類型 Flag&#xff1a; 標志位 Root ID&#xff1a; 根橋 ID&#xff0c;由兩字節的優…

Ansible playbook-ansible劇本

一.playbook介紹 便于功能的重復使用 本質上就是文本文件&#xff0c;一般都是以.yml結尾的文本文件。 1.遵循YAML語法 1.要求同級別代碼要有相同縮進&#xff0c;建議4個空格。【同級別代碼是同一邏輯的代碼】 在計算機看來空格和Tob鍵是兩個不同的字符。 2.一個鍵對應一…

python的基礎入門

初識Python 什么是Python Python是1門程序設計語言。在開發者眼里&#xff0c;語言可以分為3類&#xff1a; 自然語言&#xff1a;人能聽懂的語言&#xff0c;例如漢語&#xff0c;英語&#xff0c;法語等等。機器語言&#xff1a;機器能聽懂的語言&#xff0c;機器只能聽懂0…

MD編輯器中的段落縮進怎么操作

在 Markdown&#xff08;MD&#xff09;編輯器中&#xff0c;段落的縮進通常可以通過 HTML 空格符、Markdown 列表縮進、代碼塊縮進等方式 實現。以下是幾種常見的段落縮進方法&#xff1a; 1. 使用全角空格 ( ) 在一些 Markdown 編輯器&#xff08;如 Typora&#xff09;中&…

8.neo4j圖數據庫python操作

使用圖數據庫的原因 圖數據庫使用neo4j的原因&#xff1a;neo4j使用率高&#xff0c;模板好找&#xff0c;報錯能查。 紅樓夢人物關系圖地址 GraphNavigator neo4j學習手冊 https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html CQL代表的是Cypher查詢語言…

[Lc6_記憶化搜索] 掃雷游戲 | 理解 遞歸vs記憶化搜索vs dp

目錄 ?1.掃雷游戲 題解 1.記憶化搜索 解法一&#xff1a;遞歸 解法二&#xff1a;記憶化搜索 解法三&#xff1a;動態規劃 ?1.掃雷游戲 (暴力模擬&#xff09; 鏈接&#xff1a;529. 掃雷游戲 讓我們一起來玩掃雷游戲&#xff01; 給你一個大小為 m x n 二維字符矩陣…

云原生周刊:Kubernetes v1.33 要來了

開源項目推薦 Tekton Tekton 是一個開源的 K8s 原生 CI/CD 系統&#xff0c;它為構建、測試和部署自動化工作流提供了強大而靈活的框架。Tekton 提供了一套標準化的 API 和自定義資源&#xff08;CRDs&#xff09;&#xff0c;使得開發者能夠在 K8s 集群中定義和管理 CI/CD 管…

服務新增節點、遷移筆記

文章目錄 基礎配置部分基礎配置-hosts基礎配置-jdk包準備基礎配置-jdk環境變量配置基礎配置-skywalking包 基礎配置-apollo配置。 # 文件夾及配置基礎配置-tomcat基礎配置-nginx基礎配置部分-磁盤掛載(這個也差點漏掉)。 防火墻部分防火墻部分-數據庫及腳本防火墻部分-redis防火…

第十一章:Python PIL庫-圖像處理

一、PIL庫簡介 PIL&#xff08;Python Imaging Library&#xff09;是一個功能強大的圖像處理庫&#xff0c;它提供了豐富的圖像處理功能&#xff0c;包括圖像的打開、處理和保存等操作。PIL支持多種圖像文件格式&#xff0c;如JPEG、PNG、BMP等&#xff0c;并且可以完成對圖像…

【編譯、鏈接與構建詳解】Makefile 與 CMakeLists 的作用

【編譯、鏈接與構建詳解】Makefile 與 CMakeLists 的作用 前言源代碼&#xff08;.c、.cpp&#xff09;編譯編譯的本質編輯的結果編譯器&#xff08;GCC、G、NVCC 等&#xff09; 目標文件&#xff08;.o&#xff09;什么是 .o 目標文件為什么單個 .o 目標文件不能直接執行&…

Ubuntu / Debian 創建快捷方式啟動提權

簡述 在 Linux 系統中&#xff0c;.desktop 文件是 桌面入口文件&#xff0c;用于在桌面環境&#xff08;如 GNOME、KDE&#xff09;中定義應用程序的啟動方式、圖標、名稱等信息。當你執行 touch idea.desktop 時&#xff0c;實際上創建了一個空的 .desktop 文件&#xff08;…

ISIS報文

IS-IS 報文 目錄 IS-IS 報文 一、報文類型與功能 二、報文結構解析 三、核心功能特性 四、典型應用場景 五、抓包數據分析 六、總結 IS-IS&#xff08;中間系統到中間系統&#xff09;協議報文是用于鏈路狀態路由協議中網絡設備間交換路由信息的關鍵載體&#xff0c;其設…

beikeshop多商戶跨境電商獨立站最新版v1.6.0版本源碼

一.介紹 beikeshop跨境電商獨立站最新版V1.6.0源碼 多商戶 多商家 多語言 多幣結算 本博主親測搭建代碼全開源質量相對來說很穩定的 二.服務器環境 系統&#xff1a;CentOS、 環境&#xff1a;PHP7.4 Nginx 1.21 MySQL 5.6 常見插件&#xff1a;fileinfo &#xff1b; re…

Redis批量操作詳解

一、原生批量命令&#xff08;MSET&#xff09; 適用場景&#xff1a;所有鍵的過期時間相同或無過期設置&#xff0c;且無需條件判斷。 方法&#xff1a; 將多個SET命令合并為MSET命令&#xff0c;但需要注意MSET的局限性&#xff08;無法設置過期時間&#xff0c;且所有鍵值對…