Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口
- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
模态对话框
非模态对话框
文件对话框
基本概念
静态函数
常见属性
颜色对话框
基本概念
静态函数
常见属性
字体对话框
基本概念
静态函数
常见属性
输入对话框
基本概念
静态函数
消息对话框
基本概念
静态函数
-
模态对话框
-
模态对话框是指在打开后,用户必须与该对话框交互并关闭它,才能返回到主窗口或其他窗口进行操作。在模态对话框打开期间,主窗口和其他窗口都不可用。
-
模态对话框通常用于需要用户立即处理的情况,如确认对话框、错误提示、设置窗口等。
-
在 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"); } }
-