【QT】QT的消息盒子和對話框(自定義對話框)

QT的消息盒子和對話框(自定義對話框)

  • 一、消息盒子QMessageBox
    • 1、彈出警告盒子
      • 示例代碼:
      • 現象:
    • 2、致命錯誤盒子
      • 示例代碼:
      • 現象:
    • 3、幫助盒子
      • 示例代碼:
      • 現象:
    • 4、示例代碼:
  • 二、QT中自帶的對話框
    • 1、顏色對話框 QColorDialog
      • 1)方法
        • 示例代碼:
        • 現象:
    • 2、字體對話框 QFontDialog
      • 1) 方法
        • 示例代碼:
        • 現象:
    • 3、文件對話框 QFileDialog
      • 1) 方法:彈出文件對話框,讓用戶可以選擇某個具體的文件
        • 示例代碼:
        • 現象:
      • 2) 方法:彈出目錄對話框,只能讓用戶選擇目錄,不可以選擇目錄中具體文件
        • 示例代碼:
  • 三、自定義對話框
    • 1.模態和非模態
      • 示例代碼:
      • 現象:

一、消息盒子QMessageBox

1、彈出警告盒子

[static] StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)返回值:點擊了盒子里面的哪個按鈕,返回值就返回這個按鈕參數:parent --this,父窗口title --》消息盒子的標題text --》盒子里面的文本內容 buttons --》盒子默認使用哪些按鈕,默認使用ok按鈕如果要添加多個按鈕,多個按鈕之間使用 按位或 連接起來defaultButton --》當按下回車鍵,默認選中的按鈕

示例代碼:

QMessageBox::warning(this, "警告","您輸入的賬號或密碼錯誤,請重新輸入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

現象:

在這里插入圖片描述

2、致命錯誤盒子

[static] StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
// 定義如警告盒子

示例代碼:

QMessageBox::critical(this, "致命錯誤","您輸入的賬號或密碼錯誤,請重新輸入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

現象:

在這里插入圖片描述

3、幫助盒子

[static] StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
// 定義如警告盒子

示例代碼:

QMessageBox::question(this, "幫助","您輸入的賬號或密碼錯誤,請重新輸入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

現象:

在這里插入圖片描述

  如何判斷點擊了哪個按鈕
方法:通過warning函數的返回值判斷,具體參見例子代碼if(ret==QMessageBox::Ok){}else  //其他按鈕{}

4、示例代碼:

auto ret = QMessageBox::question(this, "幫助","您輸入的賬號或密碼錯誤,請重新輸入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);
if (ret == QMessageBox::Ok)
{// 按實際邏輯做處理qDebug()<<"點擊的是ok";
}
else
{qDebug()<<"點擊的是close";
}

二、QT中自帶的對話框

1、顏色對話框 QColorDialog

1)方法

[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString())返回值:彈出的對話框所選中的顏色參數:initial --》顏色對話框默認選中的顏色//依據RGB的值新建顏色對象QColor(int r, int g, int b)   parent --》父窗口 thistitle --》顏色對話框的標題如何判斷用戶是否選中了某個顏色bool QColor::isValid() const返回值:如果用戶點擊ok  --》顏色就是合法,返回true反之,返回false
示例代碼:
// 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_btn1_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 顏色對話框
void MainWindow::on_btn1_clicked()
{QColor color1(0, 0, 255);// 彈出顏色對話框QColor color_ret = QColorDialog::getColor(color1, this, "顏色對話框");// 判斷用戶是點擊了ok還是cancelif(color_ret.isValid()){qDebug()<<"點擊了ok";// 拼接得到qss語句QString set_style = QString("background-color:rgb(%1,%2,%3);").arg(color_ret.red()).arg(color_ret.green()).arg(color_ret.blue());// 把按鈕的背景色設置成自己選擇的顏色ui->btn1->setStyleSheet(set_style);}else{qDebug()<<"點擊了cancel";}
}
現象:

在這里插入圖片描述

2、字體對話框 QFontDialog

1) 方法

[static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = Q_NULLPTR)返回值:所選中的字體參數:ok --》保存是否選中了某個字體,選中了 --true  沒有選中 --falseparent --》父窗口 this
如何判斷用戶是否選中了某個字體方法:判斷getFont的第一個參數是否為真
QString QFont::family() const返回值:返回選中的字體名字
int QFont::pointSize() const 返回值:返回選中的字體大小
示例代碼:
// 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 <QFontDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{bool is_ok;QFont myFont = QFontDialog::getFont(&is_ok, this);if (is_ok){qDebug()<<"選擇了ok";ui->label->setFont(myFont);}else{qDebug()<<"選擇了concel";}
}
現象:

在這里插入圖片描述

3、文件對話框 QFileDialog

1) 方法:彈出文件對話框,讓用戶可以選擇某個具體的文件

