2.5 标准对话框

简介: 2.5 标准对话框

今天我们来讲Qt提供的标准对话框。这些对话框不仅用法简单,而且在实际项目中都很实用。这些东西只需要熟悉一下,有个初步印象即可,等到用的时候再行查看不迟。

今天的内容可以查看Qt的例子,standard widget。

新建GUI项目StandardDialogs,类名StandardDialogs,基类选择QWidget。绘制如下的对话框:

01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


01ebd755782e4c909dad0843d3544acf.jpeg


2.5.1 输入对话框

void StandardDialogs::on_btn_getint_clicked()
{
    bool ok;
    int i = QInputDialog::getInt(this, tr("情况"),
                                 tr("几岁毕业"), 25, 16, 100, 1, &ok);
    if (ok)
        ui->label_input->setText(tr("%1").arg(i));
}
void StandardDialogs::on_btn_getdouble_clicked()
{
    bool ok;
    double d = QInputDialog::getDouble(this, tr("工作"),
                                       tr("一天挣多少钱"), 1000, 100, 10000, 1, &ok);
    if (ok)
        ui->label_input->setText(QString("%1").arg(d));
}
void StandardDialogs::on_btn_getitem_clicked()
{
    QStringList items;
    items << tr("王者荣耀") << tr("Dota") << tr("Dota2") << tr("LOL");
    bool ok;
    QString item = QInputDialog::getItem(this, tr("游戏"),
                                         tr("你玩哪一个"), items, 0, false, &ok);
    if (ok && !item.isEmpty())
        ui->label_input->setText(item);
}
void StandardDialogs::on_btn_gettext_clicked()
{
    bool ok;
    QString text = QInputDialog::getText(this, tr("发展"),
                                         tr("想跳槽吗"), QLineEdit::Normal,
                                         tr("懒"), &ok);
    if (ok && !text.isEmpty())
        ui->label_input->setText(text);
}
void StandardDialogs::on_btn_getmtext_clicked()
{
    bool ok;
    QString text = QInputDialog::getMultiLineText(this, tr("计划"),
                                                  tr("下一步怎么做"), "走着瞧", &ok);
    if (ok && !text.isEmpty())
        ui->label_input->setText(text);
}

2.5.2 颜色对话框

void StandardDialogs::on_btn_getcolor_clicked()
{
   QColorDialog::ColorDialogOptions option;
   if (ui->check_alpha->isChecked())
   {
       option = QColorDialog::ShowAlphaChannel;
   }
   const QColor color = QColorDialog::getColor(Qt::green, this, "选择颜色", option);
   if (color.isValid())
   {
       ui->btn_getcolor->setText(color.name());
       ui->btn_getcolor->setPalette(QPalette(color));
       ui->btn_getcolor->setAutoFillBackground(true);
   }
}

2.5.3 字体对话框

void StandardDialogs::on_btn_font_clicked()
{
   bool ok;
   QFont font = QFontDialog::getFont(&ok, ui->label_font->font(), this, tr("选择字体"));
   if (ok)
   {
       ui->label_font->setFont(font);
   }
}

2.5.4 文件对话框

void StandardDialogs::on_btn_dir_clicked()
{
    QString directory = QFileDialog::getExistingDirectory(this,
                                tr("获取文件夹"),
                                "./");
    if (!directory.isEmpty())
        ui->line_path->setText(directory);
}
void StandardDialogs::on_btn_file_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                                tr("打开一个文件"),
                                "./",
                                tr("All Files (*);;Text Files (*.txt)"));
    if (!fileName.isEmpty())
        ui->line_path->setText(fileName);
}
void StandardDialogs::on_btn_files_clicked()
{
    QStringList files = QFileDialog::getOpenFileNames(
                                this, tr("打开多个文件"),
                                "./",
                                tr("All Files (*);;Text Files (*.txt)"));
    if (files.count())
        ui->line_path->setText(QString("[%1]").arg(files.join(", ")));
}
void StandardDialogs::on_btn_savefile_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this,
                                tr("保存文件"),
                                "./",
                                tr("All Files (*);;Text Files (*.txt)"));
    if (!fileName.isEmpty())
        ui->line_path->setText(fileName);
}

2.5.5 提示对话框

void StandardDialogs::on_btn_critical_clicked()
{
    QMessageBox::critical(this, tr("危险"), tr("修路危险"), tr("返回"), tr("步行"), tr("无视"));
}
void StandardDialogs::on_btn_info_clicked()
{
    QMessageBox::information(this, tr("通知"), tr("会有个女朋友吗"), tr("不可能"), tr("真不可能"));
}
void StandardDialogs::on_btn_question_clicked()
{
     QMessageBox::question(this, tr("问题"),
                                    "喜欢身材好的还是颜值高的",
                                    QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
}
void StandardDialogs::on_btn_warning_clicked()
{
    QMessageBox msgBox(QMessageBox::Warning, tr("警告"),
                       "不要调戏女朋友", 0, this);
    msgBox.setDetailedText(tr("真的别"));
    msgBox.addButton(tr("Save &Again"), QMessageBox::AcceptRole);
    msgBox.addButton(tr("&Continue"), QMessageBox::RejectRole);
    if (msgBox.exec() == QMessageBox::AcceptRole)
        qDebug() << "accept";
}
void StandardDialogs::on_btn_message_clicked()
{
    message.showMessage(tr("恭喜你中了5个亿,不好意思,系统出错"));
}

2.5.6 进度对话框

void StandardDialogs::on_btn_progress_clicked()
{
    int numFiles = 50000;
    QProgressDialog progress("复制文件中...", "中断", 0, numFiles, this);
    progress.setWindowModality(Qt::WindowModal);
    progress.show();
    for (int i = 0; i < numFiles; i++)
    {
        progress.setValue(i);
        QCoreApplication::processEvents();
        if (progress.wasCanceled())
            break;
    }
    progress.setValue(numFiles);
}

2.5.7 安装向导对话框

void StandardDialogs::on_btn_wizard_clicked()
{
    QWizard w(this);
    w.setWindowTitle("向导");
    QWizardPage* page1 = new QWizardPage();
    QWizardPage* page2 = new QWizardPage();
    QWizardPage* page3 = new QWizardPage();
    page1->setTitle("第1步");
    page2->setTitle("第2步");
    page3->setTitle("第3步");
    w.addPage(page1);
    w.addPage(page2);
    w.addPage(page3);
    w.exec();
}

可以通过继承QWizardPage自定义向导窗口,定制自己需要的窗口。

好了,关于标准对话框的内容就讲到这里,如果你想第一时间看到小豆君的技术分享,就赶快关注吧。

欢迎关注小豆君的微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。

相关文章
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
571 211
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
229 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
811 59
|
6天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1133 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
482 109