Qt基礎相關

模態對話框和非模態對話框

在一個頁面進行交互時彈出的一個新頁面,新頁面不堵塞舊頁面的交互,這就是非模態對話框。

模態對話框

模態對話框就是當該對話框彈出后會阻塞其他窗口的響應事件,必須先關閉該對話框,其他窗口才會繼續響應事件。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);auto w = new QDialog(this);w->setModal(true);w->show();
}

點擊運行,彈出一個對話框和主窗口,點擊主窗口沒有任何反應,點擊對話框關閉后才能點擊主窗口,所以w就是一個模態對話框。注意不用手動delete掉w,運行結束后會自動釋放。
另外一個創建模態對話框的方式是這樣的(先彈出dialog窗口,關閉之后彈出mainwindow窗口)

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QDialog w(this);w.exec();
}

窗口置頂

需要將對話框置頂,不論其是不是模態對話框我們都可以這么做

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);auto s = new QDialog(this);s->setWindowFlag(Qt::WindowStaysOnTopHint);s->show();
}

信號和槽

當我們需要一個界面通知另一個界面時,可以采用信號和槽機制。通過鏈接信號和槽,當一個界面發送信號時,鏈接該信號的槽會被響應,從而達到消息傳遞的目的。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDialog>
#include<QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->showChildBotton,SIGNAL(clicked(bool)),this,SLOT(showChildBotton()));//到mainWindow.h寫槽函數
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::showChildBotton()
{auto *childDialog=new QDialog(this);childDialog->show();
}

上面介紹的是Qt4風格的,但是推薦使用Qt5風格:

//Qt5方式信號與槽connect(ui->showChildBotton,&QPushButton::clicked,this,&MainWindow::showChildBotton);

子界面向主界面發showMainSig信號,主界面收到信號后子界面做隱藏,主界面做顯示

轉變模態框

創建對話框后,調用exec()函數返回只有兩種,QDialog::Accepted和QDialog::Rejected

再ui界面退出程序:點擊Edit Signal/Slots 信號槽的按鈕,鼠標按住退出程序按鈕不松開拖動,將另一端連接到MyDialog對話框,QPushbutton這邊信號選擇clicked(), MyDialog信號選擇reject,這樣就將兩個信號連接起來了,我們點擊退出程序按鈕,會觸發MyDialog發送reject信號。
進入主界面:點擊Edit Widget 按鈕, 然后右鍵點擊鍵入主界面按鈕,點擊進入槽,在Qt 為我們生成的槽函數里添加accetp()信號發送邏輯,在childDialog.cpp生成的方法里寫accept();

主界面返回子界面:
退出程序方法如上;返回子界面需要根據上面方法轉到槽函數之后先關閉主界面,再實例化子界面,判斷子界面的exec()函數是否為Accepted,是的話顯示子界面,不是直接return;

常用對話框

顏色對話框

void MainWindow::on_pushButton_clicked()
{
//    QColorDialog colorDlg(Qt::blue, this);
//    colorDlg.setOption(QColorDialog::ShowAlphaChannel);
//    colorDlg.exec();
//    QColor color = colorDlg.currentColor();
//    qDebug() << "color is " << color;QColor color = QColorDialog::getColor(Qt::blue, this,tr("選擇顏色"), QColorDialog::ShowAlphaChannel );qDebug() << "color is " << color;
}

文本對話框

void MainWindow::on_textBtn_clicked()
{//先設置打開目錄QString path=QDir::currentPath();//返回當前路徑QString title=tr("文件對話框");QString filter=tr("文本文件(*.txt);;圖片文件(*.jpg *.jpge *.png *.gif);;所有文件(*.*)");QString aFileName=QFileDialog::getOpenFileName(this,title,path,filter);qDebug()<<"當前文件"<<aFileName<<Qt::endl;
}

整型輸入對話框

//整型輸入對話框
void MainWindow::on_pushButton_clicked()
{bool ok =false;auto intdata=QInputDialog::getInt(this,tr("整型輸入對話框"),tr("請輸入"),200,-1000,1000,10,&ok);if(ok){qDebug()<<intdata<<Qt::endl;}
}

條目對話框

//條目對話框
void MainWindow::on_pushButton_3_clicked()
{QStringList items;//類似線性訪問,C++里的vectoritems<<tr("條目一")<<("條目二");bool ok=false;auto itemData=QInputDialog::getItem(this,tr("條目對話框"),tr("請選擇條目"),items,0,true,&ok);if(ok){qDebug()<<"item is"<<itemData<<Qt::endl;}
}

