Qt学习11:Dialog对话框操作总结

news2024/11/18 9:58:58

文章目录

  • QDialog
    • QDialogButtonBox
    • QMessageBox
    • QFileDialog
    • QFontDialog
    • QColorDialog
    • QInputDialog
    • QProgressDialog

文章首发于我的个人博客:欢迎大佬们来逛逛

QDialog

Qt中使用QDialog来实现对话框,QDialog继承自QWidget,对话框分为**三种**:

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

常用操作:

  • exec:显示模态对话框
  • open:显示半模态对话框
  • show:显示非模态对话框
  • setModal:设置模式,如果为true,则show显示的是模态对话框,如果为false,则show显示的是非模态对话框,默认为false
  • setSizeGripEnabled:设置显示右下角的拖动图标
// 构造函数
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

void setSizeGripEnabled(bool)   //设置启用大小手柄

[virtual slot] void open()                  // 半模态显示窗口
[virtual slot] int QDialog::exec();         // 模态显示窗口

// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 关闭对话框并将其结果代码设置为r。finished()信号将发出r;如果r是QDialog::Accepted 或 QDialog::Rejected,则还将分别发出accept()或Rejected()信号。
[virtual slot] void QDialog::done(int r);

常用信号:

void QDialog::accepted();
void QDialog::rejected();
void QDialog::finished(int result);示例

简单示例:

如下显示的是一个半模态对话框

void MainWindow::actionOnHalfDialog()
{
    //半模态对话框
    QDialog* dlg=new QDialog(this);
    dlg->open(); //不会阻塞程序,即可以执行下面的代码
    dlg->setAttribute(Qt::WA_DeleteOnClose); //关闭隐藏
    qInfo()<<__FUNCTION__;
}

QDialogButtonBox

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

简而言之就是在同一个对话框中添加按钮,类似于QButtonGroup。

常用函数:

  • addButton:添加按钮,注意其具有重载,一个是系统的标准按钮:StandardButtons ;另一个是具有一个**ButtonRole**的属性,即可以指定按钮的角色,然后可以根据不同的角色进行区分操作。
  • buttonRole:返回某个按钮的角色
  • buttons:返回一个QList,其包含所有的按钮。
void addButton(QAbstractButton *button, QDialogButtonBox::ButtonRole role)
QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role)
QPushButton *addButton(QDialogButtonBox::StandardButton button)
void setStandardButtons(QDialogButtonBox::StandardButtons buttons)

常用信号:

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

简单示例:

void MainWindow::actionOnNoDialog()
{
    //非模态对话框
    QDialog* dlg=new QDialog(this);
    dlg->setSizeGripEnabled(true); //设置抓取手柄

    //添加对话框按钮组
    auto* _dbbox=new QDialogButtonBox(dlg);
    //设置系统标准按钮
    _dbbox->addButton(QDialogButtonBox::StandardButton::Ok);
    _dbbox->addButton(QDialogButtonBox::StandardButton::Yes);
    _dbbox->addButton(QDialogButtonBox::StandardButton::No);
    //设置角色
    _dbbox->addButton("选择",QDialogButtonBox::ApplyRole);

    //系统标准按钮直接具有信号
    connect(_dbbox,&QDialogButtonBox::accepted,this,[=](){
        qInfo()<<"accepted";
    });
    connect(_dbbox,&QDialogButtonBox::rejected,this,[=](){
        qInfo()<<"rejected";
    });

    //自定义的角色需要获取这个角色然后进行判断操作
    connect(_dbbox,&QDialogButtonBox::clicked,this,[=](QAbstractButton* btn){
        if (_dbbox->buttonRole(btn)==QDialogButtonBox::ApplyRole){
            dlg->accept();
            dlg->hide();
        }
    });
    dlg->show();
    qInfo()<<__FUNCTION__;
}

在这里插入图片描述


QMessageBox

在这里插入图片描述

QMessageBox 对话框类是 QDialog 类的子类, 通过这个类可以显示一些简单的提示框.

用于展示警告、错误、问题等信息。

关于这个类我们只需要掌握一些静态方法的使用就可以了。

常用操作:

  • about:关于提示框
  • critical:严重警告提示框
  • information:提示框
  • question:问题提示框
  • warning:警告提示框
void MainWindow::testMessage()
{
    //QMessageBox::aboutQt(this);
    //QMessageBox::about(this,"关于","<a href='https://www.helloylh.com'>异性交友网站</a>");
    //QMessageBox::critical(this,"致命错误","请重启电脑",QMessageBox::StandardButton::Cancel);

    if (QMessageBox::StandardButton::Ok == QMessageBox::information(this,"提示","请重启电脑!")){
        qInfo()<<"OK!";
    }
    else{
        qInfo()<<"NO!";
    }

}

