• Qt——对话框详解


    QDialog

    Qt中使用QDialog来实现对话框,QDialog继承自QWidget,对话框分为两种,一种是模态对话框、 另一种是非模态对话框。即阻塞和非阻塞对话框,而模态对话框又有两种:应用程序级别的和窗口级别的,分别指完成对话框之前阻塞整个应用和阻塞关联窗口。exec() 和 open() 分别为应用程序级别和窗口级别的模态对话框,show()则为非模态对话框。

    • 模态对话框:在弹出模态对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭
    • 半模态对话框:又叫做无模式对话框,即弹出非模态对话框时,用户仍然可以对其他窗口进行操作,不会因为这个对话框未关闭就不能操作其他窗口。
    • 非模态对话框:半模态对话框区别于模态与非模态对话框,或者说是介于两者之间,也就是说半模态对话框会阻塞窗口的响应,但是不会影响后续代码的执行。

    CSDN QT开发技术文推荐:Qt开发必备技术栈学习路线和资料

    1. // 构造函数
    2. QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
    3. void setSizeGripEnabled(bool) //设置启用大小手柄
    4. [virtual slot] void open() // 半模态显示窗口
    5. [virtual slot] int QDialog::exec(); // 模态显示窗口
    6. // 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted
    7. [virtual slot] void QDialog::accept();
    8. // 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected
    9. [virtual slot] void QDialog::reject();
    10. // 关闭对话框并将其结果代码设置为r。finished()信号将发出r;如果r是QDialog::Accepted 或 QDialog::Rejected,则还将分别发出accept()或Rejected()信号。
    11. [virtual slot] void QDialog::done(int r);

    signals 

    1. void QDialog::accepted();
    2. void QDialog::rejected();
    3. void QDialog::finished(int result);

    示例

    1. dialog->show();
    2. dialog->exec();
    3. dialog->open();
    4. qDebug()<<"大老虎,嗷嗷嗷~";
    5. connect(dialog,&QDialog::finished,this,[](int res){qDebug()<<QDialog::DialogCode(res);});
    6. connect(dialog,&QDialog::rejected,this,[](){qDebug()<<"rejected";});
    7. connect(dialog,&QDialog::accepted,this,[](){qDebug()<<"accept";});

    QDialogButtonBox

    QDialogButtongBox类是一个包含很多按钮的控件,在对话框中有多个按钮需要分组排列的按钮时,可以使用QDialogButtongBox类。

    • 添加按钮
    1. void addButton(QAbstractButton *button, QDialogButtonBox::ButtonRole role)
    2. QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role)
    3. QPushButton *addButton(QDialogButtonBox::StandardButton button)
    4. void setStandardButtons(QDialogButtonBox::StandardButtons buttons)

    示例:

    1. auto *yesBtn =  dialogBtnBox->addButton(QDialogButtonBox::StandardButton::Yes);
    2. yesBtn->setText("确定");
    3. dialogBtnBox->addButton(QDialogButtonBox::StandardButton::Close)->setText("关闭");    
    4. dialogBtnBox->addButton("查看帮助",QDialogButtonBox::ButtonRole::HelpRole);

    sngnals

    1. void accepted() //当单击按钮框中的按钮时将发出此信号,只要该按钮是用AcceptRole或YesRole定义的。
    2. void clicked(QAbstractButton *button) //当单击按钮框中的按钮时,将发出此信号,具体按钮由button指定
    3. void helpRequested() //当按钮框中的按钮被单击时,这个信号就会发出,只要它是用HelpRole定义的。
    4. void rejected() //当单击按钮框中的按钮时,此信号将被触发,只要它是用RejectRole或NoRole定义的

    示例:

    1. //dialog 为按钮组所在的对话框
    2. connect(dialogBtnBox,&QDialogButtonBox::accepted,this,[=](){qDebug()<<"btnaccepted";
    3.                                                            dialog->accept();});
    4. connect(dialogBtnBox,&QDialogButtonBox::clicked,this,[=](){qDebug()<<"clicked";});
    5. connect(dialogBtnBox,&QDialogButtonBox::rejected,this,[=](){qDebug()<<"rejected";
    6.                                                                    dialog->reject();});
    7. connect(dialogBtnBox,&QDialogButtonBox::helpRequested,this,[=](){qDebug()<<"helpRequested";});

    2.1 QMessageBox

    QMessageBox 对话框类是 QDialog 类的子类, 通过这个类可以显示一些简单的提示框, 用于展示警告、错误、问题等信息。关于这个类我们只需要掌握一些静态方法的使用就可以了。

     

    1. // 显示一个模态对话框, 将参数 text 的信息展示到窗口中
    2. [static] void QMessageBox::about(QWidget *parent, const QString &title, const QString &text);
    3. /*
    4. 参数:
    5. - parent: 对话框窗口的父窗口
    6. - title: 对话框窗口的标题
    7. - text: 对话框窗口中显示的提示信息
    8. - buttons: 对话框窗口中显示的按钮(一个或多个)
    9. - defaultButton
    10.    1. defaultButton指定按下Enter键时使用的按钮。
    11.    2. defaultButton必须引用在参数 buttons 中给定的按钮。
    12.    3. 如果defaultButton是QMessageBox::NoButton, QMessageBox会自动选择一个合适的默认值。
    13. */
    14. //显示带有标题标题和文本文本的简单关于框。
    15. void about(QWidget *parent, const QString &title, const QString &text)
    16. void aboutQt(QWidget *parent, const QString &title = QString())
    17. // 显示一个信息模态对话框
    18. [static] QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);
    19. // 显示一个错误模态对话框
    20. [static] QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);
    21. // 显示一个问题模态对话框
    22. [static] QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton);
    23. // 显示一个警告模态对话框
    24. [static] QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

     

    示例

    1. QMessageBox::about(this,"关于Maye","我叫<font style=\"color:red\">严炯强font>,今年十岁了。是一个内向而又聪明的女孩。\
    2. <br>我的爱好有:运动、画画、看书、做游戏、科学课和语文课。\
    3. <br>去年,我一共得了两张奖状。一张是运动小健将的奖状,另一张是百里路小学冬锻跳绳比赛二年级段女子组第一名的奖状。我明白:只要努力,必须会有收获的。\
    4. <br>每次我考到一百分的时候,爸爸妈妈就会奖励我,我也十分高兴。有一次我考了一百分,妈妈买了一个有轮子的书包给我。我考了一百分,爸爸总会带我去吃肯德基。\
    5. <br>所以,在新学期里,我要更加努力,再创佳绩!\
    6. <br><a href=\"www.bilibili.com\">我的个人主页a>");

     

    2.2 QFileDialog

    QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。关于这个类我们只需要掌握一些静态方法的使用就可以了。

     

    1. /*
    2. 通用参数:
    3. - parent: 当前对话框窗口的父对象也就是父窗口
    4. - caption: 当前对话框窗口的标题
    5. - dir: 当前对话框窗口打开的默认目录
    6. - options: 当前对话框窗口的一些可选项,枚举类型, 一般不需要进行设置, 使用默认值即可
    7. - filter: 过滤器, 在对话框中只显示满足条件的文件, 可以指定多个过滤器, 使用 ;; 分隔
    8. - 样式举例:
    9. - Images (*.png *.jpg)
    10. - Images (*.png *.jpg);;Text files (*.txt)
    11. - selectedFilter: 如果指定了多个过滤器, 通过该参数指定默认使用哪一个, 不指定默认使用第一个过滤器
    12. */
    13. // 打开一个目录, 得到这个目录的绝对路径
    14. [static] QString QFileDialog::getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly);
    15. // 打开一个文件, 得到这个文件的绝对路径
    16. [static] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());
    17. // 打开多个文件, 得到这多个文件的绝对路径
    18. [static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());
    19. // 打开一个目录, 使用这个目录来保存指定的文件
    20. [static] QString QFileDialog::getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

     CSDN QT开发技术文推荐:Qt开发必备技术栈学习路线和资料

    2.3 QFontDialog

    • QFont 字体类

    1. QFont::QFont();
    2. /*
    3. 参数:
    4. - family: 本地字库中的字体名, 通过 office 等文件软件可以查看
    5. - pointSize: 字体的字号
    6. - weight: 字体的粗细, 有效范围为 0 ~ 99
    7. - italic: 字体是否倾斜显示, 默认不倾斜
    8. */
    9. QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);
    10. // 设置字体
    11. void QFont::setFamily(const QString &family);
    12. // 根据字号设置字体大小
    13. void QFont::setPointSize(int pointSize);
    14. // 根据像素设置字体大小
    15. void QFont::setPixelSize(int pixelSize);
    16. // 设置字体的粗细程度, 有效范围: 0 ~ 99
    17. void QFont::setWeight(int weight);
    18. // 设置字体是否加粗显示
    19. void QFont::setBold(bool enable);
    20. // 设置字体是否要倾斜显示
    21. void QFont::setItalic(bool enable);
    22. // 获取字体相关属性(一般规律: 去掉设置函数的 set 就是获取相关属性对应的函数名)
    23. QString QFont::family() const;
    24. bool QFont::italic() const;
    25. int QFont::pixelSize() const;
    26. int QFont::pointSize() const;
    27. bool QFont::bold() const;
    28. int QFont::weight() const;

    QFontDialog类的静态API

    1. [static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());
    2. [static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);

    窗口字体的设置

    1. // QWidget 类
    2. // 得到当前窗口使用的字体
    3. const QWidget::QFont& font() const;
    4. // 给当前窗口设置字体, 只对当前窗口类生效
    5. void QWidget::setFont(const QFont &);
    6. // QApplication 类
    7. // 得到当前应用程序对象使用的字体
    8. [static] QFont QApplication::font();
    9. // 给当前应用程序对象设置字体, 作用于当前应用程序的所有窗口
    10. [static] void QApplication::setFont(const QFont &font, const char *className = nullptr);

    2.4 QColorDialog

    • 颜色类 QColor

    1. // 构造函数
    2. QColor::QColor(Qt::GlobalColor color);
    3. QColor::QColor(int r, int g, int b, int a = ...);
    4. QColor::QColor();
    5. // 参数 red, green, blue, alpha 取值范围是 0-255
    6. void QColor::setRed(int red);
    7. void QColor::setGreen(int green);
    8. void QColor::setBlue(int blue);
    9. void QColor::setAlpha(int alpha);
    10. void QColor::setRgb(int r, int g, int b, int a = 255);
    11. int QColor::red() const;
    12. int QColor::green() const;
    13. int QColor::blue() const;
    14. int QColor::alpha() const;
    15. void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;

    QFontDialog类的静态API

    1. // 弹出颜色选择对话框, 并返回选中的颜色信息
    2. [static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());

    2.5 QInputDialog

    1. [static] 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());
    2. [static] 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());
    3. [static] 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(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    4. [static] QString QInputDialog::getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
    5. [static] 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(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

    2.6 QProgressDialog

    1. // 构造函数
    2. /*
    3. 参数:
    4. - labelText: 对话框中显示的提示信息
    5. - cancelButtonText: 取消按钮上显示的文本信息
    6. - minimum: 进度条最小值
    7. - maximum: 进度条最大值
    8. - parent: 当前窗口的父对象
    9. - f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
    10. */
    11. QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
    12. QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
    13. // 设置取消按钮显示的文本信息
    14. [slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);
    15. // 公共成员函数和槽函数
    16. QString QProgressDialog::labelText() const;
    17. void QProgressDialog::setLabelText(const QString &text);
    18. // 得到进度条最小值
    19. int QProgressDialog::minimum() const;
    20. // 设置进度条最小值
    21. void QProgressDialog::setMinimum(int minimum);
    22. // 得到进度条最大值
    23. int QProgressDialog::maximum() const;
    24. // 设置进度条最大值
    25. void QProgressDialog::setMaximum(int maximum);
    26. // 设置进度条范围(最大和最小值)
    27. [slot] void QProgressDialog::setRange(int minimum, int maximum);
    28. // 得到进度条当前的值
    29. int QProgressDialog::value() const;
    30. // 设置进度条当前的值
    31. void QProgressDialog::setValue(int progress);
    32. bool QProgressDialog::autoReset() const;
    33. //value() = maximum()时,进程对话框是否调用reset(),此属性默认为true
    34. void QProgressDialog::setAutoReset(bool reset);
    35. bool QProgressDialog::autoClose() const;
    36. //value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true
    37. void QProgressDialog::setAutoClose(bool close);
    38. // 判断用户是否按下了取消键, 按下了返回true, 否则返回false
    39. bool wasCanceled() const;
    40. // 重置进度条
    41. // 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
    42. [slot] void QProgressDialog::cancel();
    43. // 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
    44. [slot] void QProgressDialog::reset();
    45. // 信号
    46. // 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
    47. [signal] void QProgressDialog::canceled();
    48. // 设置窗口的显示状态(模态, 非模态)
    49. /*
    50. 参数:
    51. Qt::NonModal -> 非模态
    52. Qt::WindowModal -> 模态, 阻塞父窗口
    53. Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
    54. */
    55. void QWidget::setWindowModality(Qt::WindowModality windowModality);

    本文福利, 免费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 相关阅读:
    二、【VUE-CLI】分析脚手架 render
    通信原理板块——信源信宿信息熵、离散信道信息传输速率和信道容量计算
    (Python高级编程)第一章:Python面向对象深刻认识
    【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】
    首版次高端软件申报条件和好处
    使用llama.cpp实现LLM大模型的格式转换、量化、推理、部署
    dflow入门4——recurse&reuse&conditional
    利用机器学习重构视频中的人脸
    HTML做一个抗疫逆行者感动人物页面(纯html代码)
    软件设计模式白话文系列(十一)享元模式
  • 原文地址:https://blog.csdn.net/m0_73443478/article/details/127795164