
QT经验总结
老王敲代码
五年C++开发经验,专注Qt编程,职场老司机,分享我和代码的故事。
展开
-
QWebEngineView右键菜单翻译
在代码中实现this->pageAction(QWebEnginePage::Back)->setText(QStringLiteral("后退"));this->pageAction(QWebEnginePage::Forward)->setText(QStringLiteral("前进"));this->pageAction(QWebEnginePage::Reload)->setText(QStringLiteral("刷新"));this->page原创 2022-03-27 14:34:22 · 1381 阅读 · 1 评论 -
Qt增加QTextEdit右键菜单增加中文翻译
qt右键菜单增加翻译内容原创 2022-03-27 14:26:36 · 1302 阅读 · 1 评论 -
Qt笔记28:QJsonObject和QByteArray的相互转换
/** * @brief 字节数组转Json * @param byteArray * @return */QJsonObject getJsonFromByteArray(const QByteArray &byteArray){ QJsonParseError jsonParseError; QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray, &jsonParseError); QJs原创 2021-05-19 22:45:02 · 2200 阅读 · 0 评论 -
Qt笔记27:QGraphicsView、QGraphicsScene坐标系问题,QGraphicsView缩放
(1) QGraphicsView、QGraphicsScene坐标系问题,场景初始状态(0,0)在QGraphicsView的中间,随着添加item,(0,0)位置会发生变化。想要scene和view保持同样大小可采用方法正确的解决方案是setSceneRect(0,0,W,H);而且需要W>=static_cast< QWidget *>(graphicsScene->parent())->size().width()H>=static_cast< QWi原创 2021-05-19 08:53:51 · 2310 阅读 · 0 评论 -
Qt笔记26:qt在构造函数获取窗口大小失败
不能在构造函数中获取窗口的大小,因为还未初始化好,获取的不正确;推荐在resizeEvent方法里获取。原创 2021-05-19 08:49:47 · 580 阅读 · 1 评论 -
Qt笔记25:QFile读写中文乱码:指定文件编码方式
QFile读写中文乱码:指定文件编码方式解决方法用QTextStream来读写文本QTextStream in(&file);in.setCodec("UTF-8"); // 设置文件的编码格式为UTF-8QString line = in.readLine(); // 此时以UTF-8的方式从文件中读取内容,结果正常...原创 2021-05-19 08:48:15 · 5917 阅读 · 0 评论 -
Qt笔记24:Qt Designer插件
QtDesigner导入自定义插件Plugin,dll存放路径,D:\Qt\Qt5.13.0.x86\5.13.0\msvc2017\plugins\designer原创 2021-05-19 08:44:23 · 299 阅读 · 0 评论 -
Qt笔记23:qt运行时库vcredis位置
QtCreator下lib文件夹中有响应版本的vcredis版本或者D:\Qt\Qt5.7.0\vcredist文件夹中的原创 2021-05-19 08:43:40 · 242 阅读 · 0 评论 -
Qt笔记22:样式表相关问题
(1)子类设置样式表不生效,是因为需要设置一个属性setAttribute(Qt::WA_StyleBackground, true);(2)样式表中涉及到命名空间的用–代替::namespace ns { class MyPushButton : public QPushButton { // ... } } // ... qApp->setStyleSheet("ns--MyPushButton { background: yellow;原创 2021-05-19 08:42:26 · 268 阅读 · 0 评论 -
Qt笔记21:使用了未定义的类型
使用了未定义的类型,可能是头文件的#define存在重复的情况原创 2021-05-19 08:38:51 · 2798 阅读 · 0 评论 -
Qt笔记20:无法解析的外部文件
无法解析的外部文件:1、检查pro文件中是否进入了正确的lib;原创 2021-05-19 08:38:16 · 244 阅读 · 0 评论 -
Qt笔记19:合理在头文件中使用类声明(class)
建议在cpp中包含头文件,在include文件中类使用class声明,一方面避免重复包含,提高编译效率;另一方面避免形成包含闭环,运行时找不到原创 2021-05-19 08:36:45 · 1289 阅读 · 0 评论 -
Qt笔记18:qt拖拽数据QMimeData
Qt qt拖拽数据QMimeData,可以重写QMimeData mimmData(const QList<QListWidgetItem>)const;方法原创 2021-05-19 08:35:16 · 749 阅读 · 0 评论 -
Qt笔记17:Qt如何使用Json传输图片(使用Base64编码)
我们有时候会用json传输数据,那么如何使用json传输图片呢,这里使用Base64编解码。(1)发送放编码://从图片文件中读取QByteArray img = file.readAll();//转换成base64编码QByteArray img64 = file.readAll().toBase64();//打包进jsonjsonObj.insert("img", QJsonValue::fromVariant(img64));(2)接收方解码://从json中读取为base64原创 2021-05-19 08:31:40 · 2466 阅读 · 0 评论 -
Qt笔记16:继承QGraphicsItem不能检测到鼠标事件解决方法
问题:继承QGraphicsItem不能检测到鼠标事件原因:有可能是边界方法重写的不对[pure virtual] QRectF QGraphicsItem::boundingRect() const解决:在子类中重写QRectF boundingRect()方法原创 2021-05-19 08:28:22 · 1357 阅读 · 0 评论 -
Qt笔记15:qt如何优雅的退出子线程
//优雅的退出线程if(thread->isRunning()){ thread->quit();//退出线程 thread->wait();//等待退出 delete thread;//删除线程 delete networkObj;//删除对象}原创 2021-05-19 08:25:50 · 2943 阅读 · 0 评论 -
Qt笔记14:Qt网络编程
(1) 客户端本地可以连接服务器,局域网不能连接问题:防火墙端口、杀毒软件(2) 如果把网络数据收发放到子线程里,线程while(1)循环很快,在该循环中,循环过快,导致connect来不及处理数据,使用waitForReadyRead()将循环进行阻塞,当有数据读入时取消阻塞,进入下一轮循环。尽量不要使用死循环,可以用信号或者定时器。...原创 2021-05-19 08:23:54 · 185 阅读 · 0 评论 -
Qt笔记13:qt中多线程之一(MovetoThread方法)
QT多线程有两种方法实现1、继承QThread,子线程内容在重写的run方法里执行,启动线程用start(),run()方法中尽量不使用死循环,run()方法中要调用exec()才能启动事件循环;2、继承QObject类,然后使用movetoThread()方法,连接线程的started()信号,在槽中处理子线程的内容。在新的版本中,官方更推荐第2种方法,第2种方法的使用如下://(1)创建操作对象,该类继承自QObject类MyTableNetworkObject networkObj;//(原创 2021-05-18 08:55:09 · 617 阅读 · 0 评论 -
Qt笔记12:qt非阻塞延时
非阻塞的延时QEventLoop+QTimer延时五秒示例:QEventLoop eventloop;QTimer:singleShot(5*1000,&eventloop,&QEventloop::quit);eventloop.exec();原创 2021-05-18 08:45:14 · 666 阅读 · 0 评论 -
Qt笔记11:qt如何设置应用程序图标和可执行程序图标
我们使用Qt开发了桌面程序之后,很多时候要修改窗口标题和应用程序图标,那么如何来设置呢?1: 首先准备个ICO图标。注意只能是ico格式的图标,如果不是可以使用ps或者网页在线图标转换。例如:myapp.ico将myapp.ico放到工程目录下,课.pro同级目录即可(也可以放在别的路径,只要相对路径正确即可)2:用记事本新建个文件里面就写一行:IDI_ICON1 ICON DISCARDABLE “myapp.ico”保存改名为 myapp.rc文件并把它放到你的原创 2021-05-18 08:30:25 · 2601 阅读 · 0 评论 -
Qt笔记10:如何使用qt计算屏幕物理尺寸
我们以计算A4纸在屏幕上显示的像素来进行示例:转换方式:显示器逻辑分辨率 = 像素/英寸 = 像素/(2.54 * 厘米) = 像素/(2.54 * 毫米 /10)像素= 分辨率 * 英寸 = 分辨路 * (2.54 * 厘米) = 分辨率 * (2.54 * 毫米 / 10) QScreen *screen = windowHandle()->screen(); qreal logicalDotsPerInch = screen->logicalDotsPerInch();//原创 2021-03-11 23:45:07 · 1365 阅读 · 0 评论 -
Qt笔记9:Qt中浮点数比较,安全的进行浮点数比较
由于计算机中数据的存储到最底层,只有1和0,所以会有一个精度的问题。我们在比较浮点数的时候,在A>B或者A<B的时候,我们可以正常用大于号(>)或者小于号(<)进行比较;但是我们在判断两个浮点数是否相等的时候,则不能直接用==号进行比较,因为这样会有风险那么如何安全的进行浮点数的比较呢,就用到了Qt的一个方法bool qFuzzyCompare(double p1, double p2),使用方法如下: double value1 = 5.323285194326; dou原创 2021-03-11 23:39:03 · 4565 阅读 · 0 评论 -
Qt笔记8:如何遍历树形结构(选择遍历,节点选择效果)
用到的信号是void itemChanged(QTreeWidgetItem* item, int column);我们在使用Qt的树控件QTreeWidget的时候,经常会遇到需要检查当前节点的选中状态;一般一个节点有三个状态:A:当前节点以及所有子节点都被选中B:当前节点以及所有子节点都未被选中C:当前节点的子节点有被选中的,也有未被选中的根据这三个状态我们知道,当前节点状态会影响父节点的状态,同时呢,当前节点也会收到子节点的影响。根据以上特性,会用到递归算法,有些朋友可能代码写着写着就迷原创 2021-03-11 23:28:52 · 1802 阅读 · 0 评论 -
Qt笔记7:QString采用科学计数法、非科学计数法显示
在Qt中,界面经常会用来显示一些结果,当显示的数据值过大时,QT会直接转换成科学计数法显示。但是在有些项目中,对数据有特定的显示要求,有时候需要用科学计数法显示,有时候一定要用非科学计数法显示。那么该如何设置呢我们可以通过下面的方式设置: double value =987654321.12345; //显示科学计数法:'e'表示科学计数法,2代表保留两位小数 QString::number(value, 'e', 2); //显示非科学计数法:'f'表示非科学计数法,2代表保留两位小原创 2021-03-11 23:18:05 · 7177 阅读 · 0 评论 -
Qt笔记6:堆和栈的区别
看了理论如果不清楚可以看下边代码: int a = 0; //全局初始化区 char *p1; //全局为初始化区 int main(int argc, char *argv[]) { int b; //栈区 char s[] = "abc"; //栈区 char *p2; //栈区 char *p3 = "123456";//"123456/0"在常量区,p3在栈区 static int c =.原创 2021-03-11 23:11:10 · 759 阅读 · 0 评论 -
Qt笔记5:如何把按钮设置默认状态
想要实现如下图确定按钮的默认选中状态:方法:在Qt Designer点击确定按钮,然后在右侧属性栏找到default这个属性,按下图进行设置,也可以在代码中设置。原创 2021-03-11 23:02:34 · 2431 阅读 · 0 评论 -
Qt笔记4:QTableWidget排序功能
QTableWidget排序功能(1)、注意默认是按照文本方式来排序的,对于想要数据排序的设置如下:方法一:设置QTableWidgetItem的setData方法,第一个参数是Qt::EditRole, int value = 20; QTableWidgetItem *item = new QTableWidgetItem; //这样设置,排序是按照数字来排 item->setData(Qt::UserRole,value);方法一有一个问题,当double数据太长时,数据类型会自原创 2021-03-11 22:58:58 · 7136 阅读 · 13 评论 -
Qt笔记3:MySQL的my.ini文件中文乱码或不识别
MySQL的my.ini文件中文乱码或不识别,解决步骤:(1)MySQL的my.ini文件只支持 编码格式为ASIN,要将my.ini设置为ASIN格式(2)Qt中写入my.ini文件要进行设置,设置为GBK格式,如下图原创 2021-03-11 22:47:17 · 393 阅读 · 0 评论 -
Qt笔记2:如何处理路径中的空格和中文
(1)空格:路径加双引号 (2)中文:toLocal8Bit ...原创 2021-03-11 22:42:11 · 548 阅读 · 0 评论 -
Qt笔记1:Qt中文显示乱码如何处理
中文显示乱码问题处理方式在文件头部加入 #pragma execution_character_set(“utf-8”)如图:原创 2021-03-11 22:36:25 · 218 阅读 · 0 评论