QFileDialog

在这里插入图片描述

QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。

关于这个类我们只需要掌握一些静态方法的使用就可以了。

常用操作:

  • getExistingDirectory:获取已存在的目录路径
  • getOpenFileName:获取打开的文件的名字
  • getOpenFileUrl:获取文件的url
  • getSaveFileName:获取保存文件的名字,可以用于文件的保存
void MainWindow::testQFileDialog()
{
    //获取当前存在的目录
    //auto Dir = QFileDialog::getExistingDirectory(this,"请选择文件","C:\\users");
    //qInfo()<<Dir;

    //获取url形式
    //auto DirUrl=QFileDialog::getExistingDirectoryUrl();
    //qInfo()<<DirUrl;

    //QString filename = QFileDialog::getOpenFileName(this,"选择文件","."
    //    ,"images (*.png *.jpg *.bmp);;Video(*.avi *.mp4 *.wav)");
    //qInfo()<<filename;

    QStringList filenames = QFileDialog::getOpenFileNames(this,"选择文件","./");
    qInfo()<<filenames;
}

注意我们可以为选择的文件添加过滤器

直接在其静态成员函数的:const QString &filter = QString() 进行指定即可

如:

  • images (*.png *.bmp *.jpg)
  • exe (*.exe)
  • vedio (*.avi *.mp4)

QFontDialog

在这里插入图片描述

设置字体的对话框。

QFont::QFont();
/*
参数:
    - family: 本地字库中的字体名, 通过 office 等文件软件可以查看
    - pointSize: 字体的字号
    - weight: 字体的粗细, 有效范围为 0 ~ 99
    - italic: 字体是否倾斜显示, 默认不倾斜
*/
QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);

// 设置字体
void QFont::setFamily(const QString &family);
// 根据字号设置字体大小
void QFont::setPointSize(int pointSize);
// 根据像素设置字体大小
void QFont::setPixelSize(int pixelSize);
// 设置字体的粗细程度, 有效范围: 0 ~ 99
void QFont::setWeight(int weight);
// 设置字体是否加粗显示
void QFont::setBold(bool enable);
// 设置字体是否要倾斜显示
void QFont::setItalic(bool enable);

// 获取字体相关属性(一般规律: 去掉设置函数的 set 就是获取相关属性对应的函数名)
QString QFont::family() const;
bool QFont::italic() const;
int QFont::pixelSize() const;
int QFont::pointSize() const;
bool QFont::bold() const;
int QFont::weight() const;

静态函数:

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

[static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);窗口字体的设置

示例如下:

我们为一个Label设置字体。

void MainWindow::testFontDialog()
{
    lab=new QLabel(this);
    lab->setText("测试字体 helloylh");
    lab->setGeometry(200,200,200,200);
    auto btn=new QPushButton("选择字体",this);
    btn->setGeometry(10,50,80,30);
    connect(btn,&QPushButton::clicked,this,[=](){
        bool ok=false;
        auto font = QFontDialog::getFont(&ok,this);
        lab->setFont(font);
    });

}

QColorDialog

在这里插入图片描述

配合字体选择框一起使用,可以指定颜色。它是一个颜色选择框。

// 构造函数
QColor::QColor(Qt::GlobalColor color);
QColor::QColor(int r, int g, int b, int a = ...);
QColor::QColor();

// 参数 red, green, blue, alpha 取值范围是 0-255
void QColor::setRed(int red);
void QColor::setGreen(int green);
void QColor::setBlue(int blue);
void QColor::setAlpha(int alpha);
void QColor::setRgb(int r, int g, int b, int a = 255);

int QColor::red() const;
int QColor::green() const;
int QColor::blue() const;
int QColor::alpha() const;
void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;

静态函数:

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

测试代码:

label设置颜色。

void MainWindow::testQColorDialog()
{
    auto btn=new QPushButton("选择颜色",this);
    btn->setGeometry(80,50,80,30);
    connect(btn,&QPushButton::clicked,this,[=](){
        auto color=QColorDialog::getColor();
        lab->setStyleSheet(QString("color: rgb(%1,%2,%3)").arg(color.red()).arg(color.green()).arg(color.blue()));
    });
}

QInputDialog

[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());

[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());

[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)

[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);

[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);

QProgressDialog

// 构造函数
/*
参数:
    - labelText: 对话框中显示的提示信息
    - cancelButtonText: 取消按钮上显示的文本信息
    - minimum: 进度条最小值
    - maximum: 进度条最大值
    - parent: 当前窗口的父对象
    - f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
*/
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 设置取消按钮显示的文本信息
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);

