qt5入门-状态栏+几种标准对话框

参考:
Qt 标准对话框之 QFileDialog_w3cschool
https://www.w3cschool.cn/learnroadqt/vsd51j42.html

本地环境:
win10专业版,64位


状态栏

QMainWindow类里有一个statusBar(),如果不存在状态栏,这个函数会自动创建一个;如果存在的话会返回指向状态栏的指针。如果要替换掉已经存在的状态栏,需要使用setStatusBar()。

QStatusBar继承了QWidget,可以添加其他QWidget。

状态栏显示三种信息:

  • 临时信息:很快会消失的,比如启动程序后的提示。可以使用QStatusBar.showMessage()实现
  • 一般信息:比如显示页码
  • 永久信息:一直不会消失的,比如提示用户大写锁定
// mainwindow.h
private:
    ...
    QLabel *statusLabel;

// mainwindow.cpp
    // 添加提示label
    statusLabel = new QLabel;
    statusLabel->setMinimumSize(statusLabel->sizeHint());
    statusLabel->setAlignment(Qt::AlignHCenter); // 水平居中
    statusBar()->addWidget(statusLabel); // 加入statusBar

在这里插入图片描述
但是没有状态信息的时候状态栏有一条竖线。这是它的边框,可以通过下面的语句去掉

statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}"));

在这里插入图片描述
去掉后:
在这里插入图片描述
右下角那几个点(大小控制点)可以用下面的代码消除:

statusBar()->setSizeGripEnabled(false);

QFileDialog

标准对话框就是Qt内置的一些对话框,比如选择文件的对话框。

下面的open是槽函数,跟openAction相连:connect(openAction, SIGNAL(triggered()), this, SLOT(open()));

void MainWindow::open() {
    // 参数:parent, 标题,目录,过滤格式
    // 多个过滤器之间用;;分割
    QString path = QFileDialog::getOpenFileName(this, tr("打开图片"), ".", tr("Image Files(*.jpg *.png)"));
    if(path.length() == 0) {
    	// 没有选择任何文件,直接关闭的情况
        QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
    } else {
        QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
    }
}

点击后:
在这里插入图片描述
另一种写法:

void MainWindow::open() {
    QFileDialog *fileDialog = new QFileDialog(this);
    fileDialog->setWindowTitle(tr("打开图片"));
    fileDialog->setDirectory(".");
    fileDialog->setNameFilters(QStringList({tr("所有图片(*.jpg *.png)"), tr("文本(*.txt)")}));
    // fileDialog->setNameFilters(QStringList(tr("所有图片(*.jpg *.png)")));
    if(fileDialog->exec() == QDialog::Accepted) {
        QString path = fileDialog->selectedFiles()[0];
        QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
    } else {
        QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
    }
}

在这里插入图片描述

说明:

  • 第一种写法虽然短,但是是调用系统资源的,所以在windows和macos是不一样的;第二种分成几行,条理清楚一点,也不用记参数,而且始终是Qt自己绘制的对话框。
  • 可以使用多个过滤器,展示的顺序与书写顺序一致。

QColorDialog

效果:
在这里插入图片描述
选择后点击ok,可以看到:
在这里插入图片描述

void MainWindow::open() {
    // 参数:默认颜色, parent
    QColor color = QColorDialog::getColor(Qt::white, this);
    // 格式化字符串,%1指第一个参数,QString::number()是将一个数字转成QString类型
    QString msg = QString("r: %1, g: %2, b: %3").arg(QString::number(color.red()),
                                                     QString::number(color.green()),
                                                     QString::number(color.blue()));
    QMessageBox::information(NULL, "Selected color", msg);
    
    // 设置自定义颜色, 第一个参数是index,第二个是rgb值
    //QColorDialog::setCustomColor(0, QRgb(0x0000FF));
    // 设置自定义的颜色对话框,参数:默认颜色,parent,标题,选项(是否显示Alpha值?选项可以用OR操作)
    //QColorDialog::getColor(const QColor &initial, QWidget *parent, const QString &title, ColorDialogOptions options = 0);
}

QMessageBox

  • 文本内容支持HTML标签,所以可以指定特殊格式
  • about对话框只有一个按钮
  • Qt内置的图片处理格式是png,如果使用jpeg格式的话,需要使用插件
  • 标准对话框和自定义对话框的交互是不一样的,前者使用返回的QMessageBox::StandardButton对象做判断,后者使用返回对象的exec()做判断
    在这里插入图片描述
    对应代码:
