3 龚建波

尚未进行身份认证

我要认证

熟悉C++ Qt框架,Python等

等级
TA的排名 1w+

Qt网络编程(1):QTcpSocket和QTcpServer的基本使用

0.前言本文主要讲解 Qt TCP 相关接口的基本应用,一些实践相关的后面会单独写。TCP 协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。TCP 通过三次握手来建立可靠的连接。TCP 四次挥手断开连接。TCP连接是双向的,在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。TCP 知识参考:https://blog.csdn.net/sinat_36

2020-08-02 14:40:06

Qt 及 QML 处理多个按键同时按下

1.思路想写个判断哪些方向键同时按下的逻辑,结果发现 Qt 的按键事件只能取到单个键值,而QKeyEvent::modifiers() 又只能获取 Ctrl 或者 Shift 这种辅助按键。一番百度之后,发现可以使用容器保存按键值,在keyPressEvent 添加按键值,在keyReleaseEvent 移除按键值。不过单单处理按键的按下和弹起还不够,还需要注意一些事项:A.弹起其中一个按键时,按键事件的触发会停顿一下。所以,不能在按键事件里直接处理逻辑,需要加个定时器来遍历我们的键值容...

2020-07-30 00:07:00

Qt使用QPainter绘制一个简单的3D风车

最近无聊,用QPainter画了个简单的风车,效果如下:可以看到很多地方都穿摸了,因为绘制时每个填充路径的顺序没法很好的确定,特别是如果出现两个面交叉更没法处理,我能想到的就是拆分成多个小的三角来计算,不过这样CPU的负担就太大了。还有一个没解决的是万向锁的问题,我还没搞明白,后面学懂了再回来改下。整体思路就是先定义对象树结构体,一个绘制对象可以有多个面和子节点。绘制的时候先根据当前角度和位置计算出所有节点的位置和角度,然后通过矩阵运算得到最终的坐标值。最后,根据所有面的z值进行排序,从最远

2020-07-26 22:51:30

Qt绘图:求圆和椭圆上任意角度点的坐标

