![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
QT
文章平均质量分 62
暴躁的野生猿
请加入裙,欢迎同行一起学习交流,1零251②7672。百度搜索【CSDN 暴躁的野生猿】也可搜到群号码
展开
-
QT for Android安卓编译环境搭建+首次编译3个大坑
编译环境能否搭建成功,主要是看各个依赖软件的版本是否匹配。依赖的软件有3个:JDK、安卓SDK、安卓NDK。我的qt版本是5.14.1,我亲测以下版本可以成功让编译安卓:QT5.14 + JDK1.8.0 + 安卓SDK26.1 + 安卓NDK20.1在QT->工具->选项,打开如下窗口后,点击设备选项卡,如下所示,填入以上3个软件的安卓位置,如果版本匹配,下图会看到两个绿色的对号。然后点击上图的Kits选项卡,如下图所示。可以看到安卓编译器已经没有黄色感叹号了,就说明配置成功了。原创 2023-12-17 16:50:46 · 1397 阅读 · 0 评论 -
Qt for Android设置安卓程序默认横屏+全屏
我的qt版本是5.14.1,网上查到的方法是,把编译出的build文件夹中的AndroidManifest.xml文件复制出来然后修改,然后把修改后的xml文件加入pro文件,语法为ANDROID_PACKAGE_SOURCE_DIR = $$PWD/AndroidManifest.xml(具体;上图可见,自动生成的文件中,有一个就是AndroidManifest.xml。可视化编辑模式下,可编辑的东西很少,就是上图所显示的这些东西,有趣的是可以直接设置3个图标:高分辨率图标、中分辨率图标、低分辨率图标。原创 2023-12-17 15:45:26 · 851 阅读 · 0 评论 -
QT控件通过qss设置子控件的对齐方式、大小自适应等
一些复杂控件,是有子控件的,每个子控件,都可以通过qss的双冒号选择器来选中,进行独特的样式定义。很多控件都有子控件,太多了,后面单独写一篇文章来介绍各个控件的子控件。例如下拉列表控件,右边有个下拉按钮(QComboBox::drop-down)就是子控件,这个下拉按钮里面还有一个箭头(QComboBox::down-arrow),也是子控件。展开的下拉列表,每个条目(QAbstractItemView::item)也都是子控件。又比如spinbox,有个上下箭头可以调整数值大小,这个上下箭头也是子控件。原创 2023-07-26 13:41:50 · 2192 阅读 · 0 评论 -
解决QT中QWidget无法触发mouseMoveEvent鼠标移动事件
需要注意的是,这个Qt::WA_Hover的CPU成本更高,本质上鼠标移动事件,就是被Qt::WA_Hover这个标志分发下去的,除此之外,Qt::WA_Hover还会分发更多事件,如鼠标进入、移出、移动等。那是因为你的widget上有别的子控件,子控件覆盖的地方,鼠标移动事件会被分发到子控件,子控件会把事件拦截,然后父控件就无法收到鼠标移动事件了,这时父控件的mouseMoveEvent函数就不会被触发了。mouseMoveEvent这个事件函数,只要鼠标在这个widget内移动,就会触发该事件。原创 2023-07-24 11:41:08 · 6107 阅读 · 4 评论 -
QT控件自定义属性并支持QSS样式表+读取样式表的属性值
C++中自定义的属性borderColor,在qss中对应的名字为:qproperty-borderColor。冒号后面的值对应为该属性的值,他会被传递进C++代码中。边框颜色 border-color、边框半径 border-radius、背景颜色 background-color、字体大小font-size: 等等。样式表里有很多属性,例如。原创 2023-06-12 15:53:11 · 2710 阅读 · 0 评论 -
QT如何修改[设计师界面类]的名称(窗口或控件名字)?
当使用向导创建设计师界面类以后,如下图所示:这样QT会为我们生成3个文件:.cpp、.hpp、.ui。但是修改这个类名,就有点麻烦了,稍有不慎,就会编译报出一些莫名其妙的错误。要修改的地方有这么几个:1、右击.ui文件,重命名为新名称2、右击.ui文件,选择用文本编辑器打开,把旧名称查找替换为新名称3、右击.cpp,.h文件,重命名为新名称4、使用全字匹配查找替换cpp、h文件中类的旧名称,并替换5、修改.h文件中形如 #include "ui_xxx.h"中的xxx为.原创 2021-07-21 09:38:26 · 6567 阅读 · 0 评论 -
QT样式表qss设置后无效的原因大全
设置样式表无非两种方式,1是直接在ui设计师界面填写,这样所见即所得,2是用代码setStylesheet。不过令人困惑的是,经常设置了样式表之后,运行出的结果与预期不符,总结可能有以下原因:1、子控件如果设置了样式表,那么他会把从父控件送来的【同选择器】下的样式表覆盖。注:【样式表选择器】是专业术语,请自行搜索学习。2、子类如果设置了样式表,那么从父类继承来的【同选择器】下的样式表覆盖。注:子类和子控件不是一个概念。子控件是QWidget的树状关系。3、子类化QWidget后的类,原创 2021-06-25 10:50:52 · 12963 阅读 · 0 评论 -
QML系列教程(10)-行布局、列布局、网格布局、流布局
行布局 Row{ }、列布局 Column{ }、网格布局 Grid{ }、流布局 Flow{ }。QML中的布局和QWidget中的布局用法一样,可以实现任意元素的规律排列。原创 2021-06-10 17:59:45 · 3727 阅读 · 0 评论 -
QML系列教程(9)-状态过渡Transitions
过渡Transitions 必须配合状态State才能使用,见前一篇博文。所谓过渡,就是在已经定义好的两个state之间,做平滑的转场动画。这些动画可以是位移动画、颜色渐变动画、旋转动画等等任意QML支持的动画(见)...原创 2021-06-09 18:25:15 · 599 阅读 · 0 评论 -
发送与解析不定长报文的标准流程
定长报文处理起来很简单,大多通信协议的报文结构都是这样的:stc-body-check-tail,假设每帧报文长为L字节。说明:stc(start char)为报文头字符,check为校验字(和校验、CRC校验等),tail为报文尾,也可以没有尾,很多协议会把校验字当做尾。1、把收到的字节都存进fifo,并发出通知,在通知的回调中开始处理报文2、通知的回调函数:(1)从fifo中p...原创 2019-07-18 10:40:28 · 4390 阅读 · 5 评论 -
QML系列教程(8)-状态State+属性变化PropertyChanges+when的用法
所谓状态State,就是指界面上某一时刻某些元素的属性值集合。我们可以定义多种状态,并控制何时使用这个状态。应用实例:界面上有一个按钮,当点它一次后原创 2021-06-08 09:19:55 · 2469 阅读 · 1 评论 -
QML系列教程(7)-缓冲曲线easing+平抛运动+反弹运动
缓冲曲线的作用是,控制数值变化过程中的速度。例如,同样是让一个方块的x坐标从0移动到100,我们可以让他匀速运动过去,也可以让他先快后慢运动过去,也可以让他先慢后快的原创 2021-06-03 18:41:58 · 1199 阅读 · 0 评论 -
QML系列教程(6)-平行动画ParallelAnimation+序列动画SequentialAnimation
所谓平行动画,就是同时播放多个动画;所谓序列动画,就是依次播放多个动画;先看一个平行动画的例子,让一个矩形的x坐标从0 -> 100, y坐标也从0到100原创 2021-06-03 18:04:00 · 866 阅读 · 0 评论 -
QML系列教程(5)-属性动画的3种写法
属性值动画PropertyAnimation,一个最经典的例子是数值动画 NumberAnimation,方法1:NumberAnimation on [属性名] P{}NumberAnimation on rotation { id: minutePinAni; from: 0; to: 360; duration: 20000; loops: Animation.Infinite原创 2021-06-03 17:03:27 · 1108 阅读 · 0 评论 -
QML系列教程(4)-自定义按钮 + 自定义信号槽
自定义组件,也叫自定义元素。这一操作的作用,类似于C++的自定义类,就好比,如果你嫌弃QPushButton不够强大,那么你就可以继承它并写出一个子类来实现一个功能更强的按钮,如果你还不满意,你甚至可以继承QW...原创 2021-06-03 15:46:28 · 1803 阅读 · 0 评论 -
QML系列教程(3)-动画Animation、属性动画PropertyAnimation
QML中有很多类型的动画,他们的公共父类为:Animation原创 2021-06-03 11:12:25 · 728 阅读 · 0 评论 -
QML系列教程(2)-载入显示一幅或多幅图片
import QtQuick 2.0Item { id: root width: 200 height: width Image{ id: background anchors.fill: parent; source: "qrc:/pic/pic/meter.jpg" }}原创 2021-06-02 17:25:13 · 1794 阅读 · 1 评论 -
QML系列教程(1)-概念
QML通过一堆嵌套的元素,来描述一个界面,以及界面上的动作。其语法的组织方式,类似树状结构。所谓元素,又分成两种类型:可见元素(如矩形框、文本输入框等),不可见元素(如)原创 2021-06-02 16:32:01 · 454 阅读 · 1 评论 -
qt与javascript交互数据
1、QT向JS传递数组基本类型可以直接传递,例如 int bool string double等qt向js传递数组,需要把数组转成QJsonArray,再把QJsonArray转成QString, 这样js就会接收到一个基本类型string,而这个string在js中直接就是一个标准的js数组。QT代码示例:调用js函数,并给这个js函数传递一个数组作为参数 //方法1:构造QJsonArray,然后转成QString QJsonArray ja; ja <&l原创 2021-05-24 13:16:07 · 4495 阅读 · 6 评论 -
QT生成和使用静态链接库
目录1、生成静态链接库2、使用静态链接库生成静态链接库,目的有两个:1、加快编译速度,也即:库文件被加入到工程中,无需再次编译,编译器只编译你写的c/cpp,然后与加进来的库进行连接,以生成可执行文件;2、隐藏自己的代码,也即,只给客户提供库文件和h/hpp文件,具体实现全部隐藏在库中。所谓静态库,指的是,可以在编译时,提供代码链接资源的文件,静态库中的功能,会被直接编译到可执行文件中,这样可执行文件在运行时,无需额外依赖这个库。而动态库,需要在运行时,添加到可执行文件路径下,如一大堆dll原创 2021-03-15 18:21:18 · 3560 阅读 · 0 评论 -
QT样式表QComboBox设置下拉列表行距无效的原因
QComboBox的下拉列表默认情况下行距等于字高,显示效果看起来非常拥挤,对于显示相关的问题,一般都能用样式表解决,但是QComboBox的下拉列表的行高就比较另类了用样式表设置行高的qss语句如下:QComboBox QAbstractItemView{ border: 2px solid darkgray;/*下拉列表的边线的粗细、实虚*/ selection-ba原创 2018-04-16 19:50:20 · 4848 阅读 · 3 评论 -
QT模型视图MVC系列教程(7)---自定义视图
1、概念对于同一个MODEL,我们可以将其展示为不同的界面。例如:QFileSystemModel *fModel = new QFileSystemModel(); fModel->setRootPath("C:\"); QTreeView *treeView = new QTreeView(); treeView->setModel(fModel); treeView->show(); QTableView *tableView原创 2021-02-28 10:39:23 · 1201 阅读 · 2 评论 -
QPainter、QPen、QBrush,绘图、填充、渐变等使用方法
QPen是画笔,用来绘制图形的轮廓线,以及定义轮廓线的颜色、样式和属性;QBrush是画刷,用来填充封闭图形,以及定义填充的颜色、样式和属性;QPainter是画家,他要使用画笔QPen和画刷QBrush,在画布(QPaintDevice)上画文字、图形、图片等。可以充当画布(QPaintDevice)的类(其子类)有:QWidget,QImage, QOpenGLPaintDevice, QPagedPaintDevice, QPaintDeviceWindow, QPicture, and Q.原创 2021-02-24 16:19:46 · 10360 阅读 · 1 评论 -
QT窗口:透明与半透明、不规则异形窗口、控件透明与半透明、不规则异形按钮
目录1、主窗口全透明2、主窗口半透明(以白里透红为例)1、主窗口全透明直接在UI的主窗口中,拖出几个控件,下图我放置了一个QPushButton按钮、QCheckBox复选框、设置了蓝色背景的QWidget。然后用代码设置主窗体的透明:MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);原创 2021-02-23 18:57:02 · 8429 阅读 · 5 评论 -
QT正则表达式
1、indexIn函数:原型为int QRegExp::indexIn(const QString &str, int offset = 0, CaretMode caretMode = CaretAtZero) const形参:str为被操作的字符串,从str的第offset个字符的位置开始查找(若offset为负数,指从str的倒数第|offset|个字符开始查找),caremode指...原创 2018-04-09 10:58:09 · 4890 阅读 · 0 评论 -
QT模型视图MVC系列教程(6)---自定义委托Delegate保持显示
以下内容,不再区分这3个词:Delegate 代理 委托。假设有这样一个场景,你已经使用QComboBox为表格View中的某一列数值进行了代理,当用户双击单元格时,这个下拉列表才会出现,一旦用户选择完成,这个comboBox就会被隐藏起来,只在该单元格上显示一个文字。如果你想让这个下拉列表一直保持显示该怎么办?再举一个场景:你已经使用了QSpinBox为某一列的数字做代理,只有用户双击该单元格时,这个Spinbox的上下箭头才会出现,一旦用户选择完成,这个Spinbox就会被隐藏起来,只在该单元格原创 2021-02-04 18:12:37 · 3115 阅读 · 8 评论 -
QT模型视图MVC系列教程(5)---自定义委托Delegate编辑时显示
委托的作用是让程序员实现视图中内容的自定义展示方式和编辑方式。下面列举几个场景,这些场景适合用委托:(1)表格中要显示或编辑一列日期,默认的表格的单元格的输入框都是类似QLineEdit的一个小控件,程序员想要监控用户输入的合法性,实现起来较为繁琐。类似场景还有:某一列单元格只允许输入[1,120]之间的正整数,等等。(2)表格中有一列内容是学生的成绩,为了便于观察成绩的分布,用户希望把成绩大小展现为进度条样式,如果学生的成绩低于60分,则显示为红色。以上场景就是涉及到了单元格内容的展示原创 2021-02-03 16:12:29 · 3188 阅读 · 5 评论 -
QT模型视图MVC系列教程(4)---角色role的使用(Qt::DisplayRole 类型)
模型正在维护的数据,不仅是视图中所看到的那些,还有很多数据在视图是被隐藏的,你看不到,不代表他没有,比如,一个列表视图中,不仅会显示文字,文字前可能还会显示一个图标。其实,每一个条目,所包含的内容,不仅有文字、图标,还有很多,到底有哪些呢,看一下枚举Qt::DisplayRole 就知道了,在QT5.10中,有22个,以后随着QT版本更新,这个值可能会变化。当视图View向模型Model索要数据时,不仅要提供索引 index,还必须要提供角色role。index和role共同决定出视图到底在向Mod原创 2021-02-02 19:22:41 · 11949 阅读 · 5 评论 -
QT模型视图MVC系列教程(1)--概念解析与官方资料
在QT官方帮助文档中搜索:Model,找到:Model/View Programming 以及Model/View Tutorial 系列教程,当然看起来有些费劲,但却是最权威的资料。0、MV架构该文章来自【暴躁的野生猿】博客,如有非法转载,请读者帮忙举报下。MVC指的是Model、View、Control,模型视图控制三者分离的一种数据与用户交互的方式。Qt本质上实现的是MV结构,没有Control,其实MV架构已经足以应付大多数应用场景了。其优势是把数据的存储方式和视图的展示方式,.原创 2021-02-02 18:09:00 · 1966 阅读 · 3 评论 -
QT模型视图MVC系列教程(2)-模型数据索引QModelIndex详解
从名字可以看出,他是模型的索引,只要对模型实体(各种xxxModel的实体)施加这个索引,model就会返回数据集中对应的值,或者通过这个索引修改对应数据集中的值。类比数组就更好理解了,charbuf[8] = {'a', 'b','c','d','e'}; 给定索引3,我们就能从数据集合中读出该值为'c',或者任意修改数据集中的第3个值的值。、...原创 2021-02-01 17:51:09 · 9403 阅读 · 6 评论 -
QT UDP组播与广播
一、组播编程步骤1、接收方(1) new一个UDP socket对象(2)把socket bind到指定的IP: 端口号,因为本机会有多个IP,我们选择到底把哪个IP加入组播,如果想把本机所有的IP都加入组播,可bind这个IP:QHostAddress::AnyIPv4。(3)加入到组播IP,函数为 joinMulticastGroup(4)可随时退出该组播IP,函数为leaveMulticastGroup2、发送方与点对点的UDP编程步骤完全相同,不同之处只有一点:目标.原创 2021-01-29 19:42:07 · 3574 阅读 · 1 评论 -
qt文本转语音tts的使用方法,QTextToSpeech
这个功能已经被qt封装好了,在不同的操作系上封装了不同的方法。在win7上,qt调用的是微软讲述者(microsoft speech),这个功能在原版win中是自带的,在ghost或者阉割版win中是没有的。需要自己安装。在安装之前,先验证一下你的系统是否可用这个功能:如上图所示,打开控制面板-->文本到语音设置-->语言选择-->预听语音。如果能够正常朗读中文文字,那就说明你的电脑的TTS功能是正常的。如果不能没有声音,或者直接报错,你就必须得重新安装TTS。需要安装:原创 2020-09-28 14:09:37 · 6248 阅读 · 8 评论 -
使用QT编译[vlc-qt]项目,播放RTSP等网络视频流
vlc-qt是一个国外大佬做的基于QT和VLC的开源项目,官网:https://vlc-qt.tano.si/在他的官网上可以找到项目的源代码(在git上),以及发行版。对于开发者来说,使用他的发行版是不够的,如下图所示,只提供了有限的几个版本,如果你使用的QT或者VLC与这个发行版不一致,是无法在此基础上进行二次开发的。...原创 2020-08-21 15:14:22 · 2752 阅读 · 0 评论 -
ubuntu下QT5.13.1编译opencv2.4.13.6
下载opencv2.4.13.6的源码安装QT为避免权限问题,直接用sudo启动qt,如下图然后通过qt ->open project ,打开下载的源码的cmakeList.txt文件。打开后如下图所示:然后把[编辑构建配置]改成release模式,如下图所示。并设置好构建目录。然后修改CMAKE选项下面的CMAKE_INTALL_PREFIX的路径到你想要的位置,这个路径就是opencv编译出的库文件路径,记住他,后面要用。然后修改构建目标为:insta...原创 2020-06-19 16:18:32 · 382 阅读 · 0 评论 -
QT多线程QThread::run()与QObject::moveToThread()标准用法
目录1、使用QThread::run()2、使用QObject::moveToThread3、常见的错误编程方法QT实现多线程有两种方法:1、继承QThread类,并重写run()函数;2、写一个对象worker,声明或new一个QThread变量thread,然后把这个对象移动到子线程中:worker.moveToThread(&thread);...原创 2020-04-07 15:26:47 · 4938 阅读 · 3 评论 -
让程序自动记录编译时间、文件名、函数名、行号等,以QT为例
C/C++/ASM等源代码文件被编译时,可以通过C/C++编译器的内置宏定义,把编译时间记录下来,常用的宏有这么几个:__FILE__ 包含当前程序文件名的字符串__LINE__ 表示当前行号的整数__DATE__ 包含当前日期的字符串 ,__STDC__ 如果编译器遵循ANSI C标准,它就是个非零值__TIME__ 包含当前时间的字符串__FUNCTION__ 函数...原创 2019-11-20 18:34:25 · 1231 阅读 · 0 评论 -
QT socket TCP通信程序模板--客户端
服务器端的操作是,建立server,然后进入listen监听状态,等待客户端发起连接。客户端的编程更为简单:(1)建立tcp socket(2)把QTcpSocket的3个关键的信号槽connect起来,3个信号如下:(3)把客户端QTcpSocke对象绑定(bind)与本机端口绑定。当然,也可以不绑定,操作系统会帮我们随机绑定一个可用端口。(4)向服务器发起连接请求:voi...原创 2019-11-09 17:37:46 · 1065 阅读 · 0 评论 -
QT socket TCP通信程序模板--服务端
TCP通信,要区分服务端,和客户端。服务端的功能是,设置要监听的端口,然后等待客户端发起的连接。QT中TCP服务器端的编程步骤:(1)new一个TCP服务器 QTcpServer(2)进入listen监听状态(形参为:要监听的IP,一般填Any, 要监听的端口号)(3)一旦有客户端申请接入,服务端会产生消息QTcpServer::newConnection,在消息的处理...原创 2019-11-09 16:07:38 · 783 阅读 · 0 评论 -
QT socket UDP通信程序模板+令人疑惑的(UDP服务器/客户端)概念解析
现列出几个概念:①本地IP。对于运行在PC机上的程序,本地IP就是PC的IP,以windows为例,直接在命令行中执行ipconfig命令,即可查到本机IP,如下图:②远程IP。我们写的程序要把数据发送到哪个IP的哪个端口上,这个IP就是指的远端(远程)IP③端口号。本质上也属于协议地址的一部分,可以认为是某个IP下更细分的地址。可以这样理解,IP代表了一栋楼的楼号,那么端口号就代表了...原创 2019-11-08 15:28:55 · 4015 阅读 · 1 评论 -
QCustomPlot系列(6)-在图中插入文本框/直线箭头/图片/矩形/椭圆/游标等
效果图如下:QCustomPlot已经为我们提供了文字框QCPItemText、直线(可设置带箭头)类QCPItemLine。一、QCPItemText的基本用法:textLabel = new QCPItemText(this);//在QCustomplot中新建文字框textLabel->setPositionAlignment(Qt::AlignTop|Qt:...原创 2019-05-21 15:02:25 · 22864 阅读 · 18 评论