[static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString())返回值:選中的某個文件的絕對路徑名參數:parent --》父窗口 thiscaption --》文件對話框的標題dir --》指定要打開的目錄路徑filter --》文件過濾器,過濾掉不需要的文件比如: "*.txt"        表示只想查看文件夾中的記事本"*.txt *.bmp"  表示想查看文件夾中的記事本和bmp圖片
示例代碼:
// 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 <QFileDialog>
#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 pathName = QFileDialog::getOpenFileName(this, "打開的文件對話框", "C:/Users/xxx/Desktop/vm_shared/code/QT_proj/250406_test", "*txt *xls");qDebug()<< "選擇的文件是"<< pathName;
}
現象:

在這里插入圖片描述

2) 方法:彈出目錄對話框,只能讓用戶選擇目錄,不可以選擇目錄中具體文件

[static] QString QFileDialog::getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString())返回值:選中的某個目錄的絕對路徑名參數:parent --》父窗口 thiscaption --》目錄對話框的標題dir --》指定要打開的目錄路徑
示例代碼:
 // 打開目錄對話框
QString dirPath = QFileDialog::getExistingDirectory(this, "目錄");

三、自定義對話框

QT添加新的ui界面總共提供三種模板,三者區別
dialog --》作為獨立的彈窗來使用
mainwindow --》多界面跳轉,界面直接切換
widget --》作為子窗口來使用,嵌套到mainwindow

如何新建Qdialog:
右鍵點擊工程名–》QT設計師界面類,選擇QDialog模板

1.模態和非模態

          模態對話框 --》exec(),對話框如果不關閉,無法操作其他界面非模態對話框 --》show(),對話框如果不關閉,不影響操作其他界面

示例代碼:

firstwin.h firstwin.cpp

// firstwin.h
#ifndef FIRSTWIN_H
#define FIRSTWIN_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class firstwin; }
QT_END_NAMESPACEclass firstwin : public QMainWindow
{Q_OBJECTpublic:firstwin(QWidget *parent = nullptr);~firstwin();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::firstwin *ui;
};
#endif // FIRSTWIN_H// firstwin.cpp
#include "firstwin.h"
#include "ui_firstwin.h"
#include <QDebug>
#include "secondwin.h"
#include "regdialog.h"
firstwin::firstwin(QWidget *parent): QMainWindow(parent), ui(new Ui::firstwin)
{ui->setupUi(this);
}firstwin::~firstwin()
{delete ui;
}//登錄按鈕的槽函數
void firstwin::on_pushButton_clicked()
{//獲取輸入的用戶名和密碼QString name=ui->lineEdit->text();QString passwd=ui->lineEdit_2->text();if(name=="hello" && passwd=="123456"){//跳到主界面--》第二個界面//創建第二個界面對象secondwin *win=new secondwin();//顯示第二個界面win->show();//關閉第一個界面this->close();}elseqDebug()<<"登錄失敗";
}
//注冊按鈕對應的槽函數
void firstwin::on_pushButton_2_clicked()
{//彈出注冊對話框regdialog *dialog=new regdialog(this);//顯示對話框//dialog->show();  //非模態對話框dialog->exec();    //模態對話框
}

secondwin.cpp secondwin.h

// secondwin.h
#ifndef SECONDWIN_H
#define SECONDWIN_H#include <QMainWindow>namespace Ui {
class secondwin;
}class secondwin : public QMainWindow
{Q_OBJECTpublic:explicit secondwin(QWidget *parent = nullptr);~secondwin();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::secondwin *ui;
};#endif // SECONDWIN_H// secondwin.cpp
#include "secondwin.h"
#include "ui_secondwin.h"secondwin::secondwin(QWidget *parent) :QMainWindow(parent),ui(new Ui::secondwin)
{ui->setupUi(this);
}secondwin::~secondwin()
{delete ui;
}void secondwin::on_pushButton_clicked()
{//證明QWidget一般作為子窗口嵌套到QMainWindow里面ui->widget->hide();
}void secondwin::on_pushButton_2_clicked()
{//證明QWidget一般作為子窗口嵌套到QMainWindow里面ui->widget->show();
}

regdialog.h regdialog.cpp

