Qt第一行代码

【Qt系列教程】一、认识Qt、安装Qt、运行Hello Qt Qt 是一个跨平台应用程序开发框架,主要使用 C++ 和 QML 进行开发,并支持 Python。Qt6 于 2020 年发布,带来了对 C++17 的支持、新的图形架构 RHI 等多项改进。通过在线安装器下载并安装 Qt 后,可以使用 Qt Creator 创建并运行一个简单的 "Hello World" 项目 阅读详情

前言

  • 很久前就想拿到界面相关的技术栈,主要用于调试一些接口和小工具, 关于界面的框架比较多, 有Android,也有Qt之类的, 因为做的后端都是和c/c++打交道,加上Qt可移植很高, 所以就选择它吧。

  • 针对版本,因为前期没有接触太多Qt,索性就从最新的Qt6.6开始吧。

  • 整体感觉Qt还是比较简单的, 只要花销时间即可,不会遇到无法跨越的疑难问题。


组件UI

是选择可视化UI设计还是代码化UI设计, 虽然可视化UI省掉了很多工作量,但:

UI的可视化设计是对用户而言的,其实底层都是C++的代码实现,只是Qt巧妙地进行了处理。
由于界面设计的底层还是C++语言实现的,底层实现的功能比可视化设计更加强大和灵活。
某些界面效果是可视化设计无法完成的。

因为从零开始,后续熟悉组件以及Qt的库相关,所以还是尽量使用代码化UI设计吧。

可视化UI设计

这里不详细展开,大概是通过界面方式使用组件面板中的组件完成界面的设计。

代码化UI设计

  • 砍掉ui相关的指针以及相关的调用。
  • 组件<私有数据>使用指针方式创建,可以集中使用一个init方法初始化,例如initUI();
void QWDlgManual::initUI()
{
   // chkBoxUnder = new QCheckBox(tr("Underline"));
    chkBoxItalic = new QCheckBox(tr("Italic"));
    chkBoxBold = new QCheckBox(tr("Bold"));

    QHBoxLayout *HLay1 = new QHBoxLayout;
    HLay1->addWidget(chkBoxUnder);
    HLay1->addWidget(chkBoxItalic);
    HLay1->addWidget(chkBoxBold);


    rBtnBlack = new QRadioButton(tr("Black"));
    rBtnBlack->setChecked(true);

    rBtnRed = new QRadioButton(tr("Red"));
    rBtnBlue = new QRadioButton(tr("Blue"));

    QHBoxLayout * HLay2 = new QHBoxLayout;
    HLay2->addWidget(rBtnBlack);
    HLay2->addWidget(rBtnRed);
    HLay2->addWidget(rBtnBlue);

    btnOk = new QPushButton(tr("确定"));
    btnCancel = new QPushButton(tr("取消"));
    btnClose = new QPushButton(tr("退出"));

    QHBoxLayout *HLay3 = new QHBoxLayout;
    HLay3->addStretch();
    HLay3->addWidget(btnOk);
    HLay3->addWidget(btnCancel);
    HLay3->addStretch();
    HLay3->addWidget(btnClose);

    txtEdit = new QPlainTextEdit;
    txtEdit->setPlainText("Hello world\n\nIt is my demo");
    QFont font = txtEdit->font();   //获取字体
    font.setPointSize(20);//设置字体
    txtEdit->setFont(font);



    //创建垂直布局,并设置主布局
    QVBoxLayout *VLay = new QVBoxLayout;
    VLay->addLayout(HLay1);
    VLay->addLayout(HLay2);
    VLay->addWidget(txtEdit);
    VLay->addLayout(HLay3);

    setLayout(VLay);    //设置主窗体的主布局
}
  • 信号与槽也采用init的方式初始化, 譬如iniSignalSlots()
void QWDlgManual::iniSignalSlots()
{
    connect(rBtnBlue, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnBlack, SIGNAL(clicked()), this, SLOT(setTextFontColor()));
    connect(rBtnRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));

    connect(chkBoxUnder, SIGNAL(clicked(bool)),this, SLOT(on_chkBoxUnder(bool)));
    connect(chkBoxItalic, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxItalic(bool)));
    connect(chkBoxBold, SIGNAL(clicked(bool)), this, SLOT(on_chkBoxBold(bool)));

    connect(btnOk, SIGNAL(clicked()), this, SLOT(accept()));
    connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
    connect(btnClose, SIGNAL(clicked()), this, SLOT(clise()));

}
  • 实现槽的方法
    没有过于复杂的新东西,比Linux中的信号简单太多 。信号好比是中断,如果熟悉linux环境编程,应该比较熟悉软中断,内核向用户态发信号,用户态可以对信号做一些处理,比如忽略信号或抓捕信号, 其中抓捕信号就好比槽函数。
