Qt QDialog对话,QMessageBox 消息对话,QFileDialog 文件对话
Qt QDialog对话,QMessageBox 消息对话,QFileDialog 文件对话笔记
1、自定义QDialog对话框
核心API
| API | 说明 |
|---|---|
exec() |
模态阻塞弹出对话框,代码暂停执行,窗口关闭后返回int结果码 |
accept() |
确认关闭,返回值:QDialog::Accepted |
reject() |
取消关闭,返回值:QDialog::Rejected |
done(int val) |
自定义返回码,关闭对话框,返回传入整数 |
信号
accepted():调用accept()触发rejected():调用reject()触发finished(int res):窗口关闭必定触发,携带返回结果
mydialog.cpp
#include "mydialog.h"
#include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::MyDialog)
{
ui->setupUi(this);
}
MyDialog::~MyDialog()
{
delete ui;
}
//确认按钮
void MyDialog::on_acceptBtn_clicked()
{
this->accept();
}
//取消按钮
void MyDialog::on_rejectBtn_clicked()
{
this->reject();
}
//自定义返回码按钮
void MyDialog::on_doneBtn_clicked()
{
this->done(10);
}
mainwindow.cpp 使用示例
#include "mydialog.h"
#include <QDebug>
void MainWindow::on_modalDlg_clicked()
{
MyDialog dlg;
//绑定对话框信号
connect(&dlg,&MyDialog::finished,this,[=](int res){
qDebug()<<"result: "<<res;
});
connect(&dlg,&MyDialog::accepted,this,[=](){
qDebug()<<"accepted 信号被发射了...";
});
connect(&dlg,&MyDialog::rejected,this,[=](){
qDebug()<<"rejected 信号被发射了...";
});
//模态阻塞
int ret = dlg.exec();
if(ret == QDialog::Accepted)
{
qDebug()<<"accept button clicked...";
}
else if(ret == QDialog::Rejected)
{
qDebug()<<"reject button clicked...";
}
else
{
qDebug()<<"done button clicked...";
}
}
注意:
MyDialog dlg;定义在栈上,exec模态弹出;不要new,避免内存泄漏。
2、QMessageBox 消息对话框
静态API
| API | 作用 |
|---|---|
QMessageBox::about() |
关于提示框,仅确定按钮 |
QMessageBox::critical() |
错误弹窗 |
QMessageBox::information() |
普通信息提示 |
QMessageBox::warning() |
警告弹窗 |
QMessageBox::question() |
问答对话框,返回点击按钮枚举 |
示例代码
#include <QMessageBox>
void MainWindow::on_msgbox_clicked()
{
QMessageBox::about(this,"about","这是一个简单的消息提示框");
QMessageBox::critical(this,"critical","这是一个错误对话框‑critical...");
int ret = QMessageBox::question(this,"question","这是你要保存修改的文件内容吗???",
QMessageBox::Save | QMessageBox::Cancel,
QMessageBox::Save);
if(ret == QMessageBox::Save)
{
QMessageBox::information(this,"information","恭喜你保存成功!");
}
else if(ret == QMessageBox::Cancel)
{
QMessageBox::warning(this,"warning","很遗憾保存失败*");
}
}
3、QFileDialog 文件对话框
全部静态函数;用户点击取消返回空字符串,业务代码要判空。
| API | 功能 |
|---|---|
getExistingDirectory() |
选择文件夹 |
getOpenFileName() |
选择单个文件 |
getOpenFileNames() |
多选文件,返回QStringList |
getSaveFileName() |
保存文件对话框 |
过滤器语法:
"Images (*.png *.jpg);;Text files (*.txt)",;;分隔不同过滤项
示例代码
#include <QFileDialog>
#include <QMessageBox>
#include <QStringList>
void MainWindow::on_filedlg_clicked()
{
#ifdef OPENDIR
//打开目录
QString dirName = QFileDialog::getExistingDirectory(this,"打开目录","D:\\qw");
QMessageBox::information(this,"打开目录","你打开的目录是:"+dirName);
#endif
#ifdef OPENFILE
//打开单个文件
QString arg("Text files (*.txt)");
QString fileName = QFileDialog::getOpenFileName(
this,tr("Open File"),"D:\\qw",
tr("Images (*.png *.jpg);;Text files (*.txt)"),&arg);
QMessageBox::information(this,"打开文件","你打开的文件是:"+fileName);
#endif
#ifdef OPENFILES
//打开多个文件
QStringList fileNames = QFileDialog::getOpenFileNames(
this,tr("Open File"),"D:\\qw",
tr("Images (*.png *.jpg);;Text files (*.txt)"));
QString names;
for(int i=0;i<fileNames.size();i++)
{
names += fileNames.at(i)+" ";
}
QMessageBox::information(this,"打开文件(s)","你打开的文件(s): "+names);
#endif
#ifdef SAVEFILE
//保存文件
QString fileName = QFileDialog::getSaveFileName(this,"保存文件","D:\\qw");
QMessageBox::information(this,"保存文件","你保存的文件:"+fileName);
#endif
}
面试要点总结
exec()模态对话框,阻塞执行;accept/reject/done控制关闭和返回值。finished(int)信号无论确认、取消、自定义关闭一定会触发。- QFileDialog 用户点取消返回空字符串,业务代码必须做判空。
- 文件过滤器用
;;分割多种文件类型。 QMessageBox::question()可以组合多个按钮枚举,返回点击按钮。
浙公网安备 33010602011771号