// regdialog.h
#ifndef REGDIALOG_H
#define REGDIALOG_H#include <QDialog>namespace Ui {
class regdialog;
}class regdialog : public QDialog
{Q_OBJECTpublic:explicit regdialog(QWidget *parent = nullptr);~regdialog();private:Ui::regdialog *ui;
};#endif // REGDIALOG_H// regdialog.cpp
#include "regdialog.h"
#include "ui_regdialog.h"regdialog::regdialog(QWidget *parent) :QDialog(parent),ui(new Ui::regdialog)
{ui->setupUi(this);
}regdialog::~regdialog()
{delete ui;
}

現象:

在這里插入圖片描述

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

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

相關文章

依靠視頻設備軌跡回放平臺EasyCVR構建視頻監控,為幼教連鎖園區安全護航

一、項目背景 幼教行業連鎖化發展態勢越發明顯。在此趨勢下&#xff0c;幼兒園管理者對于深入了解園內日常教學與生活情況的需求愈發緊迫&#xff0c;將這些數據作為提升管理水平、優化教育服務的重要依據。同時&#xff0c;安裝監控系統不僅有效緩解家長對孩子在校安全與生活…

Stable Diffusion+Pyqt5: 實現圖像生成與管理界面(帶保存 + 歷史記錄 + 刪除功能)——我的實驗記錄(結尾附系統效果圖)

目錄 &#x1f9e0; 前言 &#x1f9fe; 我的需求 &#x1f527; 實現過程&#xff08;按功能一步步來&#xff09; &#x1f6b6;?♂? Step 1&#xff1a;基本圖像生成界面 &#x1f5c3;? Step 2&#xff1a;保存圖片并顯示歷史記錄 &#x1f4cf; Step 3&#xff1a…

量子計算未來的潛力和挑戰

據麥肯錫預測&#xff0c;到 2035 年或 2040 年&#xff0c;量子計算市場規模可能增長至約 800 億美元。目前&#xff0c;許多量子比特技術正競相成為首臺通用、無差錯量子計算機的基礎&#xff0c;但仍面臨諸多挑戰。 我們將探討量子計算的未來前景、潛力&#xff0c;以及它對…

ArcGIS 給大面內小面字段賦值

文章目錄 引言:地理數據處理中的自動化賦值為何重要?實現思路模型實現關鍵點效果實現步驟1、準備數據2、執行3、完成4、效果引言:地理數據處理中的自動化賦值為何重要? 在地理信息系統(GIS)的日常工作中,空間數據的屬性字段賦值是高頻且關鍵的操作,例如在土地利用規劃…

如何打通虛擬化-容器環境并保障流量安全?SmartX VCCI 方案升級!

為了提升資源利用率、交付效率和業務靈活性&#xff0c;不少企業用戶都在推進從傳統架構向云原生架構的演進&#xff0c;并采用虛擬機與容器共存的混合模式支持多種業務系統。由于兩個環境在業務交互層面形成高度耦合&#xff0c;企業需要具備簡單、高效方案&#xff0c;實現虛…

stable diffusion 量化加速點

文章目錄 一、導出為dynamic shape1)函數講解(函數導出、輸出檢查)2)代碼展示二、導出為static shape1)函數講解(略)2)代碼展示三、序列化為FP32測速1)測速2)代碼四、序列化為FP16測速1)測速2)代碼同上五、發現并解決解決CLIP FP16溢出,并測速1)如何找到溢出的算子…

7-openwrt-one通過web頁面配置訪客網絡、無線中繼等功能

前幾個章節一直在介紹編譯、分區之類的,都還沒正常開始使用這個路由器的wifi。默認wifi是沒有啟動的,前面還是通過手動修改uci配置啟動的,這個章節介紹下官方web頁面的使用。特別是訪客網絡、無線中繼 1、開啟wifi,配置wifi基本信息 我們使用有線連接路由器,通過192.168.…

AcWing 6099. 座位

原題目鏈接 問題描述 有 n 頭奶牛&#xff08;n ≥ 5&#xff09;&#xff0c;編號為 1 ~ n&#xff0c;按照某種順序圍著一張圓桌坐成一圈。 奶牛之間存在如下的朋友關系&#xff1a; 如果兩頭奶牛相鄰&#xff0c;則它們是朋友&#xff1b;如果兩頭奶牛之間只隔著一頭奶…

44、Spring Boot 詳細講義(一)

Spring Boot 詳細講義 目錄 Spring Boot 簡介Spring Boot 快速入門Spring Boot 核心功能Spring Boot 技術棧與集成Spring Boot 高級主題Spring Boot 項目實戰Spring Boot 最佳實踐總結 一、Spring Boot 簡介 1. Spring Boot 概念和核心特點 1.1、什么是 Spring Boot&#…

