Qt (QFileDialogQColorDialogQFontDialog) 对话框实战

news2025/1/12 12:11:02

目录

一、QFileDialog 类 (文件对话框)

二、QColorDialog 类(颜色对话框)

三、QFontDialog 类(字体对话框类)


一、QFileDialog 类 (文件对话框)

QFileDialog 是 Qt 框架中的一个类,用于在应用程序中提供文件对话框。它允许用户选择文件或目录,并且可以指定对话框的标题、路径、过滤器以及其他选项。

QFileDialog 类的方法可以使用静态方法调用,因此无需创建对象。该类提供了很多方法,包括:

  • getOpenFileName():获取单个文件的完整路径。
  • getOpenFileNames():获取多个文件的完整路径。
  • getSaveFileName():获取保存文件的完整路径。
  • getExistingDirectory():获取现有目录的路径。

此外,还提供了一些选项来控制对话框的行为和样式,例如指定默认文件名、显示隐藏文件和目录、添加可选的文件类型过滤器等等。

QFileDialog 的使用非常简单,只需要调用所需的方法并传递所需的参数和选项即可。可以将返回值用于加载文件或目录路径。

案例分析:实现下图功能

代码示例:

qfiledialogtest.h

#ifndef QFILEDIALOGTEST_H
#define QFILEDIALOGTEST_H

#include <QDialog>

#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout> // 水平布局
#include <QVBoxLayout> // 垂直布局

#include <QFileDialog>

class QFileDialogTest : public QDialog
{
    Q_OBJECT

public:
    QFileDialogTest(QWidget *parent = nullptr);
    ~QFileDialogTest();

private:
    QLabel *FileNameLabel;
    QLineEdit *FileNameLineEdit;

    QPushButton *FileButton;

    QLabel *FileSizeLabel;
    QLineEdit *FileSizeLabelLineEdit;

    QPushButton *GetFileInfoButton;

private slots:
    void GetFileInfoFunc(); // 用于打开文件
    void GetFileSizeFunc(); // 用于获取文件大小

};
#endif // QFILEDIALOGTEST_H

main.cpp

#include "qfiledialogtest.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFileDialogTest w;
    w.show();
    return a.exec();
}

qfiledialogtest.cpp

#include "qfiledialogtest.h"

QFileDialogTest::QFileDialogTest(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("文件对话框测试");
    // 1:创建控件
    FileNameLabel=new QLabel("文件名称:");
    FileNameLineEdit=new QLineEdit;
    FileButton=new QPushButton("选择...");

    FileSizeLabel=new QLabel("文件大小:");
    FileSizeLabelLineEdit=new QLineEdit;

    GetFileInfoButton=new QPushButton("获取文件大小信息");


    // 2:排列布局
    QGridLayout *glayout=new QGridLayout;
    glayout->addWidget(FileNameLabel,0,0);
    glayout->addWidget(FileNameLineEdit,0,1);
    glayout->addWidget(FileButton,0,2);

    glayout->addWidget(FileSizeLabel,1,0);
    glayout->addWidget(FileSizeLabelLineEdit,1,1,1,2);

    QHBoxLayout *hlayout=new QHBoxLayout;
    hlayout->addWidget(GetFileInfoButton);


    QVBoxLayout *vlayout=new QVBoxLayout(this);
    vlayout->addLayout(glayout);
    vlayout->addLayout(hlayout);

    // 信号槽函数连接
    connect(FileButton,SIGNAL(clicked()),this,SLOT(GetFileInfoFunc()));
    connect(GetFileInfoButton,SIGNAL(clicked()),this,SLOT(GetFileSizeFunc()));
}

QFileDialogTest::~QFileDialogTest()
{
}


void QFileDialogTest::GetFileInfoFunc() // 用于打开文件
{
    QString strFileName=QFileDialog::getOpenFileName(this,"打开","/","Files(*)");
    FileNameLineEdit->setText(strFileName);
}

void QFileDialogTest::GetFileSizeFunc() // 用于获取文件大小
{
    // 获取单行编辑框控件里面文件路径等
    QString strFileNames=FileNameLineEdit->text();

    QFileInfo fileinfo(strFileNames);

    qint64 FileSize=fileinfo.size();

    FileSizeLabelLineEdit->setText(QString::number(FileSize));
}

二、QColorDialog 类(颜色对话框)

QColorDialog 类是一个颜色选择对话框类,用于在 Qt 应用程序中提供用户选择颜色的功能。该类提供了对于颜色选择的控制,包括多种预定义颜色、自定义颜色、调色板、更改颜色模型、透明度等选项。QColorDialog 类继承自 QDialog 类,因此可以像对待普通的对话框一样对待它。

使用 QColorDialog 类可以创建一个颜色选择对话框并将其显示在屏幕上,用户可以在对话框中选择想要的颜色并将其返回给应用程序。开发人员可以使用 QColorDialog 类的信号和槽机制来处理用户选择的颜色。例如,可以在选择颜色后使用 QColorDialog 类的颜色选择信号来更新另外的部分或部件的颜色。

