QT 8 种常见的QDialog 类对话框用法【全网最详细!!!速收藏】

【概要】

Qt提供了一些常用的 【标准对话框】,它们全部继承自 QDialog 类,并增加了自己的特色功能。比如获取颜色、显示特定信息等。

今天我们以demo为例,简单介绍8种常见的QDialog 类对话框用法。
它们分别是:

对话框类型QDialog 类
颜色对话框QColorDialog
文件对话框QFileDialog
字体对话框QFontDialog
输入对话框QInputDialog
消息对话框QMessageBox
进度对话框QProgressDialog
错误信息对话框QErrorMessage
向导对话框QWizardPage

【架构流程】

新建一个项目,即新建 Qt Widgets 应用,
项目名称:mvdialog2
基类选择:QWidget
类名:MyWidget
完成后双击 mywidget.ui 文件进入设计模式,在界面上添加一些按钮,如图所示。
源码分享,我放在这篇文章里啦!
八种QDialog 类的具体实现方式<附详细代码,全网最详细!>

请添加图片描述

【实现细节】

▶ 颜色对话框

▌样例
方法二的样式
▌实现方式
『方法一』

  • 这里使用了 QColorDialog 的静态函数 getColor()来获取颜色,
  • 3个参数分别是:①设置初始颜色;②指定父窗口;③设置对话框标题。
  • 这里的 Qt::red 是 Qt预定义的颜色对象,可以直接单击该字符串,然后按下 F1 查看其快捷帮助,或者在帮助索引中通过 Qt::GlobalColor关键字,从而查看到所有的预定义颜色列表。
	QColor color = QColorDialog::getColor(Qt::red, this, tr("颜色对话框"),
	                                      QColorDialog::ShowAlphaChannel);

『方法二』

  • 这里的 QColorDialog::ShowAlphaChannel 用来显示 alpha 设置。
  • 前面的方法一,好处是不用创建对象。但是如果想要更灵活的设置,则可以使用方法二

先创建对象,然后进行各项设置,如使用以下实现的方式,显示效果如样例图:

    QColorDialog dialog(Qt::red, this);                // 创建对象
    dialog.setOption(QColorDialog::ShowAlphaChannel); // 显示alpha选项
    dialog.exec();                                    // 以模态方式运行对话框
    QColor color = dialog.currentColor();             // 获取当前颜色

    qDebug() << "color: " << color;

▶ 文件对话框

▌样例
文件对话框
▌实现方式

    QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),
                                                          "D:", tr("图片文件(*png *jpg)"));
    qDebug()<< "fileNames:" << fileNames;

▶ 字体对话框

▌样例
字体对话框
▌实现方式

    // ok用于标记是否按下了“OK”按钮
    bool ok;
    QFont font = QFontDialog::getFont(&ok, this);
    // 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体
    // 如果按下“Cancel”按钮,那么输出信息
    if (ok) ui->pushButton_3->setFont(font);
    else qDebug() << tr("没有选择字体!");

▶ 输入对话框

▌样例
输入对话框
▌实现方式

    bool ok;
    // 获取字符串
    QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
                                           tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
    if(ok) qDebug() << "string:" << string;

    // 获取整数
    int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
                                      tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
    if(ok) qDebug() << "value1:" << value1;

    // 获取浮点数
    double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
                                            tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
    if(ok) qDebug() << "value2:" << value2;

    // 获取条目
    QStringList items;
    items << tr("条目1") << tr("条目2");
    QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
                                         tr("请选择或输入一个条目"), items, 0, true, &ok);
    if(ok) qDebug() << "item:" << item;

▶ 消息对话框

▌样例
请添加图片描述
▌实现方式

    // demo1 问题对话框
    int ret1 = QMessageBox::question(this, tr("问题对话框"),
                                     tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);
    if(ret1 == QMessageBox::Yes) qDebug() << tr("问题!");
    
    // demo2 提示对话框
    int ret2 = QMessageBox::information(this, tr("提示对话框"),
                                        tr("这是Qt书籍!"), QMessageBox::Ok);
    if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");
    
    // demo3 警告对话框
    int ret3 = QMessageBox::warning(this, tr("警告对话框"),
                                    tr("不能提前结束!"), QMessageBox::Abort);
    if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");
    
    // demo4 错误对话框
    int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),
                                     tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);
    if(ret4 == QMessageBox::YesAll) qDebug() << tr("错误");
    
    // demo5 关于对话框
    QMessageBox::about(this, tr("关于对话框"),
                       tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));

▶ 进度对话框

▌样例
进度对话框

▌实现方式

    QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
    dialog.setWindowTitle(tr("进度对话框"));     // 设置窗口标题
    dialog.setWindowModality(Qt::WindowModal);  // 将对话框设置为模态
    dialog.show();
    for(int i=0; i<50000; i++) {                // 演示复制进度
        dialog.setValue(i);                     // 设置进度条的当前值
        QCoreApplication::processEvents();      // 避免界面冻结
        if(dialog.wasCanceled()) break;         // 按下取消按钮则中断
    }
    dialog.setValue(50000);    // 这样才能显示100%,因为for循环中少加了一个数
    qDebug() << tr("复制结束!");

▶ 错误信息对话框

▌样例
错误信息对话框
▌实现方式

    errordlg->setWindowTitle(tr("错误信息对话框"));
    errordlg->showMessage(tr("这里是出错信息!"));

▶ 向导对话框

▌样例
向导对话框
▌实现方式

QWizardPage * MyWidget::createPage1()  // 向导页面1
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
QWizardPage * MyWidget::createPage2()  // 向导页面2
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("用户选择信息"));
    return page;
}
QWizardPage * MyWidget::createPage3()  // 向导页面3
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}

// 向导对话框
void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());     // 添加向导页面
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

小结

在QT开发的道路上,需要不断地深入QT相关机制的背后,才能够更好地高效呈现作品,做好产品。
希望今天的分享,对你有所帮助。喜欢我的干货文章,就帮忙点个赞吧~~谢谢啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐亦_Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值