Qt 入門 4 之標準對話框

Qt 入門 4 之標準對話框

Qt提供了一些常用的對話框類型,它們全部繼承自QDialog類,并增加了自己的特色功能,比如獲取顏色、顯示特定信息等。下面簡單講解這些對話框,可以在幫助索引中查看Standard Dialogs關鍵字,也可以直接索引相關類的類名。

  • 本文將以一個新的項目為主介紹不同類型的對話框,新建Qt Widgets 應用程序,雙擊ui文件后添加按鈕并修改文字顯示:
    在這里插入圖片描述
    在這里插入圖片描述
  1. 顏色對話框
  • 顏色對話框 QColorDialog 提供了一個可以獲取指定顏色的對話框部件
  • 設計模式下點擊.ui文件,選中顏色對話框按鈕,右鍵轉到槽選中clicked() 后進入函數定義并修改如下:
void MyWidget::on_pushButton_clicked()
{QColor color=QColorDialog::getColor(Qt::red,this,tr("顏色對話框"));qDebug()<<"color:"<<color;
}
  • 編譯執行如下圖,這里使用了 QColorDialog的靜態函數getColor()來獲取顏色,它的3個參數的作用分別是:設置初始顏色、指定父窗口和設置對話框標題。這里的Qt::red是Qt預定義的顏色對象,可以直接單擊該字符串,然后按下F1查看其快捷幫助,或者在幫助索引中通過 Qt::GlobalColor 關鍵字,從而查看到所有的預定義顏色列表。**getColor()**函數返回一個 QColor類型數據。現在運行程序,然后單擊“顏色對話框”按鈕,如果不選擇顏色,直接單擊 OK,那么輸出信息應該是QColor(ARGB1,1,0,0),這里的4個數值分別代表透明度(alpha)、紅色(red)、綠色(green)和藍色(blue)。它們的數值都是從0.0-1.0,有效數字為6位。對于alpha來說,1.0表示完全不透明,這是默認值,而0.0表示完全透明。對于三基色紅、綠、藍的數值,還可以使用0-255來表示,顏色對話框中就是使用這種方法。其中,0表示顏色最淺,255表示顏色最深。在0-255與0.0-1.0之間可以通過簡單的數學運算來對應,其中0對應0.0,255對應1.0。
    在這里插入圖片描述

  • 在顏色對話框中還可以添加對alpha的設置,就是在**getColor()**函數中再使用最后一個參數:

QColor color=QColorDialog::getColor(Qt::red,this,tr("顏色對話框"),QColorDialog::ShowAlphaChannel);
qDebug()<<"color:"<<color;
  • 前邊使用了QColorDialog 類的靜態函數來直接顯示顏色對話框,好處是不用創建對象,但是如果想要更靈活的設置,則可以先創建對象,然后進行各項設置:
void MyWidget::on_pushButton_clicked()
{QColorDialog dialog(Qt::red,this);    //創建對象dialog.setOption(QColorDialog::ShowAlphaChannel);dialog.exec(); //以模態方式運行對話框QColor color=dialog.currentColor();qDebug()<<"color:"<<color;
}

2.文件對話框

  • 文件對話框QFileDialog類提供了一個允許用戶選擇文件或文件夾的對話框。繼續在 mywidget.cpp中添加#include<QFileDialog>頭文件,然后從設計模式轉到“文件對話框”按鈕的單擊信號槽,并更改如下:
void MyWidget::on_pushButton_5_clicked()
{//將會打開默認盤中的后綴文件QString filename=QFileDialog::getOpenFileName(this,tr("文件對話框"),"D:",tr("圖片文件(*png*jpg"));qDebug()<<"fileName:"<<filename;
}
  • 這里使用了 QFileDialog類中的**getOpenFileName()**函數來獲取選擇的文件名,它的4個參數的作用分別是:指定父窗口設置對話框標題、指定默認打開的目錄路徑和設置文件類型過濾器。這個函數會以模態方式運行一個文件對話框。打開后選擇一個文件,單擊“打開”按鈕后,這個函數便可以返回選擇的文件的文件名。如果不指定文件過濾器,則默認選擇所有類型的文件。這里指定了只選擇png和jpg兩種格式的圖片
  • 也支持同時選擇其他類型的文件:
 QString filename=QFileDialog::getOpenFileName(this,tr("文件對話框"),"D:",tr("圖片文件(*png*jpg);;文本文件(*txt)"));

