几种标准对话框
几种标准对话框
1、颜色对话框
用途:颜色对话框用来选择颜色,创建后会显示各种颜色和透明度信息
void MainWindow::on_pushButton_clicked()
{
// 创建一个颜色选择对话框,初始颜色设置为蓝色 (Qt::blue)
// 'this' 表示该对话框的父对象是 MainWindow
QColorDialog colorDlg(Qt::blue, this);
// 启用“透明度通道”选项,让用户可以选择颜色的透明度(Alpha 值)
colorDlg.setOption(QColorDialog::ShowAlphaChannel);
// 以模态方式运行颜色对话框,阻塞当前函数直到用户关闭对话框
colorDlg.exec();
// 获取用户在颜色对话框中选择的颜色
QColor color = colorDlg.currentColor();
// 在调试输出中打印颜色值(包括 RGB 和 Alpha)
qDebug() << "color is " << color;
}
2、文本对话框
用途:创建一个选择文件的对话框,选择后,可以根据返回值打印选择的文件的路径信息
void MainWindow::on_pushButton_2_clicked()
{
// 获取当前程序的工作目录路径
QString path = QDir::currentPath();
// 设置文件对话框的标题
QString title = tr("文件对话框");
// 设置文件过滤器(可选择显示的文件类型)
// 1. 文本文件 (*.txt)
// 2. 图片文件 (*.jpg, *.gif, *.png)
// 3. 所有文件 (*.*)
QString filter = tr("文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)");
// 打开“打开文件”对话框
// 参数依次是:父窗口、对话框标题、初始路径、过滤器
// 返回用户选择的文件路径,如果取消则返回空字符串
QString aFileName = QFileDialog::getOpenFileName(this, title, path, filter);
// 调试输出所选择的文件路径,并换行
qDebug() << aFileName << Qt::endl;
}
3、输入对话框
1、文本输入对话框
void MainWindow::on_pushButton_3_clicked()
{
// 用于接收用户是否点击了“确定”按钮的状态
bool ok = false;
// 弹出一个文本输入对话框
// 参数依次是:
// 1. this —— 父窗口
// 2. tr("文字输入对话框") —— 对话框标题
// 3. tr("请输入用户的姓名") —— 提示标签文本
// 4. QLineEdit::Normal —— 文本输入模式(Normal 表示正常可见的文本)
// 5. tr("admin") —— 输入框的默认值
// 6. &ok —— 返回值参数,true 表示点击了“确定”,false 表示点击了“取消”
auto text = QInputDialog::getText(
this,
tr("文字输入对话框"),
tr("请输入用户的姓名"),
QLineEdit::Normal,
tr("admin"),
&ok
);
// 如果用户点击了“确定”按钮
if (ok) {
// 在调试输出中打印输入的文本
qDebug() << text << endl;
}
}
2、整数输入对话框
void MainWindow::on_pushButton_4_clicked()
{
// 用于接收用户是否点击了“确定”按钮
bool ok = false;
// 弹出一个整数输入对话框
// 参数依次是:
// 1. this —— 父窗口
// 2. tr("数字输入对话框") —— 对话框标题
// 3. tr("请输入数字") —— 提示标签文本
// 4. 200 —— 输入框的默认值
// 5. -200 —— 可输入的最小值
// 6. 400 —— 可输入的最大值
// 7. 10 —— 步长(按上下箭头时加减的数值)
// 8. &ok —— 返回值参数,true 表示点击了“确定”,false 表示点击了“取消”
auto intdata = QInputDialog::getInt(
this,
tr("数字输入对话框"),
tr("请输入数字"),
200,
-200,
400,
10,
&ok
);
// 如果用户点击了“确定”按钮
if (ok) {
// 在调试输出中打印输入的整数值
qDebug() << intdata << endl;
}
}
3、浮点输入对话框
void MainWindow::on_pushButton_5_clicked()
{
// 用于接收用户是否点击了“确定”按钮
bool ok = false;
// 弹出一个浮点数输入对话框
// 参数依次是:
// 1. this —— 父窗口
// 2. tr("浮点数输入对话框") —— 对话框标题
// 3. tr("输入浮点数") —— 提示标签文本
// 4. 0.1 —— 输入框的默认值
// 5. -1 —— 可输入的最小值
// 6. 1 —— 可输入的最大值
// 7. 2 —— 小数精度(保留的小数位数)
// 8. &ok —— 返回值参数,true 表示点击了“确定”,false 表示点击了“取消”
auto floatdata = QInputDialog::getDouble(
this,
tr("浮点数输入对话框"),
tr("输入浮点数"),
0.1,
-1,
1,
2,
&ok
);
// 如果用户点击了“确定”按钮
if (ok) {
// 在调试输出中打印输入的浮点数
qDebug() << floatdata << endl;
}
}
4、条目输入对话框
void MainWindow::on_pushButton_6_clicked()
{
// 创建一个字符串列表,作为可选择的条目
QStringList items;
items << tr("条目1") << tr("条目2");
// 用于接收用户是否点击了“确定”按钮
bool ok = false;
// 弹出一个条目选择输入对话框
// 参数依次是:
// 1. this —— 父窗口
// 2. tr("条目输入对话框") —— 对话框标题
// 3. tr("输入或选择条目") —— 提示标签文本
// 4. items —— 条目列表
// 5. 0 —— 默认选中的索引(0 表示第一项)
// 6. true —— 是否允许用户手动输入新的条目(true 表示可以输入)
// 7. &ok —— 返回值参数,true 表示点击了“确定”,false 表示点击了“取消”
auto itemData = QInputDialog::getItem(
this,
tr("条目输入对话框"),
tr("输入或选择条目"),
items,
0,
true,
&ok
);
// 如果用户点击了“确定”按钮
if (ok) {
// 在调试输出中打印选择或输入的条目内容
qDebug() << "item is " << itemData << endl;
}
}
4、提示对话框
void MainWindow::on_pushButton_7_clicked()
{
// 1️⃣ 询问对话框(question)
// 参数依次是:
// 1. this —— 父窗口
// 2. tr("提示对话框") —— 对话框标题
// 3. tr("你是abc吗?") —— 提示文本
// 4. QMessageBox::Yes —— 第一个按钮
// 5. QMessageBox::No —— 第二个按钮
auto ret = QMessageBox::question(
this,
tr("提示对话框"),
tr("你是abc吗?"),
QMessageBox::Yes,
QMessageBox::No
);
if (ret == QMessageBox::Yes) {
qDebug() << "ret is " << ret << "你好abc" << Qt::endl;
} else {
return; // 如果选择 "No",直接结束函数
}
// 2️⃣ 信息通知对话框(information)
auto ret2 = QMessageBox::information(
this,
tr("通知对话框"),
tr("你好abc"),
QMessageBox::Yes
);
if (ret2 == QMessageBox::Yes) {
qDebug() << "ret2 is " << ret2;
} else {
return; // 如果不是 "Yes",结束函数
}
// 3️⃣ 警告对话框(warning)
auto rets = QMessageBox::warning(
this,
tr("警告对话框"),
tr("警告"),
QMessageBox::Yes
);
if (rets == QMessageBox::Yes) {
qDebug() << "rets is " << rets;
} else {
return;
}
// 4️⃣ 严重错误/关键提示对话框(critical)
auto ret4 = QMessageBox::critical(
this,
tr("关键提示对话框"),
tr("关键提示"),
QMessageBox::Ok
);
if (ret4 == QMessageBox::Ok) {
qDebug() << "ret4 is " << ret4 << Qt::endl;
}
}
5、进度对话框
// ****************************** 进度对话框 **************************************
void MainWindow::on_pushButton_8_clicked()
{
// 创建进度对话框
// 参数依次是:
// 1. tr("正在复制") —— 对话框内容文本(进度提示)
// 2. tr("取消复制") —— 取消按钮文字
// 3. 0 —— 进度条最小值
// 4. 5000 —— 进度条最大值
// 5. this —— 父窗口
_progressDialog = new QProgressDialog(tr("正在复制"), tr("取消复制"), 0, 5000, this);
// 设置对话框标题
_progressDialog->setWindowTitle(tr("文件复制进度对话框"));
// 设置为应用程序级模态对话框(阻止操作其他窗口)
_progressDialog->setWindowModality(Qt::ApplicationModal);
// 创建定时器,用于定时更新进度
_timer = new QTimer(this);
// 每次定时器超时,调用 on_updateProgressDialog 更新进度
connect(_timer, &QTimer::timeout, this, &MainWindow::on_updateProgressDialog);
// 当用户点击“取消”按钮,调用 on_cancelProgressDialog
connect(_progressDialog, &QProgressDialog::canceled, this, &MainWindow::on_cancelProgressDialog);
// 启动定时器,每 2 毫秒触发一次 timeout 信号
_timer->start(2);
}
// 当用户取消进度对话框时执行
void MainWindow::on_cancelProgressDialog(){
// 停止并删除定时器
_timer->stop();
delete _timer;
_timer = nullptr;
// 删除进度对话框对象
delete _progressDialog;
_progressDialog = nullptr;
// 重置计数器
_counter = 0;
return;
}
// 更新进度条的槽函数
void MainWindow::on_updateProgressDialog(){
_counter++; // 每次调用进度加 1
// 如果进度超出最大值(5000),停止进度
if (_counter > 5000) {
_timer->stop();
delete _timer;
_timer = nullptr;
// 删除进度对话框
delete _progressDialog;
// 重置计数器
_counter = 0;
return;
}
// 更新进度对话框的当前值
_progressDialog->setValue(_counter);
}
// ****************************** 进度对话框 **************************************
6、向导对话框
// ****************************** 向导对话框 **************************************
void MainWindow::on_pushButton_8_clicked()
{
// 创建向导对话框(QWizard),父对象为 MainWindow
QWizard wizard(this);
wizard.setWindowTitle(tr("美味水果")); // 设置窗口标题
// ------------------ 第 1 页:介绍页 ------------------
auto page1 = new QWizardPage(); // 向导页面对象
page1->setTitle(tr("美味水果引导程序")); // 页面标题
auto label1 = new QLabel(); // 标签
label1->setText(tr("该程序帮你找到美味水果")); // 设置介绍文字
auto layout = new QVBoxLayout(); // 垂直布局
layout->addWidget(label1); // 把标签加到布局中
page1->setLayout(layout); // 设置页面布局
wizard.addPage(page1); // 添加到向导对话框
// ------------------ 第 2 页:选择水果 ------------------
QWizardPage * page2 = new QWizardPage();
page2->setTitle("选择心动水果");
auto group = new QButtonGroup(page2); // 按钮组,用于管理单选按钮
// 创建 5 个单选按钮
auto btn1 = new QRadioButton();
btn1->setText("荔枝");
group->addButton(btn1);
auto btn2 = new QRadioButton();
btn2->setText("苹果");
group->addButton(btn2);
auto btn3 = new QRadioButton();
btn3->setText("香蕉");
group->addButton(btn3);
auto btn4 = new QRadioButton();
btn4->setText("西瓜");
group->addButton(btn4);
auto btn5 = new QRadioButton();
btn5->setText("葡萄");
group->addButton(btn5);
// 布局添加所有单选按钮
auto layout2 = new QVBoxLayout();
for (int i = 0; i < group->buttons().size(); ++i) {
layout2->addWidget(group->buttons()[i]);
}
page2->setLayout(layout2);
wizard.addPage(page2); // 添加到向导对话框
// ------------------ 第 3 页:结束页 ------------------
QWizardPage * page3 = new QWizardPage();
page3->setTitle(tr("你的水果即将到来"));
auto label3 = new QLabel();
label3->setText(tr("感谢您的参与,祝你吃到美味的水果"));
QVBoxLayout * layout3 = new QVBoxLayout();
layout3->addWidget(label3);
page3->setLayout(layout3);
wizard.addPage(page3);
// ------------------ 显示向导 ------------------
wizard.show(); // 先显示(非必须)
wizard.exec(); // 模态方式运行向导
}
// ****************************** 向导对话框 **************************************

浙公网安备 33010602011771号