提問對話框

//提問對話框
void MainWindow::on_pushButton_4_clicked()
{auto ret=QMessageBox::question(this,tr("提問對話框"),tr("你是人?"));if(ret==QMessageBox::Yes){qDebug()<<"ret is"<<ret<<Qt::endl;}else{return;}auto ret2=QMessageBox::information(this,tr("通知對話框"),tr("你是個人"),QMessageBox::Yes);if(ret2==QMessageBox::Yes){qDebug()<<"ret2 is"<<ret2<<Qt::endl;}auto ret3=QMessageBox::warning(this,tr("警告對話框"),tr("你確定你是人?"),QMessageBox::Yes);if(ret3==QMessageBox::Yes){qDebug()<<"ret3 is"<<ret3<<Qt::endl;}else{return;}auto ret4=QMessageBox::critical(this,tr("關鍵提示對話框"),tr("你不是人"),QMessageBox::Ok);if(ret4==QMessageBox::Ok){qDebug()<<"ret4 is"<<ret4<<Qt::endl;return;}
}

進度對話框

void MainWindow::on_pushButton_5_clicked()
{// QProgressDialog progressDialog(tr("正在復制"),tr("取消"),0,50000,this);// progressDialog.setWindowTitle(tr("文件復制進度"));// progressDialog.setWindowModality(Qt::ApplicationModal);//設置對話框為應用程序模態,無法交互直到結束// progressDialog.show();// for(int i=0;i<50000;i++){//     progressDialog.setValue(i);//     QApplication::processEvents();//     if(progressDialog.wasCanceled()){//         break;//     }// }// progressDialog.setValue(50000);//循環結束,當到達5w時任務完成//定時器_progressDialog=new QProgressDialog(tr("正在復制"),tr("取消"),0,5000,this);_progressDialog->setWindowTitle(tr("復制進度條"));_progressDialog->setWindowModality(Qt::ApplicationModal);_timer=new QTimer(this);connect(_timer,&QTimer::timeout,this,&MainWindow::on_updateProgressDialog);//計時器每次即使都會觸發on_updateProgressDialog槽函數,以刷新進度connect(_progressDialog,&QProgressDialog::canceled,this,&MainWindow::on_cancelProgressDialog);//綁定取消函數_timer->start(2);//啟動定時器
}void MainWindow::on_updateProgressDialog(){//更新定時器_counter++;if(_counter>5000){_timer->stop();//停止定時器之后刪除,并將指針指向空delete _timer;_timer=nullptr;delete _progressDialog;_progressDialog=nullptr;_counter=0;return;}_progressDialog->setValue(_counter);//更新進度條
}
void MainWindow::on_cancelProgressDialog(){_timer->stop();delete _timer;_timer=nullptr;delete _progressDialog;_progressDialog=nullptr;_counter=0;return;
}

向導對話框

#include<QWizard>
#include<QLabel>
#include<QVBoxLayout>
#include<QComboBox>
void MainWindow::on_pushButton_6_clicked()
{//創建QWizard對象QWizard wizard(this);wizard.setWindowTitle(tr("Fall in LOVE"));//向導標題// 第一頁:歡迎頁QWizardPage* page1 = new QWizardPage();//創建第一頁page1->setTitle(tr("婚戀向導"));QLabel* label1 = new QLabel(tr("該程序幫助您找到人生伴侶"));//創建label控件QVBoxLayout* layout1 = new QVBoxLayout();//創建垂直布局layout1->addWidget(label1);//將label標簽加入到布局中page1->setLayout(layout1);//將布局給到page1wizard.addPage(page1);//用addPage方法將page1加入到向導中// 第二頁:心動類型QWizardPage* page2 = new QWizardPage();page2->setTitle(tr("心動類型"));QLabel* label2 = new QLabel(tr("請選擇你心儀的對象類型:"));QComboBox* comboBox = new QComboBox();//下拉列表comboBox->addItems({tr("文藝青年"), tr("理工直男"), tr("職場精英"), tr("溫柔女生")});QVBoxLayout* layout2 = new QVBoxLayout();//垂直布局layout2->addWidget(label2);layout2->addWidget(comboBox);page2->setLayout(layout2);wizard.addPage(page2);// 第三頁:確認信息(示例)QWizardPage* page3 = new QWizardPage();page3->setTitle(tr("確認信息"));QLabel* label3 = new QLabel(tr("請確認您的信息是否正確。"));QVBoxLayout* layout3 = new QVBoxLayout();layout3->addWidget(label3);page3->setLayout(layout3);wizard.addPage(page3);// 顯示向導wizard.exec();
}