QColorDialog 类是 Qt GUI 模块中的一部分,因此必须使用 #include <QColorDialog> 来包含该类的头文件。

案例分析:实现下图功能

代码示例:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

#include <QPushButton>
#include <QFrame>
#include <QColorDialog>
#include <QGridLayout>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    QGridLayout *glayout;
    QPushButton *colorbutton;

    // QFrame类是基本控件的基类,QWidget是QFrame类型
    QFrame *colorFrame;

private slots:
    void dispcolorFunc();

};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{

    setWindowTitle("颜色对话框测试");

    glayout=new QGridLayout(this);  // new一个布局对象

    colorbutton=new QPushButton("调用颜色对话框");
    colorFrame=new QFrame;

    colorFrame->setFrameShape(QFrame::Box); // 设置形状
    colorFrame->setAutoFillBackground(true); // 填充背景处理

    glayout->addWidget(colorbutton,0,0);
    glayout->addWidget(colorFrame,1,0);

    // 信号槽函数连接
    connect(colorbutton,SIGNAL(clicked()),this,SLOT(dispcolorFunc()));
}

Dialog::~Dialog()
{
}

void Dialog::dispcolorFunc()
{
    QColor colorvalues=QColorDialog::getColor(Qt::red);

    if(colorvalues.isValid())
    {
        colorFrame->setPalette(QPalette(colorvalues));
    }
}

main.cpp

#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

三、QFontDialog 类(字体对话框类)

QFontDialog 类是一个对话框,用于显示可供用户选择的字体。它允许用户选择字体,字体样式(粗体、斜体、下划线)和字体大小。它是 Qt 应用程序中常用的标准 Qt 对话框之一。

QFontDialog 类继承自 QDialog 类,它提供了一个简单的用户界面,允许用户选择字体。QFontDialog 类有多个静态函数,例如 getFont() 和 getFontInfo(),可以用来创建并显示字体对话框,然后获取用户选择的字体信息。

使用 QFontDialog 类时,需要注意以下几点:

  1. 需要在应用程序的 .pro 文件中添加 QT += widgets,才能使用 QFontDialog 类。
  2. 可以使用 setFont() 方法将当前字体设置为对话框中的默认选项,也可以使用 setCurrentFont() 方法将当前字体设置为对话框中的选择。
  3. 可以设置 QFontDialog::FontDialogOption 枚举类型变量来控制对话框的行为,例如允许用户选择固定大小字体、隐藏字体样式选项等。
  4. 在用户选择完字体后,可以使用 selectedFont() 方法获取用户选择的字体信息。

总之,QFontDialog 类是一个便捷的工具,用于允许用户选择他们喜欢的字体,从而提高应用程序的用户体验。

案例分析:实现下图功能

代码示例:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

#include <QPushButton>
#include <QLineEdit>
#include <QFontDialog>
#include <QGridLayout>


class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    QGridLayout *glayout;
    QPushButton *fontbutton;
    QLineEdit *fontlineedit;

private slots:
    void dispFontFunc();


};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("字体对话框测试");

    glayout=new QGridLayout(this);

    fontbutton=new QPushButton("调用字体对话框");

    fontlineedit=new QLineEdit;
    fontlineedit->setText("罗小白的干爹");

    glayout->addWidget(fontbutton,0,0);
    glayout->addWidget(fontlineedit,0,1);

    connect(fontbutton,SIGNAL(clicked()),this,SLOT(dispFontFunc()));

}

Dialog::~Dialog()
{
}


void Dialog::dispFontFunc()
{
    bool isbool;

    QFont font=QFontDialog::getFont(&isbool);

    if(isbool)
    {
        fontlineedit->setFont(font);
    }

}

main.cpp

#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

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

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

相关文章

ssh 连接:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

报错原因&#xff1a; ssh配置文件中有些配置文件没有开启 问题解决&#xff1a; PasswordAuthentication yes // 开启密码登录 PermitRootLogin yes // 开启root登录 PubkeyAuthenticaion yes // 开启公钥登录 配置项解释&#xff1a; 1.PasswordAuthenticati…

AI算法检测对无人军用车辆的MitM攻击

南澳大利亚大学和查尔斯特大学的教授开发了一种算法来检测和拦截对无人军事机器人的中间人&#xff08;MitM&#xff09;攻击。 MitM 攻击是一种网络攻击&#xff0c;其中两方&#xff08;在本例中为机器人及其合法控制器&#xff09;之间的数据流量被拦截&#xff0c;以窃听或…

诊断DLL——周立功模板生成dll文件

文章目录 前言一、周立功sa_demosa.cppdll.h二、自定义安全访问算法三、配置工程属性四、生成dll库五、ZCANPRO加载dll文件六、总结前言 在实际诊断工程应用中,如UDS刷写——27服务,经常会遇到一些Seed2Key的算法问题,为了安全保密,这个算法的源码不便公开,我们可以将其打…

UGUI交互组件InputField

一.InputField的结构 对象说明InputField挂有TextMeshPro-InputField组件的主体对象Text Area文本显示区Placeholder未输入时占位文本Enter text...Text输入的显示文本 二.InputField的属性 属性说明Text ViewportText Area子对象的引用Text ComponentText子对象的引用Text输入…