配置mac mini M4 的一些軟件

最近更換了 mac mini M4 &#xff0c;想要重新下載配置軟件 &#xff0c;記錄一下。 Homebrew是什么&#xff1f; homebrew是一款Mac OS平臺下的軟件包管理工具&#xff0c;擁有安裝、卸載、更新、查看、搜索等功能。通過簡單的指令可以實現包管理&#xff0c;而不用關心各種…

網絡空間安全(54)CSRF

一、定義與原理 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;全稱為跨站請求偽造&#xff0c;也被稱為One Click Attack或Session Riding&#xff0c;縮寫為CSRF或XSRF。它是一種網絡安全漏洞&#xff0c;攻擊者通過偽造用戶的請求&#xff0c;利用用戶…

分布式文件存儲系統FastDFS

文章目錄 1 分布式文件存儲1_分布式文件存儲的由來2_常見的分布式存儲框架 2 FastDFS介紹3 FastDFS安裝1_拉取鏡像文件2_構建Tracker服務3_構建Storage服務4_測試圖片上傳 4 客戶端操作1_Fastdfs-java-client2_文件上傳3_文件下載4_獲取文件信息5_問題 5 SpringBoot整合 1 分布…

安裝了VM Tools,仍無法復制拖動-解決方案

今天在安裝ubuntu時遇到了困擾許久的問題&#xff0c;安裝了VM Tools&#xff0c;仍無法拖動主機文件到虛擬機&#xff0c;主要有兩種原因并對應解決辦法。 1.相關虛擬機設置選項卡中-客戶機隔離-兩個功能沒有勾選 解決方案&#xff1a;勾選重啟虛擬機即可 2.&#xff08;這個…

Jmeter分布式測試啟動

代理客戶端配置 打開jmeter.properties文件&#xff0c;取消注釋并設置端口&#xff08;如server_port1099&#xff09;&#xff0c; 并添加server.rmi.ssl.disabletrue禁用SSL加密。 &#xff08;Linux系統&#xff09;修改jmeter-server文件中的RMI_HOST_DEF為代理機實際IP。…

火語言RPA--Oracle-導入數據表格

【組件功能】&#xff1a;導入特定的表格數據到包含同樣字段的數據表 將表格對象數據通過數據庫操作對象導入到指定數據庫。 配置預覽 配置說明 源表格 表格來源有“來自表格對象”和“來自表達式”2種&#xff0c;表達式支持DataTable類型變量。 對象 對應來自表格對象&…

Java的Selenium的特殊元素操作與定位之驗證碼

1.使用OCR技術識別驗證 步驟&#xff1a; 截取整個網頁的截圖。 定位驗證碼圖片元素。 根據驗證碼圖片的位置和大小&#xff0c;從截圖中裁剪出驗證碼圖片。 使用OCR工具&#xff08;如Tesseract&#xff09;識別驗證碼圖片中的文本。 2.手動處理驗證碼 步驟&#xff1a;…

OpenStack Yoga版安裝筆記(十七)安全組筆記

一、安全組與iptables的關系 OpenStack的安全組&#xff08;Security Group&#xff09;默認是通過Linux的iptables實現的。以下是其主要實現原理和機制&#xff1a; 安全組與iptables的關系 OpenStack的安全組規則通過iptables的規則鏈實現。每條安全組規則會被轉換為相應的i…

starrocks split函數和trino split函數差異性

在trino419和starrocks3.2.8中分別執行下面這兩條sql,出來的結果是不一樣的 select split(,,,)[1] as t1 select coalesce(split(,,&#

Spring Data JPA中的List底層:深入解析ArrayList的奧秘!!!

&#x1f31f; Spring Data JPA中的List底層&#xff1a;深入解析ArrayList的奧秘 &#x1f4a1; 你是否好奇過&#xff0c;為什么Spring Data JPA的查詢方法返回的List<T>總是默認為ArrayList&#xff1f;本文將通過技術原理解析、驗證實驗和性能優化指南&#xff0c;為…

騰訊云智測試開發面經

1、投遞時間線 2.20投遞簡歷,3.11第一輪面試,3.30第二輪面試,4.4第三輪面試,4.10第四輪面試,4.11offer意向書 2、第一輪面試 第一輪面試技術面,面試官是導師,面試時長40多分鐘 1)自我介紹 2)數組和列表的區別 3)了解哪些數據庫 4)進程和線程的區別 5)了解哪…