在這里插入圖片描述

  • 前邊只支持選擇單個文件,要同時選擇多個文件,則可以使用getOpenFileNames()函數:
   QStringList filenames=QFileDialog::getOpenFileNames(this,tr("文件對話框"),"F:",tr("圖片文件(*png,jpg"));
  • 運行程序就可以同時選擇多個圖片文件了,多個文件名存放在QStringList類型變量中。當然也可以不使用這些靜態函數,而是建立對話框對象來操作。除了上面的兩個函數外,QFileDialog類還提供了getSaveFileName()函數來實現保存文件對話框和文件另存為對話框,還有getExistingDirectory()函數來獲取一個已存在的文件夾路徑。因為它們的用法與上面的例子類似,這里就不再舉例。
  1. 字體對話框
  • 字體對話框QFontDialog類提供了一個可以選擇字體的對話框部件。先添加#include <QFontDialog>頭文件,然后轉到“字體對話框”按鈕的單擊信號槽,更改如下:
void MyWidget::on_pushButton_2_clicked()
{//ok用于標記是否單擊了 OK 按鈕bool ok;QFont font=QFontDialog::getFont(&ok,this);//如果單擊OK按鈕,那么讓“字體對話框”按鈕使用新字體//如果單擊Cancel按鈕,那么輸出信息if(ok)ui->pushButton_2->setFont(font);elseqDebug()<<tr("沒有選擇字體!");
}

在這里插入圖片描述

  • 這里使用了QFileDialog類的 getFont() 靜態函數來獲取選擇的字體。這個函數的第一個參數是bool類型變量,用來存放按下的按鈕狀態,比如在打開的字體對話框中單擊了OK按鈕,那么這里的ok就為true,這樣來告訴程序已經選擇了字體,如下圖是選擇了微軟雅黑 14號字體的顯示結果:
    在這里插入圖片描述
  1. 輸入對話框
  • 輸入對話框 QInputDialog類用來提供一個對話框,可以讓用戶輸入一個單一的數值或字符串。先添加頭文件#include <QInputDialog>,然后進入“輸人對話框”按鈕的單擊信號槽,更改如下:
void MyWidget::on_pushButton_6_clicked()
{bool ok;//獲取字符串QString string = QInputDialog::getText(this,tr("輸入字符串對話框"),tr("請輸入用戶名"),QLineEdit::Normal,tr("admin"),&ok);if(ok)qDebug()<<"string:"<<string;//獲取整數int value = QInputDialog::getInt(this,tr("輸入整數對話框"),tr("請輸入-1000到1000之間的數值"),100,-1000,1000,10,&ok);if(ok)qDebug()<<"value:"<<value;//獲取浮點數double value2=QInputDialog::getDouble(this,tr("輸入浮點數對話框"),tr("請輸入-1000到1000之間的數值"),0.00,-1000,1000,2,&ok);if(ok)qDebug()<<"value2:"<<value2;QStringList items;items<<tr("條目1")<<tr("條目2");//獲取條目QString item=QInputDialog::getItem(this,tr("輸入條目對話框"),tr("請選擇或輸入一個條目"),items,0,true,&ok);if(ok)qDebug()<<"item:"<<item;
}
  • 分別使用不同的函數定義了輸入不同類型的對話框,運行如下:
    在這里插入圖片描述
  1. 消息對話框
  • 消息對話框QMessageBox類提供了一個模態的對話框來通知用戶一些信息,或者向用戶提出一個問題并且獲取答案。先添加頭文件#include,然后轉到“消息對話框”按鈕的單擊信號槽中,添加如下代碼:
