[Qt][对话框][下]详细讲解

目录

  • 1.Qt内置对话框
    • 0.有哪些
    • [1.消息对话框 QMessageBox](#1.消息对话框 QMessageBox)
    • [2.颜色对话框 QColorDialog](#2.颜色对话框 QColorDialog)
    • [3.⽂件对话框 QFileDialog](#3.⽂件对话框 QFileDialog)
    • [4.字体对话框 QFontDialog](#4.字体对话框 QFontDialog)
    • [5.输⼊对话框 QInputDialog](#5.输⼊对话框 QInputDialog)
    • [6.进度条对话框 QProgressDialog](#6.进度条对话框 QProgressDialog)

1.Qt内置对话框

0.有哪些

  • Qt提供了多种可复⽤的 对话框类型,即Qt标准对话框 ,全部继承于 QDialog
  • Qt常⽤的内置对话框QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog(字体对话框)、QInputDialog(输⼊对话框)和QMessageBox(消息框)

1.消息对话框 QMessageBox

  • 消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进⾏选择操作

  • QMessageBox类中定义了静态成员函数,可以直接调⽤创建不同⻛格的消息对话框

    • Question():用于正常操作过程中的提问

    • Information():用于报告正常运行信息

    • Warning():用于报告非关键错误

    • Critical():用于报告严重错误

  • QMessageBox中可以设置的按钮类型

  • 自定义按钮 可以在QMessageBox充当的角色

  • 示例

    cpp 复制代码
    QMessageBox* msgBox = new QMessageBox(this);
    
    msgBox->setWindowTitle("标题");
    msgBox->setText("对话框文本");
    msgBox->setIcon(QMessageBox::Information); // 设置消息对话框类型
    
    // 标准按钮中(QMessageBox 自己生成的), 根本就没法进行信号槽的连接
    msgBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);
    
    // 可以通过自定义按钮来连接信号槽
    // msgBox->addButton(button, QMessageBox::AcceptRole);
    
    // 对于标准按钮
    // 用户点击按钮,就能通过exec的返回值, 来知道用户点击了哪个按钮
    int result = messageBox->exec();
    if (result == QMessageBox::Ok) {} 
    else if (result == QMessageBox::Save) {} 
    else if (result == QMessageBox::Cancel) {}

2.颜色对话框 QColorDialog

  • 颜⾊对话框的功能是允许⽤⼾选择颜⾊,继承⾃QDialog

  • 常用方法

    • 创建对象的同时设置⽗对象

      cpp 复制代码
      QColorDialog(QWidget* parent = nullptr)
    • 创建对象的同时通过QColor对象设置默认颜⾊和⽗对象

      cpp 复制代码
      QColorDialog(const QColor& initial, QWidget *parent = nullptr)
    • 设置当前颜⾊对话框中的颜色

      cpp 复制代码
      void setCurrentColor(const QColor& color)
    • 获取当前颜⾊对话框

      cpp 复制代码
      QColor currentColor() const
    • 打开颜⾊选择对话框,并返回⼀个QColor对象

      • 弹出一个模态对话框,用户选择颜色之后,对话框关闭,返回值就是用户选择的值
      • 静态函数,可以直接调用
      cpp 复制代码
      QColor getColor(const QColor& initial = Qt::white, 
      				QWidget* parent = nullptr, 
      				const QString &title = QString(), 
      				QColorDialog::ColorDialogOptions options = 
      				ColorDialogOptions())
    • 打开颜⾊对话框

      cpp 复制代码
      void open(QObject* receiver, const char* member)
  • 示例

    cpp 复制代码
    QColor color = QColorDialog::getColor(QColor(0, 255, 0), this, "选择颜色");
    
    char style[1024] = { 0 };
    sprintf(style, "background-color: rgb(%d, %d, %d);", 
    		color.red(), color.green(), color.blue());
    		
    this->setStyleSheet(style);

3.⽂件对话框 QFileDialog

  • ⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件
  • 常用方法 :均为静态函数,不需要创建对象即可直接使用
    • 打开文件(一次只能打开一个文件)

      cpp 复制代码
      QString getOpenFileName(QWidget* parent = nullptr, 
      						const QString& caption = QString(), 
      						const QString& dir = QString(), 
      						const QString& filter = QString(), 
      						QString* selectedFilter = nullptr, 
      						QFileDialog::Options options = Options())
    • 打开多个⽂件(⼀次可以打开多个⽂件)

      cpp 复制代码
      QStringList getOpenFileNames(QWidget* parent = nullptr, 
      							 const QString& caption = QString(), 
      							 const QString& dir = QString(), 
      							 const QString& filter = QString(), 
      							 QString* selectedFilter = nullptr, 
      							 QFileDialog::Options options = Options())
    • 保存⽂件

      cpp 复制代码
      QString getSaveFileName(QWidget* parent = nullptr, 
      						const QString& caption = QString(), 
      						const QString& dir = QString(), 
      						const QString& filter = QString(), 
      						QString* selectedFilter = nullptr, 
      						QFileDialog::Options options = Options())
    • 参数说明

      • parent:父亲
      • caption:对话框标题
      • dir:默认打开的路径
      • filter:文件过滤器,限制文件格式
    • 以上方法均是获得了文件名字,打开/保存功能需要额外实现


4.字体对话框 QFontDialog

  • Qt中提供了预定义的字体对话框类QFontDialog,⽤于提供选择字体的对话框部件

  • 静态函数getFont()可以直接调用,不需要创建对象即可直接使用

  • 示例

    cpp 复制代码
    bool ok = false;
    QFont font = QFontDialog::getFont(&ok);
    
    qDebug() << font.family();
    qDebug() << font.pointSize();
    qDebug() << font.bold();
    qDebug() << font.italic();
    
    ui->pushButton->setFont(font);

5.输⼊对话框 QInputDialog

  • Qt中提供了预定义的输⼊对话框类QInputDialog,⽤于进⾏**临时数据输⼊**的场合

  • 常用方法 :均为静态函数,不需要创建对象即可直接使用

    • 双精度浮点型输⼊数据对话框

      cpp 复制代码
      double 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())
    • 整型输⼊数据对话框

      cpp 复制代码
      int 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())
    • 选择条⽬型输⼊数据框

      cpp 复制代码
      QString 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(), 
      				Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    • 参数说明

      • parent:父亲
      • title:对话框标题
      • label:对话框标签
      • items:可供选择的条目
  • 示例

    cpp 复制代码
    int result = QInputDialog::getInt(this, "整数输入对话框", "请输入一个整数: ");
    double result = QInputDialog::getDouble(this, 
    				"浮点数输入对话框", "请输入一个浮点数: ");
    
    QStringList items;
    items.push_back("111");
    items.push_back("222");
    items.push_back("333");
    items.push_back("444");
    QString item = QInputDialog::getItem(this, 
    				"条目输入对话框", "请输入条目: ", items);

6.进度条对话框 QProgressDialog

  • Qt提供了预定义的进度条对话框类QProgressDialog,⽤于显⽰当前进度信息和需要⽤⼾等待的场合

  • 示例

    cpp 复制代码
    // 把对话框的初始化逻辑放到了构造函数中.
    dialog = new QProgressDialog(this);
    dialog->setWindowTitle("进度条对话框");
    dialog->setLabelText("当前任务进度为: ");
    dialog->setRange(0, 100);
    dialog->setValue(20);
    
    connect(dialog, &QProgressDialog::canceled, this, [=]() {
        timer->stop();
    });
相关推荐
捕鲸叉3 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer3 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
青花瓷5 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
捕鲸叉6 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
徒步僧7 小时前
ThingsBoard规则链节点:RPC Call Reply节点详解
qt·microsoft·rpc
Dola_Pan7 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法
yanlou2337 小时前
KMP算法,next数组详解(c++)
开发语言·c++·kmp算法
小林熬夜学编程7 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法