解密JavaScript的异步机制:打破单线程限制,提升性能与用户体验

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、JavaScript的异步编步机制 二、事件循环…

面试总结之并发编程

一、ThreadLocal 1、什么是ThreadLocal ThreadLocal是一种多线程隔离机制&#xff0c;提供了多线程环境下对共享变量访问的安全性 在多线程访问共享变量的场景中&#xff08;如上图&#xff09;&#xff0c;一般的解决方案是对共享变量加锁&#xff0c;从而保证同一时刻只有一…

“权限之舞:Linux安全之道”

W...Y的主页&#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; 在之前的Linux博客中&#xff0c;我们学习了基础的Linux指令&#xff0c;具体可以订阅一下博主的Linux专栏学习。当我们想进行递归删除文件时等等许多操作中&#xff0c;只有在root账号中…

IPV6 ND协议--源码解析【根源分析】

ND协议介绍 ND介绍请阅读上一篇文章&#xff1a;IPv6知识 - ND协议【一文通透】11.NDP协议分析与实践_router solicitation报文中不携带source link-layer address-CSDN博客 ND协议定义了5种ICMPv6报文类型&#xff0c;如下表所示&#xff1a; NS/NA报文主要用于地址解析RS/…

使用PyTorch解决多分类问题:构建、训练和评估深度学习模型

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【学习笔记】RabbitMQ02:交换机,以及结合springboot快速开始

参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 四、RabbitMQ &#xff1a;Exchange 交换机4.1 交换机类型4.2 扇形交换机 Fanout Exchange4.2.1 概念4.2.1 实例&#xff1a;生产者4.2.1.1 添加起步依赖4.2.1.2 配置文件4.2.1.3 JavaBean进行配置4.…

NGF ; -R : Trk NTRK

NTRK基因融合的机制与靶向治疗 - 知乎 【NTRK基因】共识已发布&#xff0c;24款获证&#xff0c;2款NGS产品已布局

开关电源测试解决方案之浪涌电流测试 -纳米软件

浪涌电流是由于开关、断电等引起的突发电流&#xff0c;这种电流会直接影响到设备的寿命和可靠性&#xff0c;因此浪涌电流测试是开关电源测试的一个重要项目。本文将会介绍浪涌电流测试要求以及测试方法。 什么是浪涌电流? 浪涌电流是指电源接通瞬间&#xff0c;流入电源设备…

Python中兔子递归函数的例子

本文将详细介绍Python中兔子递归函数的例子&#xff0c;展示递归函数的基本实现方法及其原理。 一、递归函数的概念 递归函数是指在函数内部调用自身的函数。通过递归函数&#xff0c;可以将复杂问题分解成简单的子问题来解决。 这种过程是有限的&#xff0c;当子问题足够小…

分布式存储系统——ceph

目录 一、分布式存储类型 1、块存储 2、文件存储 3、对象存储 二、ceph概述 1、ceph简介 2、ceph的优势 3、ceph架构 1&#xff09;RADOS 基础存储系统&#xff08;Reliab1e&#xff0c;Autonomic&#xff0c;Distributed object store 2&#xff09;LIBRADOS 基础库 …

Linux 下I/O操作

一、文件IO 文件 IO 是 Linux 系统提供的接口&#xff0c;针对文件和磁盘进行操作&#xff0c;不带缓存机制&#xff1b;标准IO是C 语言函数库里的标准 I/O 模型&#xff0c;在 stdio.h 中定义&#xff0c;通过缓冲区操作文件&#xff0c;带缓存机制。   标准 IO 和文件 IO 常…

论文阅读 Memory Enhanced Global-Local Aggregation for Video Object Detection

Memory Enhanced Global-Local Aggregation for Video Object Detection Abstract 人类如何识别视频中的物体&#xff1f;由于单一帧的质量低下&#xff0c;仅仅利用一帧图像内的信息可能很难让人们在这一帧中识别被遮挡的物体。我们认为人们识别视频中的物体有两个重要线索&…

怎么使用动态代理IP提升网络安全,动态代理IP有哪些好处呢

随着互联网的普及和数字化时代的到来&#xff0c;网络安全问题越来越受到人们的关注。动态代理IP作为网络安全中的一种技术手段&#xff0c;被越来越多的人所采用。本文将介绍动态代理IP的概念、优势以及如何应用它来提升网络安全。 一、动态代理IP的概念 动态代理IP是指使用代…

nginx.4——正向代理和反向代理(七层代理和四层代理)

1、正向代理反向代理 nginx当中有两种代理方式 七层代理(http协议) 四层代理(tcp/udp流量转发) 七层代理 七层代理&#xff1a;代理的是http的请求和响应。 客户端请求代理服务器&#xff0c;由代理服务器转发给客户端http请求。转发到内部服务器&#xff08;可以单台&#…

Mac OS m1 下安装Gradle4.8.1

1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/gradle-4.8.1 e…

视频集中存储/视频监控管理平台EasyCVR如何免密登录系统?详细操作如下

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…