void MyWidget::on_pushButton_3_clicked()
{//問題對話框int ret1 = QMessageBox::question(this,tr("問題對話框"),tr("你了解Qt嗎?"),QMessageBox::Yes,QMessageBox::No);if(ret1 == QMessageBox::Yes)qDebug()<<tr("問題!");//提示對話框int ret2 = QMessageBox::information(this,tr("提示對話框"),tr("這是Qt書籍!"),QMessageBox::Ok);if(ret2 == QMessageBox::Ok)qDebug()<<tr("提示!");//警告對話框int ret3 = QMessageBox::warning(this,tr("警告對話框"),tr("不能提前結束!"),QMessageBox::Yes,QMessageBox::No);if(ret3 == QMessageBox::Abort)qDebug()<<tr("警告!");//錯誤對話框int ret4 = QMessageBox::critical(this,tr("嚴重錯誤對話框"),tr("發現一個嚴重錯誤!"),QMessageBox::Yes,QMessageBox::No);if(ret4 == QMessageBox::YesAll)qDebug()<<tr("錯誤!");//關于對話框QMessageBox::about(this,tr("關于對話框"),tr("Qt Creator 普及工作!"));
}

在這里插入圖片描述

  1. 進度對話框
  • 進度對話框 QProgressDialog對一個耗時較長操作的進度提供了反饋。先添加#include <QProgressDialog>頭文件,然后轉到“進度對話框”按鈕的單擊信號槽,更改如下:
void MyWidget::on_pushButton_7_clicked()
{QProgressDialog dialog(tr("文件復制進度"),tr("取消"),0,50000,this);dialog.setWindowTitle(tr("進度對話框"));  //設置窗口標題dialog.setWindowModality(Qt::WindowModal);   //將對話框設置為模態dialog.show();for(int i=0;i<50000;i++)    //演示復制進度{dialog.setValue(i);     //設置進度條的當前值QCoreApplication::processEvents();  //避免界面凍結//QThread::sleep(1);if(dialog.wasCanceled())break;}dialog.setValue(50000);    //這樣才顯示100%,因為for循環中少加了一個數qDebug()<<tr("復制結束!");
}

在這里插入圖片描述

  1. 錯誤信息對話框
  • 錯誤信息對話框QErrorMessage類提供了一個顯示錯誤信息的對話框。首先打開mywidget.h文件添加類前置聲明:
class QErrorMessage;
  • 然后添加私有對象:
ErrorMessage *errordlg;
  • 下面到mywidget.cpp添加頭文件#include <QErrorMessage>,并在構造函數中添加如下代碼:
errordlg=newQErrorMessage(this);
  • 然后從設計模式轉到“錯誤信息對話框”按鈕的單擊信號槽添加代碼
