日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Qt学习笔记】7.对话框Dialog

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt学习笔记】7.对话框Dialog 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對話框:用于提示用戶輸入


對話框分為兩種:

1、模式對話框Modal

背景界面卡住,用戶必須在完成對話框輸入并關閉對話框之后,才能回到背景界面

2、非模式對話框Non-Modal

背景界面可以活動,這篇博客將分別介紹


一、模式對話框Modal

新建對話框

小練習:點擊登陸按鈕,彈出對話框提示用戶要輸入信息才能登陸,用戶點擊確認或取消,回到主界面。

要求:

1、新建對話框,布局

2、點確定時,accept()對話框返回; 點取消時,reject()對話框返回

3、運行對話框exec(),注意exec的返回值

4、取得用戶輸入


步驟:

1、需要定義一個新的GUI類,繼承自QDialog

添加完,在Qt Disigner中會發現多了一個窗體,對它進行布局。

2、在主窗體中 包含 剛剛添加的頭文件,在事件中創建對象,并執行exec()方法。

3、在LoginDlg窗體中添加事件,及響應的處理,代碼如下:

Test7_1a_12_7::Test7_1a_12_7(QWidget?*parent):?QMainWindow(parent) {ui.setupUi(this);assert(connect(ui.btnLogin,SIGNAL(clicked()),this,SLOT(OnBtnLogin()))); }int?Test7_1a_12_7::OnBtnLogin() {//創建對話框LoginDlg?dlg(this); //這個地方,如果傳參不指定父類,則該窗口時獨立的,若?指定,則需要處理完該窗口,才可以操作父類int?ret?=?dlg.exec(); //對話框顯示,程序阻塞//判斷子窗口的運行結果if?(ret?==?QDialog::Accepted){QMessageBox::information(this,?"success",?"success");}else?if(ret?==?-1)?{QMessageBox::information(this,?"wrong",?"wrong");}return?0; }///LoginDlg::LoginDlg(QWidget?*parent):?QDialog(parent) {ui.setupUi(this);assert(connect(ui.btnEnter,SIGNAL(clicked()),this,SLOT(OnBtnEnter())));assert(connect(ui.btnCancel,SIGNAL(clicked()),this,SLOT(OnBtnCancel())));}LoginDlg::~LoginDlg() { }int?LoginDlg::OnBtnEnter() {if?(ui.lineEditName->text()?==?"admin"?&&?ui.lineEditPswd->text()?==?"123456"){accept(); //表示成功}reject(); //表示密碼錯誤 }int?LoginDlg::OnBtnCancel() {return?-1; //取消 }



二、文件對話框

Qt中有一個QFileDialog類

//打開文件: static?QString?QFileDialog::getOpenFileName//保存文件: static?QString?QFileDialog::getSaveFileName

這兩個static函數,返回值均為被選擇的文件名


舉例:

打開一個文本文檔,并顯示

Test7_2b_12_7::Test7_2b_12_7(QWidget?*parent):?QMainWindow(parent) {ui.setupUi(this);assert(connect(ui.btnOpen,SIGNAL(clicked()),this,SLOT(OnBtnOpen())));assert(connect(ui.btnSave,SIGNAL(clicked()),this,SLOT(OnBtnSave()))); }QString?Test7_2b_12_7::OnBtnOpen() {QString?FilePath;while?(FilePath.length()?<=?0){FilePath?=?QFileDialog::getOpenFileName(this,?AfGbk::ToUnicode("打開"));}return?FilePath; }QString?Test7_2b_12_7::OnBtnSave() {QString?FilePath?=?QFileDialog::getOpenFileName(this,?AfGbk::ToUnicode("保存"));return?FilePath; }


再做一個小練習,實現一個簡單的文本編輯器,允許打開文檔并進行修改和保存

打開:

QString?Test7_2b_12_7::OnBtnOpen() {QString?FilePath;while?(FilePath.length()?<=?0){FilePath?=?QFileDialog::getOpenFileName(this,?AfGbk::ToUnicode("打開"));assert(FilePath?!=?NULL);std::string?gbk_name?=?AfGbk::FromUnicode(FilePath);//打開文件,讀取內容FILE*?fp?=?fopen(gbk_name.c_str(),?"rb");//獲取文件的大小fseek(fp,?0,?SEEK_END);int?FileSize?=?ftell(fp);//讀取文件內容fseek(fp,?0,?SEEK_SET);char*?buf?=?new?char[FileSize+1]; //注意回收int?n?=?fread(buf,?1,?FileSize,?fp);if?(?n?>?0?){buf[n]?=?0;ui.plainTextEdit->setPlainText(AfGbk::ToUnicode(buf));}fclose(fp);delete[]?buf;}return?FilePath; }

保存:

QString?Test7_2b_12_7::OnBtnSave() {QString?FilePath;while?(FilePath.length()?<=?0){FilePath?=?QFileDialog::getSaveFileName(this,?AfGbk::ToUnicode("選擇保存路徑"));std::string?gbk_name?=?AfGbk::FromUnicode(FilePath);assert(FilePath?!=?NULL);std::string?gbk_text?=?AfGbk::FromUnicode(ui.plainTextEdit->toPlainText()); //要寫入的內容//打開文件,寫入內容FILE*?fp?=?fopen(gbk_name.c_str(),?"wb");fwrite(gbk_text.c_str(),?1,?gbk_text.length(),?fp);fclose(fp);}return?FilePath; }


注意:各個程序的文件對話框界面都是一樣的。


文件對話框的特殊性:它不是普通的對話框,這個對話框本質上是由系統函數提供的



三、優化Qt項目的目錄結構

Qt中有一個QFileDialog類

1、改變程序的輸出位置

程序默認輸出到Debug目錄下

一般是把程序輸出到指定位置,可以在“項目屬性/鏈接器”里面設置

2、代碼放在文件夾里

將*.c *.h *.ui 放在src目錄下,使整個項目的目錄更整潔,容易維護

3、指定進程的當前目錄

我們希望進程的當前目錄就是 *.exe的路徑


四、非模態窗口 (Non-Modal)

Qt中有一個QFileDialog類

模態窗口(Modal):

只有前臺窗口可以接收輸入,后臺被阻塞


非模態窗口(Non-Modal):

前臺、后臺均可接受輸入



非模式窗口的使用:

添加一個Widget類

創建一個Widget對象,作為成員變量

在用戶執行搜索菜單的時候顯示此窗口

當用戶在窗口內有動作時,響應該動作


和對話框的區別:父類不同,這里繼承自窗口Qwidget類,而對話框則繼承自QDialog類






————————————————————————

尾巴:

在打開、關閉時,一定要考慮到這個字符串為空的情況,并進行處理

如果在開發過程中實在懶得寫,至少也一定要用assert()進行斷言,至少不會在很久很久以后坑自己


轉載于:https://blog.51cto.com/zhweizhi/1880501

總結

以上是生活随笔為你收集整理的【Qt学习笔记】7.对话框Dialog的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。