void QWDlgManual::on_chkBoxItalic(bool checked)
{
    QFont font = txtEdit->font();
    font.setItalic(checked);
    txtEdit->setFont(font);

}

void QWDlgManual::setTextFontColor()
{
    QPalette plet = txtEdit->palette();
    if(rBtnBlue->isChecked()){
        
        plet.setColor(QPalette::Text, Qt::blue);
        
    }
    if(rBtnRed->isChecked())
        plet.setColor(QPalette::Text, Qt::red);
    if(rBtnBlack->isChecked())
        plet.setColor(QPalette::Text, Qt::black);

    txtEdit->setPalette(plet);


}

展望后续

  • 组件/布局的熟悉和使用
  • 网络编程,图像处理, 音视频相关
  • 类似QT的STL之类的东西
工控软件开发框架,GTK和QT好难选,快来拯救开发者。 工控软件开发框架如何选,有人喜欢GTK,有人钟意QT,而且每个人都有自己的一番道理,好像说的还都有理,这种情况该怎么办呢?带着你深入了解下。 阅读详情

相关推荐

Qt是什么?有哪些优势用于图形界面开发

什么是Qt? Qt是用于台式机,嵌入式和移动设备的跨平台应用程序开发框架。支持的平台包括Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等。 Qt本身不是一门编程语言。它是一个用C++编写的框架。一个预处理器,MOC(Meta-Object Compiler,元对象编译器),被用来扩展C++语言的功能,比如信号和插槽。在编译步骤之前,MOC解析用Qt-extended C++编写的源文件,并从中生成符合标准的C++源文件。

qq_42444778的博客 1万+

Qt设计界面是用设计师还是用代码

可视化UI设计无需人工编写代码去处理大量繁琐的界面组件的创建和布局管理工作,可以直观地进行界面设计,大大提高工作效率。但是可视化UI设计也存在一些缺陷,如某些组件无法可视化地添加到界面上,比如在工具栏上无法可视化添加ComboBox组件,而用代码就可以。 采用纯代码方式进行UI设计虽然无所不能,但是设计效率太低,过程非常繁琐,而可视化UI设计简单高效。所以,能用可视化设计的就尽可能用可视化设计解决,无法解决的再用纯代码方式,将两种方法结合,才是高效设计UI的方法。 ...

qq_37520876的博客 2150

Qt:一个强大而灵活的跨平台应用程序开发框架

代码示例中的源代码是简单的示例,用于演示Qt框架的一些基本特性。实际应用中,开发人员可以根据自己的需求和项目要求,使用Qt框架提供的丰富功能和组件进行开发。在Qt的官方文档和示例代码中,您可以找到更多详细的教程和示例,以帮助您更好地理解和使用Qt框架。它提供了丰富的工具和功能,支持跨多个平台进行开发,并具有高度的可定制性和灵活性。它提供了丰富的工具和功能,使得开发人员能够创建高性能、可扩展和易于维护的应用程序。下面将详细介绍Qt框架的优点,并提供一些相关的源代码示例。

CodeVorter的博客 843

【Qt学习笔记】3.布局

