目录
模态对话框
非模态对话框
文件对话框
基本概念
静态函数
常见属性
颜色对话框
基本概念
静态函数
常见属性
字体对话框
基本概念
静态函数
常见属性
输入对话框
基本概念
静态函数
消息对话框
基本概念
静态函数
模态对话框是指在打开后,用户必须与该对话框交互并关闭它,才能返回到主窗口或其他窗口进行操作。在模态对话框打开期间,主窗口和其他窗口都不可用。
模态对话框通常用于需要用户立即处理的情况,如确认对话框、错误提示、设置窗口等。
在 Qt 中,可以通过 QDialog
类实现模态对话框。你可以使用 exec()
方法来显示模态对话框。
void MainWindow::on_pushButton_clicked()
{
QDialog dlg(this);
QPushButton* btn = new QPushButton("on_pushButton_clicked", &dlg);
dlg.exec();
}
void MainWindow::on_pushButton_3_clicked()
{
Dialog1 dlg(this);
dlg.exec();
}
非模态对话框是指在打开后,用户可以自由地与主窗口或其他窗口交互,而不必首先关闭该对话框。
非模态对话框适用于不需要立即处理的情况,如工具窗口、搜索窗口等。
在 Qt 中,可以通过 QDialog
类实现非模态对话框。你可以使用 show()
方法来显示非模态对话框。
void MainWindow::on_pushButton_2_clicked()
{
QDialog* dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
}
void MainWindow::on_pushButton_4_clicked()
{
Dialog2* dlg = new Dialog2(this);
dlg->show();
}
QFileDialog:一个用于选择文件或目录的对话框。
静态函数:QFileDialog
提供了一些静态函数,可以快速创建和显示文件对话框。
模式:文件对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。
getOpenFileName
:选择一个文件进行打开。
getSaveFileName
:选择一个文件进行保存。
getExistingDirectory
:选择一个目录。
getOpenFileNames
:选择多个文件进行打开。
setWindowTitle:设置对话框的标题。
setDirectory:设置对话框的初始目录。
setNameFilter:设置文件过滤器。
setFileMode:设置文件模式(例如,选择单个文件、多个文件、目录等)。
setOption:设置对话框的选项(例如,显示隐藏文件、不解析符号链接等)。
getOpenFileName
用于选择一个文件进行打开。
函数原型
QString QFileDialog::getOpenFileName(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options()
)
参数说明
parent
:父窗口,用于模态对话框的父窗口。
caption
:对话框的标题。
dir
:初始目录。
filter
:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"
。
selectedFilter
:选中的过滤器。
options
:对话框选项,例如 QFileDialog::ReadOnly
。
示例代码
void MainWindow::on_pushButton_5_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
"Open File",
"D:\\Debug",
"Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
NULL,
QFileDialog::ReadOnly);
qDebug() << fileName;
}
getSaveFileName
用于选择一个文件进行保存。
函数原型
QString QFileDialog::getSaveFileName(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options()
)
参数说明
parent
:父窗口,用于模态对话框的父窗口。
caption
:对话框的标题。
dir
:初始目录。
filter
:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"
。
selectedFilter
:选中的过滤器。
options
:对话框选项,例如 QFileDialog::ReadOnly
。
示例代码
void MainWindow::on_pushButton_7_clicked()
{
QString fileName = QFileDialog::getSaveFileName(
this,
"Save File",
"D:\\Debug",
"Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
NULL,
QFileDialog::ReadOnly);
qDebug() << fileName;
}
getExistingDirectory
用于选择一个目录。
函数原型
QString QFileDialog::getExistingDirectory(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
Options options = ShowDirsOnly
)
参数说明
parent
:父窗口,用于模态对话框的父窗口。
caption
:对话框的标题。
dir
:初始目录。
options
:对话框选项,例如 QFileDialog::ShowDirsOnly
。
示例代码
void MainWindow::on_pushButton_8_clicked()
{
QString dir = QFileDialog::getExistingDirectory(
this,
"Open Directory",
"D:\\Debug",
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
qDebug() << dir;
}
getOpenFileNames
用于选择多个文件进行打开。
函数原型
QStringList QFileDialog::getOpenFileNames(
QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options()
)
参数说明
parent
:父窗口,用于模态对话框的父窗口。
caption
:对话框的标题。
dir
:初始目录。
filter
:文件过滤器,例如 "Images (*.png *.xpm *.jpg);;Text files (*.txt)"
。
selectedFilter
:选中的过滤器。
options
:对话框选项,例如 QFileDialog::ReadOnly
。
示例代码
void MainWindow::on_pushButton_6_clicked()
{
QStringList fileName = QFileDialog::getOpenFileNames(
this,
"Open Files",
"D:\\Debug",
"Image(*.bmp *.png);;text(*.txt);;allfiles(*.*)",
NULL,
QFileDialog::ReadOnly);
qDebug() << fileName;
}
QColorDialog:一个用于选择颜色的对话框。
静态函数:QColorDialog
提供了一些静态函数,可以快速创建和显示颜色对话框。
模式:颜色对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。
getColor
:选择一个颜色。setWindowTitle:设置对话框的标题。
setCurrentColor:设置初始颜色。
currentColor:获取当前选中的颜色。
getColor
函数获取颜色
函数原型
QColor QColorDialog::getColor(
const QColor &initial = Qt::white,
QWidget *parent = nullptr,
const QString &title = QString(),
ColorDialogOptions options = ColorDialogOptions()
)
参数说明
initial
:初始颜色。默认为 Qt::white
。
parent
:父窗口,用于模态对话框的父窗口。
title
:对话框的标题。默认为空字符串。
options
:对话框选项。可以是 QColorDialog::ShowAlphaChannel
或其他选项的组合。
示例代码
void MainWindow::on_pushButton_9_clicked()
{
QColor color = QColorDialog::getColor(Qt::white, this, "Select Color");
if(color.isValid())
{
ui->pushButton_9->setStyleSheet("color:" + color.name() + ";");
qDebug() << color.name();
}
}
QFontDialog:一个用于选择字体的对话框。
静态函数:QFontDialog
提供了一些静态函数,可以快速创建和显示字体对话框。
模式:字体对话框可以是模态的(阻塞父窗口)或非模态的(不阻塞父窗口)。
getFont
:选择一个字体。setWindowTitle:设置对话框的标题。
setCurrentFont:设置初始字体。
currentFont:获取当前选中的字体。
getFont
:选择一个字体。
函数原型
QFont QFontDialog::getFont(
bool *ok,
const QFont &initial = QFont(),
QWidget *parent = nullptr,
const QString &title = QString(),
FontDialogOptions options = FontDialogOptions()
)
参数说明
ok
:一个布尔指针,用于指示用户是否确认了选择。如果用户确认了选择,*ok
将被设置为 true
,否则为 false
。
initial
:初始字体。默认为空字体(QFont()
)。
parent
:父窗口,用于模态对话框的父窗口。
title
:对话框的标题。默认为空字符串。
options
:对话框选项。可以是 QFontDialog::NoButtons
或其他选项的组合。
示例代码
void MainWindow::on_pushButton_10_clicked()
{
bool ok;
QFont font = QFontDialog::getFont(
&ok,
QFont("Helvetica [Cronyx]", 10),
this,
"Select Font");
if(ok)
{
ui->pushButton_10->setFont(font);
qDebug() << font.family();
}
}
QInputDialog:一个用于获取用户输入的对话框。
输入类型:可以输入的类型包括字符串(text)、整数(int)、浮点数(double)等。
getText:获取字符串输入。
函数原型
QString QInputDialog::getText(
QWidget *parent,
const QString &title,
const QString &label,
QLineEdit::EchoMode mode = QLineEdit::Normal,
const QString &text = QString(),
bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags()
)
参数说明
parent
:父窗口指针,用于模态对话框的父窗口。
title
:对话框的标题。
label
:对话框中显示的标签文本。
mode
:输入框的回显模式,例如普通模式(QLineEdit::Normal
)或密码模式(QLineEdit::Password
)。
text
:输入框的初始文本。
ok
:布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok
将被设置为 true
,否则为 false
。
flags
:窗口标志,用于设置对话框的外观和行为。
getInt:获取整数输入。
int QInputDialog::getInt(
QWidget *parent,
const QString &title,
const QString &label,
int value = 0,
int min = -2147483647,
int max = 2147483647,
int step = 1,
bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags()
)
参数说明
parent
:父窗口指针,用于模态对话框的父窗口。
title
:对话框的标题。
label
:对话框中显示的标签文本。
value
:输入框的初始值。
min
:输入的最小值。
max
:输入的最大值。
step
:输入框的步长。
ok
:布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok
将被设置为 true
,否则为 false
。
flags
:窗口标志,用于设置对话框的外观和行为。
getDouble:获取浮点数输入。
函数原型
double QInputDialog::getDouble(
QWidget *parent,
const QString &title,
const QString &label,
double value = 0,
double min = -2147483647,
double max = 2147483647,
int decimals = 1,
bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags()
)
参数说明
parent
:父窗口指针,用于模态对话框的父窗口。
title
:对话框的标题。
label
:对话框中显示的标签文本。
value
:输入框的初始值。
min
:输入的最小值。
max
:输入的最大值。
decimals
:输入框的小数位数。
ok
:布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok
将被设置为 true
,否则为 false
。
flags
:窗口标志,用于设置对话框的外观和行为。
getItem:从一个项目列表中获取选择。
函数原型
QString QInputDialog::getItem(
QWidget *parent,
const QString &title,
const QString &label,
const QStringList &items,
int current = 0,
bool editable = true,
bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags()
)
参数说明
parent
:父窗口指针,用于模态对话框的父窗口。
title
:对话框的标题。
label
:对话框中显示的标签文本。
items
:项目列表,用户可以从中选择。
current
:初始选中的项目索引。
editable
:是否允许用户输入自定义文本。
ok
:布尔指针,用于指示用户是否确认了输入。如果用户确认了输入,*ok
将被设置为 true
,否则为 false
。
flags
:窗口标志,用于设置对话框的外观和行为。
void MainWindow::on_pushButton_11_clicked()
{
bool ok;
QString text = QInputDialog::getText(
this,
"input dialog",
"please input your name:",
QLineEdit::Normal,
"0xCC",
&ok );
if(ok && !text.isEmpty())
{
qDebug() << text;
}
}
void MainWindow::on_pushButton_12_clicked()
{
bool ok;
int value = QInputDialog::getInt(
this,
"input dialog",
"please input your age:",
18,
0,
120,
1,
&ok);
if(ok) qDebug() << value;
}
void MainWindow::on_pushButton_13_clicked()
{
bool ok;
QStringList items;
items << "apple" << "banana";
QString item = QInputDialog::getItem(
this,
"input dialog",
"please select a fruit",
items,
1,
false,
&ok);
if(ok) qDebug() << item;
}
QMessageBox:一个用于显示消息的对话框。
消息类型:包括信息(Information)、警告(Warning)、错误(Critical)、询问(Question)等。
information:显示信息消息。
函数原型
int QMessageBox::information(
QWidget *parent,
const QString &title,
const QString &text,
int button0,
int button1 = 0,
int button2 = 0
)
warning:显示警告消息。
函数原型
int QMessageBox::warning(
QWidget *parent,
const QString &title,
const QString &text,
int button0,
int button1 = 0,
int button2 = 0
)
critical:显示错误消息。
函数原型
int QMessageBox::critical(
QWidget *parent,
const QString &title,
const QString &text,
int button0,
int button1 = 0,
int button2 = 0
)
question:显示询问消息。
函数原型
int QMessageBox::question(
QWidget *parent,
const QString &title,
const QString &text,
int button0,
int button1 = 0,
int button2 = 0
)
参数说明
parent
:父窗口指针,用于模态对话框的父窗口,可以是 nullptr
表示没有父窗口。
title
:对话框的标题。
text
:对话框中显示的主要消息文本。
button0
:对话框中的第一个按钮,使用 QMessageBox::StandardButton
枚举值。
button1
:对话框中的第二个按钮(可选),使用 QMessageBox::StandardButton
枚举值。
button2
:对话框中的第三个按钮(可选),使用 QMessageBox::StandardButton
枚举值。
示例代码
void MainWindow::on_pushButton_14_clicked()
{
QMessageBox::information(this, "information", "This is a information message", QMessageBox::Ok);
}
void MainWindow::on_pushButton_15_clicked()
{
QMessageBox::warning(this, "warning", "This is a warning message");
}
void MainWindow::on_pushButton_16_clicked()
{
QMessageBox::critical(this, "critical", "This is a critical message");
}
void MainWindow::on_pushButton_17_clicked()
{
int ret = QMessageBox::question(this, "question", "Are you want to continue?");
if(ret == QMessageBox::Yes)
{
QMessageBox::information(this, "information", "your chose yes");
}
else
{
QMessageBox::information(this, "information", "your chose no");
}
}