升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式...,然后在代码中,遇到中文字符,使用QStringLiteral("中文")进行修饰 这种方式每次新建一个class就要切出去用记事本编辑一下实在麻烦,而且每个中文字符串都要用QStringLiteral...,实在麻烦 后来有找到了个方法 第二种: 在头文件申明中加上 #pragma execution_character_set("utf-8") 一切OK了 2016-10-8补充 PS:方法2只是用在Qt5...最初的某个版本上大概是两三年前的某个版本,当初使用是可以解决中文显示问题 最近用Qt5.6 5.7两个版本,这个方法已经不行了。...各位还是继续使用方法1来显示中文字符 —————————————这是一条浪荡的分割线————————————————— 2017.3.20更新 专门找了资料,把目前测试能用的解决中文字符乱码的方法整理的一下
工作中有幸做过关于 Qt5 Json 模块向 Qt4 的移植。做过有关 Qt Json 与 JsonCpp 的对比,并做过相关的兼容工作。所以着重研究了一下有关 Json 解析器的相关内容。...注:大家常说的 QJson 其实并不是 Qt 中的模块,而是在 Qt4 没有 Json 模块的年代,一个非官方的第三方模块。对于现在 Qt 中的 Json 模块,官方称之为 Qt Json。...其实 Qt5 中的 Qt Json 模块的代码,写的可以说是严格按照 ECMA-404 协议的解析范本,没有任何自己画蛇添足的逻辑。...工作中对 JsonCpp 的兼容也只是兼容了 JsonCpp 的第1、2条。对 Qt Json 模块只要改 parse 部分。...另外一部分内容就是 Qt5 Json 向 Qt4 移植,这块的话,还是要稍微看一下源码,改动的话需要调整 Qt4 中的 QString 以及 QAtomicInt 中的一些原子操作,主要是一些琐碎细节,
其实在代码中使用这个属性,等于环境中开启 QT_AUTO_SCREEN_SCALE_FACTOR 环境变量。还有另外的环境变量支持其他的 HighDPI 功能。...这个参考文档即可 这里有一个小 tip :HighDPI 只是是根据显示器的像素密度来调整大小。在 Qt 中,用过 QFont 的人都会知道。...其实里边的内容只是一些方法的简单包装。只看堆栈调用的话: > Qt5Guid.dll!...至此基本上 Qt HighDPI 支持的代码逻辑基本找全。 小瑕疵 上边我提到过代码中的小瑕疵。就在上边那段代码上。...screen 能正常取到的前提是 QGuiApplicationPrivate::screen_list 这个列表是有内容的。而这个列表第一次被添加的时机堆栈: > Qt5Guid.dll!
http://www.cnblogs.com/tornadomeet/archive/2012/06/30/2571001.html 在上一篇博文Qt学习之路_4(Qt UDP的初步使用)... 中,初步了解了Qt下UDP的使用,这一节就学习下TCP的使用。...当然了,本文还是参考的《Qt及Qt Quick开发实战精解》一书中的第5个例子,即局域网聊天工具中的UDP聊天和TCP文件传送部分。...接收端,也即承担客户端角色的操作: 当在主界面中突然弹出一个对话框,问是否接自某个用户名和IP地址的文件传送信息,如果接受则单击yes按钮,否则就单击no按钮。...,在widget.cpp构造函数中的connect()触发槽函数 } // 关闭按钮,服务器端的关闭按钮 void TcpServer::on_serverCloseBtn_clicked() {
用于QT的一个简易日志功能模块封装。算不上强大和多高的性能,但是足够简单小巧。用于记录日志到文件够用了。单独的一个文件模块,使用时直接引入源码。想要其他功能,直接改代码即可。...,还想更简单小巧的,可以看以下这个简易模块封装。...使用方法 使用时只需工程文件.pro中包含模块源码即可。 ...项目的一个简单的日志库,将日志存入日志文件(文本文件)中。...>= QT_VERSION_CHECK(5,9,0)) QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
在工作中经常要根据 UI 提供的稿子做自绘控件,而且在新项目中,我自己基于 Qt 做了一套项目自用控件库,还会涉及到换肤,所以对 Qt 的控件绘制,着重的研究了一下。...分类 对于自绘控件的分类,我将其分为两大类: 基于 Qt 控件类派生 基于 QWidget 派生 除非是行为跟 Qt 本身的控件相差太多,或者是缺少需要的交互逻辑,否则的话尽可能从 Qt 现有的控件类派生...所以 initStyleOption 是一个保护方法,如果开发者没有对按钮状态的特殊要求,用这个方法,就可以把图标,按钮的点击状态什么的放进这个 option 中。在绘制的时候直接拿来用。...话说回来, Qt 正是因为将绘制逻辑都保存在了 style 中,所以 Qt 才可以在不同平台都表现的像一个原生控件一样,“千平台千面”。 走到这里,就不得不一探 QStyle 的究竟了。...里边关于绘制的几个方法是纯虚的,在绘制方法中,通过传进去的枚举类型,来找到对应控件的绘制逻辑。除了绘制方法,还有一些是计算绘制区域大小的方法,以及 hitTest 获取子控件的方法。
C盘中。...(5)最后到“构件套件(Kit)”中,可以看到已经有一个“桌面(默认)”,这里双击它直接进行设置,名称可以随意设置;下面编译器一项选择前面设置的MinGW;最后Qt版本选择前面添加的即可,因为调试器还没有配置...(5) 打开上图的文件夹中Assistant,这是Qt小助手,Qt中所有用到的类在这里面都有介绍,也是常用的东西之一。 ?...疑问解答: 问:为什么Qt4和Qt5的安装分开来讲呢? ...在Qt4时代,这些东西都是分开的,需要开发者们自己动手配置开发环境。而Qt5版本出来之后,将所有需要的东西都整合到了安装包中,并且环境可以自动配置,为开发者减轻了不少负担。
本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。...(末尾源代码地址) qml文件转换 下列代码是项目文件代码,会在编译之前执行; 主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.x或 importQtQuick2.x;..., 8): QT_QUICK_VERSION = 1.1 } equals(QT_MAJOR_VERSION, 5): QT_QUICK_VERSION = 2...., 8): QT_QUICK_VERSION = 1.1 } equals(QT_MAJOR_VERSION, 5): QT_QUICK_VERSION = 2....(); } } } Qt5版本编译替换后的main.qml import QtQuick 2.7 Rectangle { width: 360 height:
我们使用QUrl装载url请求的时候,往往需要写参数,但是由于Qt4与Qt5的改动导致QUrl接口也会不一样。 http://www.example.com?...key1=value1&key2=value2 Qt4写法 QUrl url("http://www.example.com"); url.addQueryItem("key1", "value1")...; url.addQueryItem("key2", "value2"); Qt5写法 QUrl url("http://www.example.com"); QUrlQuery urlQuery(url...urlQuery.addQueryItem("key1", "value1"); urlQuery.addQueryItem("key2", "value2"); url.setQuery(urlQuery); 兼容Qt4.../Qt5写法 QUrl url("http://www.example.com"); #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) // Qt4
1 栅格布局1.1 按钮布局拖入几个按钮,如图:图片选中所有按钮,右键点击布局-栅格布局:图片之后可以看到栅格布局的效果,类似计算器一样:图片1.2 栅格布局中拖入控件先拖动栅格布局到窗口:图片可以拖动按钮到栅格布局中...window) window.show() sys.exit(app.exec_())图片2 表单布局2.1 标签+输入控件拖入标签和输入控件,如下:图片选中所有的控件,右键点击布局-在窗体中布局...= QtWidgets.QLabel(self.widget) self.label_5.setObjectName("label_5") self.formLayout.setWidget...(4, QtWidgets.QFormLayout.LabelRole, self.label_5) self.lineEdit_5 = QtWidgets.QLineEdit(self.widget...) self.lineEdit_5.setObjectName("lineEdit_5") self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole
–程序中需要编译的头文件列表....SOURCES -程序中需要编译的源文件列表. FORMS – 由Qt Designer为程序创建的ui文件列表(qte2是INTERFACES)....qt这个值,表明qmake支持了qt的程序,但是还需要调整一些你程序中使用的qt 的模块.这是使用QT变量,就能达到这个目的。...QT是用来声明使用到的一些额外的模块.例如.通过下面的方法,我们使得XML和网络模块有效 CONFIG += qt QT += network xml...) 可见生成了qt可执行程序 5、执行命令:.
一、信号槽的概念类似于一些其它的编程语言或框架中的回调机制,信号槽是Qt基于C++语法新增的特性,使用起来非常方便,可以完成不同对象之间的通信。...信号槽的使用需要有以下两个条件:通信的对象必须**继承自QObject类**,**QObject是Qt所有内置类型的基类**。...参数1:**发射者**,发射者是一个对象,此对象发射信号函数,**作为信号槽的触发条件。**参数2:**信号函数**,参数1中的发射者发射出的信号函数,**作为信号槽的触发条件**。...,Qt不可能内置所有的函数,特别是槽函数,更多的情况是需要用户自定义一个槽函数来实现特定的功能,这种方式也是最常见的一种信号槽连接方式。...,现在讲解无法使用合适案例演示,因此讲解的过程中并不是最优解,属于强行使用。
1 容器布局1.1 设计容器布局先拖入一个容器Frame容器,然后拖入几个控件:图片把拖入的控件拖入容器中:图片选中容器,右键-布局-栅格布局:图片1.2 保存文件并执行保存为test007_ConFra.ui...Ui_MainWindow() ui.setupUi(window) window.show() sys.exit(app.exec_())图片2 绝对布局2.1 设计绝对布局直接把控件放到窗口或者容器中,...默认就是绝对布局;拖入如下的控件:图片2.2 保存文件并执行保存为test008_AbsLay.ui,生成test008_AbsLay.py:# -*- coding: utf-8 -*-# Form...self.textBrowser.setGeometry(QtCore.QRect(390, 180, 253, 191)) self.textBrowser.setFocusPolicy(QtCore.Qt.WheelFocus...(QtCore.Qt.ScrollBarAlwaysOn) self.textBrowser.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents
一、布局 image.png 二、引入头文件 image.png 三、声明槽函数 image.png 四、实现槽函数 image.png 五、添加信号与槽的连接 image.png 版权声明
1 水平布局1.1 按钮布局拖动几个按钮:图片选中这几个按钮,右键-布局-水平布局:图片可以看到按钮间隔等宽水平排列:图片也可从点击窗体-预览,查看布局后的效果如下:图片图片1.2 位置移动点击视图-对象查看器...,勾选打开对象查看器;图片图片点击如图所示的,就会选中所有的按钮,可以进行拖动按钮的位置:图片图片图片图片按钮的宽度和高度随着布局的变化而变化,但仍然保持等宽等距。...1.3 先布局再放按钮拖动水平布局到窗体:图片可以自行拖动布局的大小和位置,然后给布局中拖入按钮:图片图片1.4 保存文件并调用保存为HorLay.ui文件,并转为py文件:图片HorLay.py代码如下...= QtWidgets.QPushButton(self.widget) self.pushButton_5.setObjectName("pushButton_5") self.horizontalLayout...= QtWidgets.QPushButton(self.widget) self.pushButton_5.setObjectName("pushButton_5") self.verticalLayout
qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget)。...你需要指定你的对象类型、 非常复杂的语法,比如重载,参见后面。 在槽的中默认参数不在被支持。...这个上下文也被使用在线程关联性上: 这个lambda方法将会被调用在对象事件循环的线程中。 qt5中断开连接 如你可能预期的那样,在qt5中如何终止连接也会有一些新变化。...错误报告 用GCC测试的、 幸运的是,IDE能简化函数的命名,比如Qt Creator。...但我们不能在我们的API中,使用STL类型,因此一个qt函数应该被完成当复制一个std::function时。 无论如何,这是和QObject连接是不相关的。
一、在列表中显示目录,界面添加显示目录的按钮,对象名称为showDirButton: image.png 二、引入头文件 #include #include <QListWidgetItem...QListWidget选择编辑项目,操作如图: image.png 四、声明槽函数 private slots: //显示目录 void showDirSlot(); //单击列表中的项... void singleClickedSlot(QListWidgetItem *); //双击列表中的项 void doubleClickedSlot(QListWidgetItem... item->setText(fileNames.at(index)); ui->listWidgetShowView->addItem(item); } } //单击列表中的项...QListWidgetItem *item){ QMessageBox::information(this,"信息","single clicked"+item->text()); } //双击列表中的项
❝该例子演示用户界面是在运行时从程序资源中加载,并实现文本查找的功能。 ❞ 程序中的.ui界面文件都是使用QUiLoader动态加载的。...// 下面片段代码已省略部分无关代码 void TextFinder::on_findButton_clicked() { /* 需要搜索的文本 */ QString searchString...highlightCursor.charFormat()); QTextCharFormat colorFormat = plainFormat; colorFormat.setForeground(Qt...highlightCursor.mergeCharFormat(colorFormat); } } ... } 关于更多 在「QtCreator软件」可以找到: 或在以下「Qt...安装目录」找到: C:\Qt\{你的Qt版本}\Examples\{你的Qt版本}\uitools\textfinder 「相关链接」 https://doc.qt.io/qt-5/qtuitools-textfinder-example.html
❝从Qt官网看到的一篇关于Qt 6的文章,分享给大家。❞ 我们先看看Qt 6版本以前「从网络中加载图片的一般操作步骤」。 发出网络请求并等待,直到收到所有图像数据。 根据原始数据创建图像源。...具体的函数操作: QByteArray download(const QUrl &url); QImage createImage(const QByteArray &data); QImage processImage...show(processedImage); }); }); } Qt 6版本中可以这样操作。看起来是不是简便很多呢。....onFailed([] { // 错误处理 // handle any other error }); 链接: https://www.qt.io.../blog/asynchronous-apis-in-qt-6
领取专属 10元无门槛券
手把手带您无忧上云