QLineEdit

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QRegularExpressionValidator>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//郵箱,設置正則表達式123@123.comui->emailLineEdit->setEchoMode(QLineEdit::Normal);QRegularExpression regx("[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+");QValidator* validator=new QRegularExpressionValidator(regx,ui->emailLineEdit);//密碼(不可見)ui->passwordLineEdit->setEchoMode(QLineEdit::Password);QString ip_mask="000.000.000.000;";ui->ipLineEdit->setInputMask(ip_mask);QString mac_mask="HH:HH:HH:HH;";ui->macLineEdit->setEchoMode(QLineEdit::Normal);ui->macLineEdit->setInputMask(mac_mask);
}MainWindow::~MainWindow()
{delete ui;
}

Qt主窗口和菜單欄

主窗口添加圖標

添加現有文件選到icon,

創建懸浮Docker Widget

MdiArea

這是在新建文件的轉到槽,然后添加

#include<QTextEdit>
#include<QMdiSubWindow>
void MainWindow::on_actionNew_N_triggered()
{QTextEdit* textedit=new QTextEdit(this);auto childWindow=ui->mdiArea->addSubWindow(textedit);childWindow->setWindowTitle(tr("文本編輯子窗口"));childWindow->show();
}

太雜了。。。

后面直接進項目

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

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

相關文章

《匯編語言:基于X86處理器》第2章 x86處理器架構

本章重點是與 x86 匯編語言相關的底層硬件。有說法認為&#xff0c;匯編語言是直接與機器交流的理想軟件工具。如果是真的&#xff0c;那么匯編程序員就必須非常熟悉處理器的內部結構與功能。本章將討論指令執行時處理器內部發生的一些基本操作&#xff0c;以及操作系統如何加載…

最小生成樹算法的解題思路與 C++ 算法應用

一、最小生成樹算法針對問題類型及概述 先來簡要陳述一下樹的概念&#xff1a;一個由 N N N 個點和 N ? 1 N-1 N?1 條邊組成的無向連通圖。由此&#xff0c;我們可以得知生成樹算法的概念&#xff1a;在一個 N N N 個點的圖中找出一個由 N ? 1 N-1 N?1 條邊組成的樹。…

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/se

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/send 原因&#xff1a;多個地方注冊 FeignClient(name “ti”, path “/ti/v1/i/send/repeat”) 解決&#xff1a;刪除一個即可

Mac m1 通過docker鏡像安裝kafka

kafka依賴zookeeper&#xff0c;因此需要使用docker同時安裝zookeeper和kafka。 macOS的docker在容器和宿主之間無法通過ip直接通信&#xff0c;因此在安裝的時候需要特殊注意與ip相關的設置。當容器需要訪問宿主ip時&#xff0c;需要使用docker.for.mac.host.internal或者host…

01初始uni-app+tabBar+首頁

初始uni-apptabBar首頁 1. uni-app1.1 新建uni-app項目1.2 目錄結構1.3 把項目配置運行到微信開發者工具 2. tabBar3.1 首頁3.1 配置網絡請求3.2 輪播圖區域3.3 分類導航區域3.4 樓層區域 1. uni-app ? uni-app 是使用 Vue.js 開發前端應用的框架。開發者編寫一套代碼&#x…

微信小程序,微信授權手機號碼

uniapp中index.vue: <template><view class"content"><button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"type"primary">授權手機號登錄 </button></view></template><scrip…

數據結構 學習 圖 2025年6月14日 12點57分

搜索算法 深度優先搜索 一種用于遍歷或搜索樹或圖的算法。它沿著樹的深度遍歷樹的節點&#xff0c;盡可能深的搜索樹的分支。 DFS核心思想 深度優先&#xff1a;盡可能深地搜索樹的分支 回溯思想&#xff1a;當節點v的所在邊都已被探尋過&#xff0c;搜索將回溯到發現節點v的…

H3C路由器使用PBR 實現兩條互聯網專線互為備份

實驗拓撲 圖 1-1 注&#xff1a;如無特別說明&#xff0c;描述中的 R1 或 SW1 對應拓撲中設備名稱末尾數字為 1 的設備&#xff0c;R2 或 SW2 對應拓撲中設備名稱末尾數字為 2 的設備&#xff0c;以此類推&#xff1b;另外&#xff0c;同一網段中&#xff0c;IP 地址的主機位為…

深化信創生態布局!聚銘網絡與海量數據完成產品兼容性互認證