// 公共成员函数和槽函数
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);

// 得到进度条最小值
int QProgressDialog::minimum() const;
// 设置进度条最小值
void QProgressDialog::setMinimum(int minimum);

// 得到进度条最大值
int QProgressDialog::maximum() const;
// 设置进度条最大值
void QProgressDialog::setMaximum(int maximum);

// 设置进度条范围(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);

// 得到进度条当前的值
int QProgressDialog::value() const;
// 设置进度条当前的值
void QProgressDialog::setValue(int progress);

bool QProgressDialog::autoReset() const;
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。
void QProgressDialog::setAutoReset(bool reset);

bool QProgressDialog::autoClose() const;
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。
void QProgressDialog::setAutoClose(bool close);

// 判断用户是否按下了取消键, 按下了返回true, 否则返回false
bool wasCanceled() const;

// 重置进度条
// 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
[slot] void QProgressDialog::cancel();
// 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
[slot] void QProgressDialog::reset();

// 信号
// 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
[signal] void QProgressDialog::canceled();

// 设置窗口的显示状态(模态, 非模态)
/*
参数:
    Qt::NonModal  -> 非模态
    Qt::WindowModal -> 模态, 阻塞父窗口
    Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
*/
void QWidget::setWindowModality(Qt::WindowModality windowModality);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尿的唰唰和笑的哈哈

很多人说看不懂&#xff0c;不知道哪个是真哪个是假。我说都是真的。不同心不同理。全球并不同炎凉。窦唯有句歌词&#xff1a;天堂地狱皆在人间。何勇有句歌词&#xff1a;有人减肥&#xff0c;有人饿死没粮。&#xff08;1&#xff09;产业我过去说过顶天立地。立地&#xff…

专利背后的故事 | 一种异常信息检测方法和装置

Part01 专利发明的初衷 用户和实体行为分析&#xff08;UEBA&#xff09;在2018年入选Gartner为安全团队建议的十大新项目。UEBA近几年一直受到国内安全厂商的热捧。但是对于UEBA的理解&#xff0c;以及具体落实的产品方案&#xff0c;各厂商虽然明显不同&#xff0c;但在对账…

Go应用性能优化的8个最佳实践,快速提升资源利用效率!

作者&#xff5c;Ifedayo Adesiyan 翻译&#xff5c;Seal软件 链接&#xff5c;https://earthly.dev/blog/optimize-golang-for-kubernetes/ 优化服务器负载对于确保运行在 Kubernetes 上的 Golang 应用程序的高性能和可扩展性至关重要。随着企业越来越多地采用容器化的方式和 …

HOOPS Native Platform 2023 cRACK

将高级 3D 工作流程添加到桌面和移动应用程序 HOOPS 原生平台集成了三种用于桌面和移动应用程序开发的先进 HOOPS 技术&#xff0c;包括高性能图形 SDK、CAD 数据访问工具包和 3D 数据发布 API。 ​ ​ 构建 3D 原生应用 借助桌面和移动设备上的 HOOPS 原生平台&#xff0c;快…

一个初级程序员该在哪接项目练手?

作为一个初级程序员&#xff0c;想要通过兼职接单赚钱&#xff0c;离不开项目练手。但不得不说&#xff0c;初级程序员想要通过接私活获取收入还是相对比较困难的&#xff0c;如果对接私活比较感兴趣的朋友&#xff0c;可以参考这条路径&#xff1a; 在GitHub上学习大佬的项目…

【WebLogic】WebLogic 10.3.6.0部署应用包后报错

问题背景&#xff1a; WebLogic 10.3.6.0部署应用包后出现报错【posted content exceeds max post size】&#xff0c;此报错会导致应用部署的目标服务实例无法成功启动。 报错信息截图如下所示&#xff1a; 根据报错信息&#xff0c;查询相关MOS文档&#xff0c;发现问题原因是…

网络能成为AI加速器吗

网络能成为AI加速器吗 摘要 人工神经网络&#xff08;NNs&#xff09;在许多服务和应用中扮演越来越重要的角色&#xff0c;并对计算基础设施的工作负载做出了重要贡献。在用于延迟敏感的服务时&#xff0c;NNs通常由CPU处理&#xff0c;因为使用外部专用硬件加速器会效率低下…

Magisk hide/Denylist 核心原理分析 ROOT隐藏的实现浅论

前言 当手机安装magisk后&#xff0c;全局的挂载空间会受到变更&#xff0c;magisk给我们挂载上了一个su二进制&#xff0c;这就是我们能够访问到su命令的原因 无论是Magisk hide还是Denylist&#xff0c;我们都可以将它们的工作分成两个部分&#xff0c;第一个部分是如何监控…