void MainWindow::open() {

    // information,默认yes
    QMessageBox::information(NULL, "info", "content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    // forbid
    QMessageBox::critical(NULL, "no", "content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    // warning
    QMessageBox::warning(NULL, "warning", "content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    // question
    QMessageBox::question(NULL, "question", "content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    // about
    QMessageBox::about(NULL, "about", "Hello <font color='red'>world</font>!");

    // 交互
    //QMessageBox::StandardButton rb = QMessageBox::question(NULL, "question", "content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    //if (rb == QMessageBox::Yes){...}

    // diy
    QMessageBox msg(QMessageBox::NoIcon, "title", "Content with img.");
    // 也是放到res.qrc中,用添加文件的方式
    msg.setIconPixmap(QPixmap(":/link.png"));
    msg.exec();
    // 交互
    //if (msg.exec() == QMessageBox::Yes) {...}
}

QInputDialog

效果:
在这里插入图片描述
点击ok后控制台输出文本输入框里的内容。默认的字符串是default,如果不修改就输出default。

代码:

void MainWindow::open(){
    bool isOK;
    // Normal是输入模式,取值是QLineEdit::EchoMode,默认是Normal;如果是password就是密码显示
    // isOK是可选的,后面还有个参数Qt::WindowFlags变量,指定对话框样式(数字)
    // 此外还有getInterger,getDouble,getItem函数
    QString text = QInputDialog::getText(NULL, "title", "content", QLineEdit::Normal, "default", &isOK);
    if (isOK) {
        std::cout << text.toStdString() << std::endl;
    }
}

关于指定对话框样式:下面可以增加最大最小化按钮。其他的样式,参考:
QT之WindowFlags属性详解-CSDN博客
https://blog.csdn.net/xuebing1995/article/details/96478891

QString text = QInputDialog::getText(NULL, "title", "content", QLineEdit::Normal, "default", &isOK, windowFlags()|Qt::WindowMaximizeButtonHint);

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统安全①iptables防火墙

目录 一.iptables防火墙概述 1.netfilter与iptables &#xff08;1&#xff09;netfilter &#xff08;2&#xff09;iptables 2.iptables防火墙默认规则表、链结构 二.iptables四表五链 1.四表 2.五链 3.总结 三.iptables的配置 1.安装 2.配置方法 &#xff08;1…

MoonBit月兔新增多行字符串支持

MoonBit 更新 1. 新增多行字符串支持 每行需要以#|开头。多行字符串每行之间允许断开、插入注释&#xff0c;字符串内不支持转义和字符串插值。 2. 新增函数式的loop循环 其中continue 只允许出现在尾递归调用的位置&#xff0c;loop内允许使用break提前返回一个值。 3. …

1-3年的职业规划—张明的软件工程师之路

张明是一名即将毕业的计算机专业的大学生&#xff0c;他希望在未来的1-3年内成为一名软件工程师。为了实现这个目标&#xff0c;他决定使用进度猫来帮助自己规划和管理职业发展。 首先&#xff0c;张明在进度猫中创建了一个名为“软件工程师之路”的项目&#xff0c;并设定了…

springboot果蔬配送商城

技术架构&#xff1a; java mysql bootstrap jquery mybatis springboot 有需要该项目的小伙伴可以私信我你的Q。 功能介绍&#xff1a; 系统基于Java技术进行开发&#xff0c;后台数据库使用MySQL&#xff0c;在Windows环境下使用idea开发工具进行开发&#xff0c;主…

自学Java的第十九天

一&#xff0c;每日收获 1.排序 2.冒泡排序法 3.查找 4.多维数组-二维数组 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难 一&#xff0c;每日收获 1.排序 ① 排序的介绍 排序是将多个数据&#xff0c;依指定的顺序进行排列的过程。 ② 排序的…

【ArcGIS微课1000例】0102:面状要素空洞填充

文章目录 一、实验描述二、实验数据三、实验步骤1. 手动补全空洞2. 批量补全空洞四、注意事项一、实验描述 在对地理数据进行编辑时,时常会遇到面数据中存在个别或大量的空洞,考虑实际情况中空洞的数量多少、分布情况,填充空洞区域可以采用逐个填充的方式,也可以采用快速大…

2017 年全国职业院校技能大赛高职组“信息安全管理与评估”赛项任务书(笔记解析)

1. 网络拓扑图 2. IP 地址规划表 3. 设备初始化信息 阶段一 任务1:网络平台搭建 1 根据网络拓扑图所示,按照 IP 地址参数表,对 WAF 的名称、各接口 IP 地址进 行配置。 主机名称 模式选择:透明模式 IP 地址:匹配参数表 WAF IP 地址 子网掩码 网口列表: eth0 和 eth1 2…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

Python 连接 mysql 详解(mysql-connector-python)

文章目录 1 概述1.1 第三方库&#xff1a;mysql-connector-python1.2 可视化工具&#xff1a;navicat1.3 创建测试数据库 2 连接 mysql 数据库2.1 创建一个连接2.2 捕获连接异常2.3 从配置文件中获取连接信息 3 执行 sql 语句3.1 插入、更新、删除3.2 查询 1 概述 1.1 第三方库…

Photoshop 2023下载安装教程,免费直装版,2步搞定安装,附安装包

准备工作&#xff1a; 1、提前准备好photoshop 2023安装包 没有的可以参考下面方式获取 2、系统要求Windows 10 及以上 安装步骤 1.找到下载好的安装包&#xff0c;直接双击解压 2.双击运行【Set-up.exe】文件 3.点击文件夹图标&#xff0c;更改安装位置 4.点击【继续】&a…

从一到无穷大 #22 基于对象存储执行OLAP分析的学术or工程经验,我们可以从中学习到什么?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言以AWS S3为例的对象存储基本特征成本时延吞吐量最优请求大小Model for Cloud Sto…

Visual Studio使用Git忽略不想上传到远程仓库的文件

前言 作为一个.NET开发者而言&#xff0c;有着宇宙最强IDE&#xff1a;Visual Studio加持&#xff0c;让我们的开发效率得到了更好的提升。我们不需要担心环境变量的配置和其他代码管理工具&#xff0c;因为Visual Studio有着众多的拓展工具。废话不多说&#xff0c;直接进入正…

机器学习 | 基于网格搜索的SVM超参数调节

机器学习模型被定义为一个数学模型&#xff0c;其中包含许多需要从数据中学习的参数。然而&#xff0c;有一些参数&#xff0c;称为超参数&#xff0c;这些参数不能直接学习。它们通常是由人类在实际训练开始前根据直觉或经验和试验选择的。这些参数通过提高模型的性能&#xf…

Deepin系统安装x11vnc远程桌面工具实现无公网ip访问本地桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具&#xff0c;它的原理是通过X Window系统的协议来实现远程桌面的展…

2018年苏州大学837复试机试C/C++

2018年苏州大学复试机试 要求 要求用C/C编程&#xff1b;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名&#xff08;中文&#xff09;&#xff1b;考试完毕后&#xff0c;将所编写的文件放在上述文件中。 第一题&#xff08;20分&…

CTFshow web(php特性 105-108)

web105 <?php /* # -*- coding: utf-8 -*- # Author: Firebasky # Date: 2020-09-16 11:25:09 # Last Modified by: h1xa # Last Modified time: 2020-09-28 22:34:07 */ highlight_file(__FILE__); include(flag.php); error_reporting(0); $error你还想要flag嘛&…

在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql

一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网&#xff1a;boost官网 我下载的boost版本&#xff1a; windows:boost_1_84_0.zipli…

ROS机器视觉应用中的关键点

1.ROS图像接口 ​​​​​​ 2.摄像头内参标定 3.ROS&#xff0b;OpenCV物体识别 ​​​ 4.小结

C++学习Day04之对象字节数初探

目录 一、程序及输出1.1 空类字节数1.2 非空类字节数1.3 设置对齐方式的数值 二、分析与总结 一、程序及输出 1.1 空类字节数 #include<iostream> using namespace std;class Person { };void test01() {//空类的sizeof结果是1 原因 每个对象都应该在内存上有独一无二…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D &#xff0c; 接下来做UI框架的逻辑系统&#xff0c;管理器和UI背包&#xff0c; 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs &#xff0c; 双击BasePanel.cs脚本修改代码&#xff1a; using UnityEngine; pu…