近日&#xff0c;聚銘網絡成功與海量數據完成了一系列產品的兼容性互認證&#xff0c;并獲得了由海量數據頒發的產品兼容互認證書。這一成就標志著雙方在技術整合方面邁出了重要一步。 經過全面嚴格的測試&#xff0c;聚銘網絡自主研發的安全系列產品&#xff0c;包括聚銘下一…

Unity AR+ 百度AI 實現 物體識別與對應英文翻譯

一、前言 我目前實現了拍照保存到手機的功能 我想進一步優化&#xff0c;實現通過手機攝像頭實時識別眼前的物體&#xff0c;顯示對應的英文的功能。 1.項目技術棧&#xff1a;Unity 2022.3.53 Vuforia 11 百度物體識別API 百度翻譯API 2.功能目標&#xff1a;使用手機攝像…

Vue.js第二節

計算屬性、事件綁定、條件判斷、遍歷循環 計算屬性&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

從開源代碼入場無人機學術研究到商業化市場的全路徑指南-優雅草卓伊凡

從開源代碼入場無人機學術研究到商業化市場的全路徑指南-優雅草卓伊凡 引言&#xff1a;開源代碼在無人機研究中的重要性 優雅草卓伊凡在這里告訴大家&#xff0c;如果真的要開始進入無人機領域&#xff0c;我們需要一步步開始研究。目前先去看看開源無人機代碼是尤為重要的&…

window11中開啟ubuntu22.04子系統

一、啟用Windows子系統 打開控制面板 選擇程序然后點擊“啟用或關閉Windows功能” 勾選如下2項&#xff0c;點擊確定 二、安裝內核升級包 打開鏈接https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi下載內核升級包&#xff0c;打開后安裝、重啟電腦…

80Qt窗口_對話框

目錄 5. 對話框 5.1 對話框介紹 用例1&#xff1a; 用例2&#xff1a; 用例3&#xff1a; 用例4&#xff1a; 5.2 對話框的分類 5.2.1 模態對話框 5.2.2 ?模態對話框 5. 對話框 5.1 對話框介紹 對話框是 GUI 程序中不可或缺的組成部分。?些不適合在主窗?實現的功…

Pyenv 跟 Conda 還有 Poetry 有什么區別?各有什么不同?

pyenv、Conda 和 Poetry 是 Python 生態中常用的工具&#xff0c;但它們的核心功能和用途不同&#xff0c;通常可以結合使用。以下是它們的區別和特點&#xff1a; 1. pyenv 用途&#xff1a;管理多個 Python 解釋器版本。 核心功能&#xff1a; 安裝不同版本的 Python&#x…

數學符號和標識中英文列表(含義與示例)

數學符號和標識的參考&#xff0c;涵蓋了數學的各個主要分支&#xff0c;并提供清晰的定義和示例&#xff0c;方便快速查找和學習收藏。 目錄 基礎數學符號幾何符號代數符號線性代數符號概率與統計符號集合論符號邏輯符號微積分與分析符號數字與字母符號 特點 中英對照&…

「Java流程控制」switch結構

知識點解析 1.switch結構的核心概念 switch語句是一種多分支選擇結構,它根據表達式的值來選擇執行不同的代碼塊。與if-else結構相比,switch更適合處理離散的、有限個值的比較。 2.switch結構的基本語法 switch (表達式) {case 值1:// 代碼塊1[break;]case 值2:// 代碼塊…

從0開始學習R語言--Day27--空間自相關

有的時候&#xff0c;我們在數據進行分組時&#xff0c;會發現用正常的聚類分析的方法和思維&#xff0c;分組的情況不是很理想。其實這是因為我們常常會忽略一個問題&#xff1a;假設我們正在分析的數據是真實的&#xff0c;那么它也肯定在一定程度上符合客觀規律。而如果我們…

Excel將表格文件由寬數據轉為長數據的方法

本文介紹基于Excel軟件的Power Query模塊&#xff0c;實現表格數據由寬數據轉為長數據的具體方法。 長數據和寬數據是數據分析中的2種基本數據組織形式&#xff0c;二者在結構、用途、適用場景等方面各有特點。其中&#xff0c;寬數據 &#xff08;Wide Format&#xff09;以“…

SpringAI + DeepSeek大模型應用開發 - 入門篇

三、SpringAI Spring AILangChain4jChat支持支持Function支持支持RAG支持支持對話模型1515向量模型1015向量數據庫1520多模態模型51JDK178 1. 對話機器人 1.1 快速入門 步驟①&#xff1a;引入依賴&#xff08;先去掉openai的starter依賴&#xff0c;因為要配置API_KEY&#…