vue2中引入天地图及相关配置

前言 项目中需要引入特殊用途的地图&#xff0c;发现天地图比高德地图、百度地图要更符合需求&#xff0c;于是看了看天地图。 正文 vue2项目中如何引入天地图并对相关的配置进行修改使用呢&#xff1f;官方给的4.0版本的使用说明。 引入&#xff1a; 进入到public/index.html中…

使用逻辑回归LogisticRegression来对我们自己的数据excel或者csv数据进行分类--------python程序代码,可直接运行

文章目录 一、逻辑回归LogisticRegression是什么&#xff1f;二、逻辑回归LogisticRegression进行分类的具体步骤二、逻辑回归LogisticRegression进行二分类的详细代码三、逻辑回归LogisticRegression的广泛用途总结 一、逻辑回归LogisticRegression是什么&#xff1f; 逻辑回…

小白白也能学会的 PyQt 教程 —— QRadioButton 介绍以及基本使用

文章目录 一、QRadioButton快速入门1. QRadioButton简介2. QRadioButton快速上手 二、响应单选按钮点击事件1、信号和槽机制&#xff1a;2、创建槽函数来响应单选按钮点击&#xff1a;3、示例&#xff1a;执行特定操作或显示相关内容&#xff1a; 三、单选按钮的常用功能和属性…

三维形体投影面积

&#x1f388; 算法并不一定都是很难的题目&#xff0c;也有很多只是一些代码技巧&#xff0c;多进行一些算法题目的练习&#xff0c;可以帮助我们开阔解题思路&#xff0c;提升我们的逻辑思维能力&#xff0c;也可以将一些算法思维结合到业务代码的编写思考中。简而言之&#…

petalinux 生成SDK报错排除

AAA: 在项目文件下新建Qt5文件夹文件夹内新建文件并且设置对应参数 文件夹路径&#xff1a; project-spec/meta-user/recipes-qt/qt5 新建文件 vim ./qt5/qt3d_%.bbappend vim ./qt5/qtquickcontrols2_%.bbappend vim ./qt5/qtserialbus_%.bbappend 文件内容 qt3d_%.bbap…

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常

我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 出现这个异常的原因在于 BigDecimal 是不可变的、任意精度的有符号十进制数&#xff0c;所以可以做精确计算。但在除法中&#xff0c;准确的商…

ernie-layout笔记

1: 识别文档中文字以及准确的对这些文字排序是必须的一步骤 采用 OCR技术识别文字以及对应的图像坐标信息&#xff0c;光栅扫描以生成输入序列按照从左到右&#xff0c;从上到下的顺序&#xff1b;但是以上方法针对复杂的结构就会出现问题&#xff1b;因此文章使用了Document-P…

Spring源码核心剖析 | 京东云技术团队

前言 SpringAOP作为Spring最核心的能力之一&#xff0c;其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能&#xff0c;而是一种思想&#xff0c;一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中&#xff0c;使其作为bean的一种&#xff…

算法程序设计 之 循环赛日程表(2/8)

一、实验目的&#xff1a; 理解并掌握分治算法的基本思想和设计步骤。 二、实验内容 设有n个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表&#xff1a; &#xff08;1&#xff09;每个选手必须与其他n-1个选手各赛一次&#xff1b; &#xff08;2&#xff0…

HOOPS Web SDK 2023 Crack

在 HOOPS WEB 平台上释放 3D 的力量 HOOPS Web 平台加速 Web 应用程序开发&#xff0c;提供先进的 3D Web 可视化、准确快速的 CAD 数据访问和 3D 数据发布软件开发工具包 &#xff08;SDK&#xff09;。 构建 3D WEB 应用程序 借助 HOOPS Web 平台&#xff0c;快速构建适用于…

值得收藏的 10个 Android 手机恢复丢失文件的工具榜单

尽管我们尽可能避免这种情况&#xff0c;但有时我们还是会不小心删除 Android 设备上的重要文件。无论是照片、视频、文档还是任何其他形式的数据&#xff0c;数据丢失都会带来巨大的痛苦。不幸的是&#xff0c;Android 设备没有内置恢复工具。但是&#xff0c;有一些第三方恢复…

里程碑式突破!关键的薛定谔猫编码能带来更好的量子比特

​ 薛定谔的猫编码插图&#xff08;图片来源&#xff1a;网络&#xff09; 来自瑞士洛桑联邦理工学院&#xff08;EPFL&#xff09;的科学家提出了一种突破性的量子计算容错方案&#xff0c;称为“关键的薛定谔猫编码”。这种新颖的系统在混合状态下运行&#xff0c;具有强大的…