文章目錄
- 前言
- 一、QDialog模態和非模態?
- 二、QMessageBox消息對話框
- 1.錯誤(critical)
- 2.警告(warning)
- 3.信息(information)
- 4.問題(question)
- 三、QFileDialog文件對話框
前言
本篇文章主要講QDialog對話框以及QMessageBox和QFileDialog
一、QDialog模態和非模態?
説明:模態是指打開對話框後無法操作主程序的其他界面,必須先處理對話框。非模態是指可以處理主程序的其他內容,不必先處理對話框。下面我通過具體例子演示:
首先創建UI界面,如下;
創建好後,將Model和NonModel轉到槽,在連接信號與槽:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QDialog>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 信號與槽:connect(object1, SIGNAL(signal), object2, SLOT(slot))
connect(ui->actionModel, SIGNAL(triggered()), this, SLOT(dialog_Model()));
connect(ui->actionNoModel, SIGNAL(triggered()), this, SLOT(dialog_NoModel()));
}
MainWindow::~MainWindow()
{
delete ui;
}
// dialog_model 槽函數
void MainWindow::dialog_Model()
{
QDialog dia_model(this);
qDebug() << "hello dialog_model";
// Model 使用exec,模態對話框,(彈出對話框後,必須對此對話框進行操作,否則不能操作其他同程序的頁面)
dia_model.exec();
}
// dialog_nomodel 槽函數
void MainWindow::dialog_NoModel()
{
QDialog *dia_nomodel = new QDialog(this);
// 關閉對話框時自動釋放內存
dia_nomodel->setAttribute(Qt::WA_DeleteOnClose);
// NoModel 使用show,非模態對話框,(彈出對話框,不是必須對次進行操作)
dia_nomodel->show();
qDebug() << "hello dialog_nomodel";
}
需要注意的是,模態和非模態創建對象的方法不同,在創建非模態時,還需要設置對話框關閉後內存自動釋放,不然容易造成內存使用增大。
使用如下代碼釋放內存
dia_nomodel->setAttribute(Qt::WA_DeleteOnClose);
二、QMessageBox消息對話框
説明:消息對話框主要有:錯誤,警告,信息,問題等。
下面我主要講這四個
1.錯誤(critical)
還是需要創建UI界面,創建好後,將其轉到槽,以下其他三種都需要
// 這裏我只寫槽函數
void MainWindow::on_actionCritical_triggered()
{
// 返回值為int
QMessageBox::critical(this, "錯誤", "critical");
}
注意這裏不需要new一個對象,返回值為int型,可以通過返回值判斷是否正確執行,在Qt的幫助文檔中有。
2.警告(warning)
代碼如下:
void MainWindow::on_actionWarning_triggered()
{
// 返回值為int
QMessageBox::warning(this, "警告", "warning");
}
跟critical是差不多的
3.信息(information)
跟上面兩種差不多
void MainWindow::on_actionInfo_triggered()
{
// 返回值為int
QMessageBox::information(this, "信息", "information");
}
4.問題(question)
這裏是引用
void MainWindow::on_actionQuestion_triggered()
{
// 返回值為int類型
if (QMessageBox::Ok == QMessageBox::question(this, "問題", "你有對象嗎?",
QMessageBox::Ok | QMessageBox::Cancel))
{
qDebug() << "返回了ok";
}
else {
qDebug() << "返回了cancel";
}
}
可以自定義問題的內容以及按鈕,以上三種也能自定義按鈕,每個按鈕的返回值都不一樣,可以查Qt文檔查看。這裏我們將按下的按鈕返回值與其進行判斷,方便觀察。
説明一下:以上四種對話框都是模態的
三、QFileDialog文件對話框
文件對話框有很多種操作(如保存,打開等),我主要將打開操作
void MainWindow::on_actionQFileDialog_triggered()
{
QFileDialog::getOpenFileName(this, "打開文件");
}
第三個參數是可以設置路徑,第四個參數可以設置選擇文件格式(如:png, jpg, doc, all),這裏我沒有演示