0.圆相关公式在笛卡尔坐标系上,一个标准的圆是这样的:已知圆心坐标 (x0,y0),半径 R,角度 a,则圆边上点(x',y')的坐标为:C 的三角函数参数为弧度,转换如下:角度转弧度:弧度转角度:但我们知道,Qt 绘图是屏幕坐标系,起点在左上角,以右下角为正方向:(可以把计算后的 y 取反来得到想要的效果)void MainWindow::paintEvent(QPaintEvent *event){ event->accept(); ..

2020-07-20 23:56:32

Qt使用QLoggingCategory管理打印

0.简介QLoggingCategory在运行时表示某个日志记录类别(由字符串标识),可以将消息类别配置为启用或禁用。Qt有四种基础的消息类型QtDebugMsg、QtInfoMsg、QtWarningMsg、QtCriticalMsg,外加两个特殊的QtFatalMsg和QtSystemMsg,一般操作四个基础的类型。1.基本使用头文件中使用宏声明#include <QLoggingCategory>Q_DECLARE_LOGGING_CATEGORY(mylog)源

2020-07-15 23:47:34

Python3 自定义 sort() 的排序规则

在 Python2 种,sort 和 sorted 可以通过关键字参数 cmp 指定排序规则,但在 Python3 中这个参数给去掉了:Python2: list.sort(cmp=None, key=None, reverse=False)Python3: list.sort(key=None, reverse=False)其中,参数 key 指定带有一个参数的函数,用于从每个列表元素中提取比较键;参数 reverse 可以指定为逆向排序。根据 Python3 的文档:https://d

2020-07-13 21:08:55

Qt WebSocket的基本使用

(只是作为个人纪录,如果你要使用的话在 Qt 示例里搜 websocket 看官方 Demo 就行了,代码量不多)0.前言(参见Qt文档说明)WebSockets 是一种通过单个 TCP 连接提供全双工通信信道的 web 技术。2011年,IETF 将 WebSocket 协议标准化为 RFC 6455 。Qt 提供的 QWebSocket 既可以用于客户端应用程序,也可以用于服务端应用程序,接口大部分和 QTcpSocket 一致。QWebSocket 当前不支持 WebSocket 扩展和

2020-07-12 22:22:01

《QDebug 2020年7月》

一、Qt Widgets 问题交流1.QComboBox 下拉框设置透明样式不生效Popup默认是有阴影的,也没法设置透明,可以给下拉框中ListView的parent设置透明效果:combox->view()->parentWidget()->setWindowFlags(Qt::Popup|Qt::FramelessWindowHint);combox->view()->parentWidget()->setAttribute(Qt::WA_Trans

2020-07-09 08:36:27

Qt自定义一个下拉框(使用基础组件组合)

0.前言Qt提供了一个QComboBox下拉框组件,但是对于一些自定义样式的需求实现起来并不方便,很多东西还得去倒腾源码,还不如直接用基础的组件自己来实现一个下拉框。不过,自己组合的组件对样式表的支持不是很好,而且水平不够通用性差,所以我只在一些定制化程度高的需求才使用这种方式。1.实现思路与问题首先是下拉框的文本框和按钮,我使用QLineEdit+QPushButton;然后弹出框我分为两部分,一是弹出框Widget容器,二是弹出框中的内容为了后续的自定义抽象了一个简单的基类,使用的时候继承基

2020-07-07 23:34:02

OpenGL固定管线设置投影矩阵

0.前言OpenGL如果没有设置投影矩阵,默认使用一个坐标范围在[-1.0,1.0]的正交投影。如果使用固定管线编程时要切换投影矩阵,步骤如下://切换当前矩阵为投影矩阵glMatrixMode(GL_PROJECTION);//将当前矩阵置为单位矩阵,即抛弃之前的更改//OpenGL是状态机,会保存之前的状态glLoadIdentity(); //设置投影矩阵//如:设置为正交投影//void glOrtho(GLdouble left, GLdouble right, GLdou

2020-07-05 23:57:35

PyQt5,属性与属性动画

0.前言Qt框架提供了一个基于其元对象系统的属性系统,应用也比较广泛,如属性动画、样式表属性、QML属性等。Python3也有一个property属性,但和Qt属性不是通用的。我们可以动态设置和获取QObject及子类对象的属性: w.setProperty('size',QSize(600,600)) print(w.property('size'))除了Qt预定义的一些属性,也可以添加自定义的属性。使用setProperty动态添加,或者用pyqtProperty提前定义

2020-06-30 23:36:24

关于VS Code调试Python时的执行路径

0.问题在Python中按F5执行py文件时,默认是从当前打开的文件夹目录为执行路径。如果main入口在文件夹顶层还好,如果在子文件夹就会有些问题,比如相对路径导入模块时会报错。如下,我执行子文件夹目录的moduleb.py,就报错说找不到另一个文件夹的模块(在main.py导入moduleb是正常的):通过打印当前执行目录,可以发现路径还在VS Code打开文件夹的顶层目录:import osprint(os.getcwd())百度了一下VS Code在当前文件目录执行的.

2020-06-27 14:41:53

QFuture的使用:多线程与进度条

介绍QFuture 类可以用来获取异步计算的结果(类似 std::future),一般配合 Qt Concurrent 模块和 QFutureWatcher 类工作。在 Qt Creator 中搜索 concurrent 可以看到一些相关示例。官方示例中, QFuture 一般和QFutureWatcher 配合,因为 QFuture 不是 QObject 子类,没有信号槽。但是 QFuture 相关的接口会触发QFutureCallOutEvent 事件,QFutureWatcher 接收该事件...

2020-06-25 15:10:11

QML防止鼠标事件被过滤(窃取)

如果将 MouseArea 放置在筛选 child 鼠标事件的 Item(例如 Flickable、SwipeView )中,则当父 Item 识别出手势(例如滑动)时,鼠标事件可能会从 MouseArea 中被过滤。如果将 preventStealing 属性设置为 true,则任何 Item都不会窃取该 MouseArea 的鼠标事件。(注意,一旦某 Item 开始窃取事件,将 preventStealing 设置为 true 后,直到下一次相关事件才生效)这个属性是 MouseArea 的,那么.

2020-06-24 00:13:26

QTableView拖拽交换行、列、单元格

Qt Model-View 拖拽表头换行、列比较容易,只需要设置 QHeaderView 的setSectionsMovable 为 true 。但有时也需要拽拽内容区域完成交换(也有和组件外进行拖拽交互的,本文不涉及)。要完成这个功能,除了对 View 进行几个设置,重头戏在于 Model 的定制。无论是继承 QAbstractTableModel ,或是QStandardItemModel 都是可以实现的,在我的 Demo 中两个都进行了测试。效果图 GIF:首先是 QTableView..

2020-06-23 22:26:52

QML实现桌面右下角弹窗

实现效果这次制作的桌面右下角弹窗,主要功能有透明度和位置动画、定时关闭、鼠标放在上面暂留。实现思路首先,我们需要获取桌面大小,然后 move 到右下角去,这里借助的 Screen://初始位置,在屏幕右下角x: Screen.desktopAvailableWidth-widthy: Screen.desktopAvailableHeight对于动画,我用的属性动画配合动画组。显示时先启动显示动画,动画结束启动关闭定时器,关闭时调用关闭动画。对于内容区域,我直接放了一个 L

2020-06-21 15:16:33

Qt实现桌面右下角弹窗

实现效果这次制作的桌面右下角弹框,主要功能有透明度和位置动画、定时关闭。(目前还没有做鼠标放在上面不自动关闭的功能)实现思路首先,我们需要获取桌面大小,然后 move 到右下角去,这里借助的 QScreen:QScreen * screen = QGuiApplication::primaryScreen();const QRect desk_rect = screen->availableGeometry();对于动画,我用的QPropertyAnimation ..

2020-06-21 14:57:59

关于Qt模态窗口的设置

QWidget 模态模态窗口会阻止其他窗口的输入型事件(如获取焦点),但是模态窗口的子窗口不会被限制。(设置 setAttribute(Qt::WA_showModal, true); 的方式Qt4.5已废弃,略过)目前,Qt中设置窗口模态是通过 QWidget 的 setWindowModality() 函数:参数有三种枚举:Qt::NonModal :(=0)表示该窗口不是模态窗口,不会阻止其他窗口的输入。 Qt::WindowModal :(=1)表示该窗口是单个窗口层

2020-06-21 10:39:19

QDataWidgetMapper,数据Model与组件属性的绑定

0.前言QDataWidgetMapper类提供数据model与widget属性之间的映射,可以看成是Qt ItemView的Item现在成了一个已有的widget组件,并且通过绑定widget的属性来达到获取和设置对应属性值的功能,以此完成与model数据得隐射。如果你会QML的话,会发现这就类似于QML的属性绑定。Qt属性系统是基于Qt元对象系统的,一个属性可以使用函数QObject::property()和QObject::setProperty()进行读写,不用知道属性所在类的任何细节,除了

2020-06-15 23:27:05

QML ListView中section分组属性的基本使用,以及设计一个分组导航

1.看文档QML中的ListView提供了一组section属性,可以看作是对Model内容的分组/分节展示。根据文档,section有四个属性:section.property该属性指定了以Model Item的哪个属性来进行分组;section.criteria该属性有两个枚举值:ViewSection.FullString(默认值):根据section.property对应的字符串值分组ViewSection.FirstCharacter:根据section.pr..

2020-06-14 20:41:50

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取