void Mywidget::on pushButton 7 clicked()
{errordlg->setwindowTitle(tr("錯誤信息對話框"));errordlg->showMessage(tr("這里是出錯信息!));
}
  • 運行如下:
    在這里插入圖片描述
  1. 向導對話框
  • 向導對話框QWizard類提供了一個設計向導界面的框架。對于向導對話框,讀者應該已經很熟悉了,比如安裝軟件時的向導和創建項目時的向導。QWizard之所以被稱為框架,是因為它具有設計一個向導全部的功能函數,可以使用它來實現想要的效果。Qt中包含了 Trivial Wizard、License Wizard和Class Wizard這3個示例程序,可以參考一下。
  • 打開 mywidget.h文件,然后添加頭文件#include <QWizard>,在MyWidget 類的聲明中添加private類型函數聲明:
  QWizardPage* createPage1();QWizardPage* createPage2();QWizardPage* createPage3();
  • 這里聲明了3個返回值為QWizardPage類對象的指針函數,用來生成3個向導頁面。然后在mywidget.cpp文件中對這3個函數進行定義:
QWizardPage* MyWidget::createPage1()
{QWizardPage* page=new QWizardPage;page->setTitle(tr("介紹"));return page;
}
QWizardPage* MyWidget::createPage2()
{QWizardPage* page=new QWizardPage;page->setTitle(tr("用戶選擇信息"));return page;
}
QWizardPage* MyWidget::createPage3()
{QWizardPage* page=new QWizardPage;page->setTitle(tr("結束"));return page;
}
  • 在各個函數中分別新建了向導頁面,并且設置了它們的標題。下面轉到“向導對話框”按鈕的單擊信號槽中,更改如下:
void MyWidget::on_pushButton_8_clicked()
{QWizard wizard(this);wizard.setWindowTitle(tr("向導對話框"));wizard.addPage(createPage1());   //添加向導對話框wizard.addPage(createPage2());wizard.addPage(createPage3());wizard.exec();
}
  • 運行如下:

在這里插入圖片描述

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

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

相關文章

買不起了,iPhone 或漲價 40% ?

周知的原因&#xff0c;新關稅對 iPhone 的打擊&#xff0c;可以說非常嚴重。 根據 Rosenblatt Securities分析師的預測&#xff0c;若蘋果完全把成本轉移給消費者。 iPhone 16 標配版的價格&#xff0c;可能上漲43%。 iPhone 16 標配的價格是799美元&#xff0c;上漲43%&am…

軟件需求分析習題匯編

需求工程練習題 一、選擇題 1. 軟件需求規格說明書的內容不應包括對&#xff08; &#xff09;的描述。 A. 主要功能B. 算法的詳細過程C. 用戶界面及運行環境D. 軟件的性能 *正確答案:*B:算法的詳細過程; 2. 需求分析最終結果是產生&#xff08; &#xff09; A. 項目開發…

clickhouse注入手法總結

clickhouse 遇到一題clickhouse注入相關的&#xff0c;沒有見過&#xff0c;于是來學習clickhouse的使用&#xff0c;并總結相關注入手法。 環境搭建 直接在docker運行 docker pull clickhouse/clickhouse-server docker run -d --name some-clickhouse-server --ulimit n…

智能語音識別工具開發手記

智能語音識別工具開發手記 序言&#xff1a;聽見數字化的聲音 在縣級融媒體中心的日常工作中&#xff0c;我們每天需要處理大量音頻素材——從田間地頭的采訪錄音到演播室的節目原聲&#xff0c;從緊急會議記錄到專題報道素材。二十多年前&#xff0c;筆者剛入職時&#xff0…

TDengine 3.3.6.0 版本中非常實用的 Cols 函數

簡介 在剛剛發布的 TDengine 3.3.6.0 版本 中&#xff0c;新增了一個非常實用的 函數COLS &#xff0c;此函數用于獲取選擇函數所在行列信息&#xff0c;主要應用在生成報表數據&#xff0c;每行需要出現多個選擇函數結果&#xff0c;如統計每天最大及最小電壓&#xff0c;并報…

【AI學習】AI Agent(人工智能體)

1&#xff0c;AI agent 1&#xff09;定義 是一種能夠感知環境、基于所感知到的信息進行推理和決策&#xff0c;并通過執行相應動作來影響環境、進而實現特定目標的智能實體。 它整合了多種人工智能技術&#xff0c;具備自主學習、自主行動以及與外界交互的能力&#xff0c;旨…

【MCP】VSCode Cline配置MongoDB連接

VSCode MCP插件配置MongoDB連接教程 前言 本文將介紹如何在VSCode中配置Cline插件連接MongoDB。 環境準備 VSCodeNode.jsMongoDB服務器Cline插件 配置步驟 1. 安裝MCP插件 在VSCode擴展商店中搜索"Cline"并安裝。 安裝完之后需要配置API平臺以及設置API-KEY。…

this指針 和 類的繼承

一、this指針 Human類的屬性fishc與Human&#xff08;&#xff09;構造器的參數fishc同名&#xff0c;但卻是兩個東西。使用this指針讓構造器知道哪個是參數&#xff0c;哪個是屬性。 this指針&#xff1a;指向當前的類生成的對象 this -> fishc fishc當前對象&#xff08;…

使用PyTorch訓練VGG11模型:Fashion-MNIST圖像分類實戰

本文將通過代碼實戰&#xff0c;詳細講解如何使用 PyTorch 和 VGG11 模型在 Fashion-MNIST 數據集上進行圖像分類任務。代碼包含數據預處理、模型定義、訓練與評估全流程&#xff0c;并附上訓練結果的可視化圖表。所有代碼可直接復現&#xff0c;適合深度學習初學者和進階開發者…

汽車BMS技術分享及其HIL測試方案

一、BMS技術簡介 在全球碳中和目標的戰略驅動下&#xff0c;新能源汽車產業正以指數級速度重塑交通出行格局。動力電池作為電動汽車的"心臟"&#xff0c;其性能與安全性不僅直接決定了車輛的續航里程、使用壽命等關鍵指標&#xff0c;更深刻影響著消費者對電動汽車的…

打造船岸“5G+AI”智能慧眼 智驅力賦能客船數智管理

項目介紹 船舶在航行、作業過程中有著嚴格的規范要求&#xff0c;但在實際航行與作業中往往會因為人為的疏忽&#xff0c;發生事故&#xff0c;導致人員重大傷亡和財產損失&#xff1b; 為推動安全治理模式向事前預防轉型&#xff0c;實現不安全狀態和行為智能預警&#xff0c…

C#二叉樹

C#二叉樹 二叉樹是一種常見的數據結構&#xff0c;它是由節點組成的一種樹形結構&#xff0c;其中每個節點最多有兩個子節點。二叉樹的一個節點通常包含三部分&#xff1a;存儲數據的變量、指向左子節點的指針和指向右子節點的指針。二叉樹可以用于多種算法和操作&#xff0c;…

WinForm真入門(11)——ComboBox控件詳解

WinForm中 ComboBox 控件詳解? ComboBox 是 WinForms 中一個集文本框與下拉列表于一體的控件&#xff0c;支持用戶從預定義選項中選擇或直接輸入內容。以下從核心屬性、事件、使用場景到高級技巧的全面解析&#xff1a; 一、ComboBox 核心屬性? 屬性說明示例?Items?下拉…

超詳細解讀:數據庫MVCC機制

之前文章&#xff1a;Mysql鎖_exclusivelock for update寫鎖-CSDN博客 中有提到通過MVCC來實現快照讀&#xff0c;從而解決幻讀問題&#xff0c;這里詳細介紹下MVCC。 一、前言 表1&#xff1a;實例表t idk1122 表2&#xff1a;事務A、B、C的執行流程 事務A事務B事務Cstart …

【SpringCloud】從入門到精通【上】

今天主播我把黑馬新版微服務課程MQ高級之前的內容都看完了&#xff0c;雖然在看視頻的時候也記了筆記&#xff0c;但是看完之后還是忘得差不多了&#xff0c;所以打算寫一篇博客再溫習一下內容。 課程坐標:黑馬程序員SpringCloud微服務開發與實戰 微服務 認識單體架構 單體架…

力扣hot100_回溯(2)_python版本

一、39. 組合總和&#xff08;中等&#xff09; 代碼&#xff1a; class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:ans []path []def dfs(i: int, left: int) -> None:if left 0:# 找到一個合法組合ans.append(pa…

AI平臺如何實現推理?數算島是一個開源的AI平臺(主要用于管理和調度分布式AI訓練和推理任務。)

數算島是一個開源的AI平臺&#xff0c;主要用于管理和調度分布式AI訓練和推理任務。它基于Kubernetes構建&#xff0c;支持多種深度學習框架&#xff08;如TensorFlow、PyTorch等&#xff09;。以下是數算島實現模型推理的核心原理、架構及具體實現步驟&#xff1a; 一、數算島…

cesium項目之cesiumlab地形數據加載

之前的文章我們有提到&#xff0c;使用cesiumlab加載地形出現了一些錯誤&#xff0c;沒有解決&#xff0c;今天作者終于找到了解決方法&#xff0c;下面描述一下具體步驟&#xff0c;首先在地理數據云下載dem數據&#xff0c;在cesiumlab中使用地形切片&#xff0c;得到terrain…

[Vue]App.vue講解

頁面中可以看見的內容不再在index.html中進行編輯&#xff0c;而是在App.vue中進行編輯。 組件化開發 在傳統的html開發中&#xff0c;一個頁面的資源往往都寫在同一個html文件中。這種模式在開發小規模、樣式簡單的項目時會相當便捷&#xff0c;但當項目規模越來越大&#xf…

sql-labs靶場 less-1

文章目錄 sqli-labs靶場less 1 聯合注入 sqli-labs靶場 每道題都從以下模板講解&#xff0c;并且每個步驟都有圖片&#xff0c;清晰明了&#xff0c;便于復盤。 sql注入的基本步驟 注入點注入類型 字符型&#xff1a;判斷閉合方式 &#xff08;‘、"、’、“”&#xf…