一、手动布局布局,Layout,就是把各个控件放在合适的位置,占据适当大小的空间。在Qt中,使用布局器QLayout进行布局,QLayout本质上是一个工具类。1、它为我们自动计算各个控件的大小和位置2、当父窗口调整时,它根据既定策略Policy来调整各个子窗口的大小和位置两个常用的QLayout类:1、QHBoxLayout:横向布局2、QVBoxLayout:纵向布局(1...

weixin_33720078的博客 217

自制非接触式静电探测仪:从振动电容原理到微弱信号检测实践

微弱信号检测是电子测量领域的核心挑战之一,尤其在需要避免物理接触或防止干扰的场景中。其基本原理在于将难以直接获取的微小物理量(如电流、电压)通过传感器转换为电信号,再经过放大、滤波等处理进行提取。锁相放大技术是解决这一问题的关键手段,它利用参考信号与目标信号的同步性,从强噪声背景中恢复出有效信息,极大提升了信噪比和测量灵敏度。这项技术的工程价值在于实现了对纳安级电流、微伏级电压等高难度参数的可靠测量。在静电防护、材料表面电位分析、生物电信号采集等应用场景中,非接触式测量需求广泛。本文聚焦的基于振动电容原理的

weixin_32349093的博客 273

STM32 AFIO时钟开启时机与复用功能解析

在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践

weixin_42389113的博客 578

Qt学习笔记5:Qt项目界面(.ui)及其作用

创建Qt项目,并用Qt Designer对窗体进行可视化设计,保存之后生成对应的项目文件。本文分别分析各个文件的内容及其功能,以及它们是如何联系在一起工作,实现界面的创建与显示的。

WHEgqing的专栏 4073

Unity中URP下的菲涅尔效果实现(个性化修改)

在上篇文章中,我们实现了 URP 下的菲涅尔基础效果,我们在这篇文章中,对其进行自定义化修改。

楠溪泽岸的博客 2063

Qt学习(1)——Qt第一行代码

第一行代码 显示Qt版本 // version.cpp #include &lt;QtCore&gt; #include &lt;iostream&gt; int main() { std::cout &lt;&lt; "Qt version: " &lt;&lt; qVersion() &lt;&lt; std::endl; } qVersion()函数显示当前Qt版本。...

beyond_zhangna的博客 885

强化学习算法案例——一个经典的走迷宫任务。

作者:禅与计算机程序设计艺术 1.简介 在强化学习(Reinforcement Learning, RL)中,有一个经典的任务——走迷宫,其原理简单易懂,但它的实际意义却深远,它让计算机学习如何通过策略网络(policy network),以最佳的方式解决复杂的任务。本文将介绍如何用强化学习解决这个经典

AI天才研究院 3215

【WRF-Chem Emissions教程第一期】WRF-Chem 排放概述

WRF-Chem 排放概述

WW、forever的博客 852

QT跨平台应用程序开发框架(9)—— 容器类控件

QGridLayout 用来实现网格布局的效果,可以达到 M * N 的这种网格效果,主要属性和 QHBoxLayout 类似,但是设置 spacing 的时候是按照垂直水平两个方向来设置的。每个 Widget 只能设置一个布局管理器, 但是可以通过拖拽方式创建两个布局遍历器,但是这样创建的布局管理器仅仅只会将内部控件重新组合位置,并不会像上面一样随着窗口大小改变。而容器内控件包含的直接就是我们前面介绍的一堆的控件。解答:我们前面使用ui创建界面时,都是手动拖拽方式来布局的,其实这种方式不科学。

aaqq800520的博客 1144

代码接单:用 ComfyUI 搭建电商模特换装工作流(保姆级教程)

在闲鱼和小红书上,搜一下“AI 模特图”或者“服装换模特”,你会发现大量的接单需求。太贵:请个外模拍一套图,动辄几千块。太慢:寄样品、排期、拍摄、修图,半个月过去了。太卷:竞对都在上新,你还在等图。“给我一张你的衣服平铺图(或假人图),我 10 分钟给你生成真人上身图,一张只要 50 块。对于商家是省钱,对于你是纯利润。为什么不用 Midjourney?因为 MJ 抽卡不可控,无法保持衣服版型一致。只有 ComfyUI,才能做到精准控制,实现工业化量产。

BUG猿的博客 1774

QT跨平台应用程序开发框架(8)—— 多元素控件

所以要想数据不被丢失,就得需要和“学生管理系统”一样,实现一个“保存数据到文件”和“从文件读取数据”的两个操作,每次运行程序时读取文件数据,每次关闭程序时,在析构函数里添加保存文件的操作。QTreeWidget 表示一个树形控件,里面的每个元素都是一个 QTreeWidgetItem,这个类可以包含多个文本和图标,每个文本/图标为一个列。上述几个控件相关的操作,数据都是在内存中保存的,重新运行程序后,数据都会重置。可以发现,说是6个控件,其实是3个,只是两两一组而已。

aaqq800520的博客 885

《PCI Express体系结构导读1》-- PCI简介

请先阅读完一遍此书再来看文章哦,这样效率更高~

HoneyIC的博客 151

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

QT跨平台应用程序开发框架(1)—— 环境搭建

其实说是安装三个东西,其实只要安装一个Qt SDK,其它两个都有了。之后一路点击下一步即可,就是安装路径不要带中文,不要带特殊符号和空格。创建好项目后会预先生成一些代码,我们来讲解一下这些代码做了什么。Windows下还有哪些方案可以开发GUI?之后一路确认然后安装即可。

aaqq800520的博客 3876

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

QT跨平台应用程序开发框架(6)—— 常用显示类控件

但是上面我们对 Label 尺寸的设置是“一次性”的,就上面的程序而言,只要我们扩大或缩小窗口大小,里面的 Label控件大小是不会变的,所以下面我们让 Label 的大小随着窗口大小实时发生改变。这个和 HTML 前端中一样的,有时候按钮旁边会有一些字,但是为了方便用户点击,一般用户直接点击按钮的旁边的文字也可以选中按钮,所以这个设置伙伴就是将文本和按钮“绑定”我们先使用 QLCDNumber 显示一个初始的数值,比如4,然后程序启动后,每过一秒数字就 -1,直到 0 就结束。

aaqq800520的博客 1538

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

QT跨平台应用程序开发框架(4)—— 常用控件QWidget

有时候 Qt 内置的光标可能满足不了我们的需求,所以 Qt 也允许我们通过自定义图片的方式来设置光标//设置图标//设置窗口的图标//当我们点击时,是图片左上角在进行点击//假设我在按钮的边缘位置进行点击,但由于光标图片的左上角到按钮外面去了导致点击不到//所以我们可以设置实际点击在图片光标里的位置,10,10表示点击实际生效的位置,左上角是0,0如果导入的图片太大,我们也而已通过下面的API对图片进行缩放:iconfont-阿里巴巴矢量图标库。

aaqq800520的博客 1561

QT跨平台应用程序开发框架(5)—— 常用按钮控件

QPushButton 表示一个按钮,我们前面使用过很多次,继承自 QAbstractButton,这个类是一个抽象类,是其他按钮的父类,如下图:c++面向对象三大特性——多态_c++三大特性实例-优快云博客是一个包含纯虚函数的类,无法创建出实例,仅仅是为了被派生类继承并且派生类继承后后也不能实例化出对象。只有重写虚函数派生类才能实例化出对象属性说明text按钮中的文本icon按钮中的图标iconSize按钮中图标的尺寸shortCut按钮对应的快捷键autoRepeat。

aaqq800520的博客 1328

QT跨平台应用程序开发框架(2)—— 初识QT

目录一,创建helloworld1.1 通过图形化1.2 通过代码1.3 通过编辑框1.4 使用按钮二,对象树2.1 关于对象树2.2 演示释放流程三,乱码问题3.1 为什么会有乱码问题3.2 解决乱码问题四,认识Qt坐标系五,周边5.1 命名规范5.2 快捷键5.3 如何使用帮助文档先双击 .ui 文件来到图形化编辑页面:然后就会在页面的右上方显示我们安装的控件:最后我们点击左下角运行按钮,我们创建的窗口上就会显示一个hello world字符串之后我们就可以往label对象里面设置一个文本:之后直接运行

aaqq800520的博客 2180

QT跨平台应用程序开发框架(13)—— Qt界面样式优化

部分控件内部包含了多个“子空间”,比如 QComboBox 的下拉框的多个内容和 QSpinBox 微调框的上下选择按钮等,我们可以通过 子控件选择器“两个冒号”,针对子空间进行样式设置。创建好后,我们手动在电脑的文件管理器的项目目录下,新建一个 style.qss 文件,就和图片文件一样,只是图片变成了 .qss 文件,其余操作完全一致。问题解答:可以看到,当冲突的时候,局部样式的优先级大于全局样式,可以说是先渲染了全局样式,后渲染的局部样式,导致局部样式覆盖了全局样式。pressed 就是鼠标松开时。

aaqq800520的博客 1123

QT跨平台应用程序开发框架(3)—— 信号和槽

有时候Qt内置的信号和槽可能无法满足我们的需求,所以我们可以自己实现信号和槽,我们先说自定义槽我们上篇文章已经用自定义槽实现了按按钮切换按钮里的文本:所以所谓的槽函数,操作过程和自定义一个普通的成员函数没啥区别除了上面这种最基础的,还有第二种更便捷的方法先通过拖拽方式创建一个按钮,右键这个按钮,点击“转到槽”:可以看到,我们通过这种方式生成的槽函数,并没有通过connect关联,因为在 Qt 中,除了通过connect 之外,还可以通过函数名字的方式来自动连接比如上面的槽函数名字。

aaqq800520的博客 1468

QT跨平台应用程序开发框架(7)—— 常用输入类控件

上面的 inputMask 功能有限,只能进行简单的验证,要想进行更复杂的验证,就要使用“正则表达式”注意:这里的格式化符号的含义,不要死记,不同语言/库的设定规则是存在差异的,⼀定是用的时候再去查。是否开启 undo(ctrl+z 撤销) / redo(ctrl+y 撤销撤销) 模式。效果就是我们在输入框中输入字符,上面的label会同步显示,由于太简单就不贴演示了。可以看到,1号的下午五点到2号的凌晨0点,中间是只隔了7小时的,但是多算进去了一天。

aaqq800520的博客 1047

QT跨平台应用程序开发框架(12)—— Qt网络编程

支持网络的操作系统也都会一共一组 API(socket API)来供用户使用,但是 C++ 至今还没有提供一套封装了网络编程的 API,被业界很多人吐槽,所以后面我们将使用 Qt 自己封装的网络 API我们编写的网络程序,需要传输层支持,所以Qt 也就提供了两套 API,分别针对 UDP 和 TCP使用 Qt 的网络 API,需要先在 .pro 文件添加 network 模块,我们前面介绍的各种控件,都是包含在 QtCore 模块中的,因为这个模块默认添加。

aaqq800520的博客 1580
上一篇: 图像叠加中文字体
下一篇: Qt类库概述
帘下有白绿
博客等级 码龄12年 165粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值