首页 Qt 学习之路 2 《Qt 学习之路 2》目录

《Qt 学习之路 2》目录

197 31K
1.
2. Qt 前言
3. Hello, world!
4. 信号槽
5. 自定义信号槽
6. Qt 模块简介
7. MainWindow 简介
8. 添加动作
9. 资源文件
10. 对象模型
11. 布局管理器
12. 菜单栏、工具栏和状态栏
13. 对话框简介
14. 对话框数据传递
15. 标准对话框 QMessageBox
16. 深入 Qt5 信号槽新语法
17. 文件对话框
18. 事件
19. 事件的接受与忽略
20. event()
21. 事件过滤器
22. 事件总结
23. 自定义事件
24. Qt 绘制系统简介
25. 画刷和画笔
26. 反走样
27. 渐变
28. 坐标系统
29. 绘制设备
30. Graphics View Framework
31. 贪吃蛇游戏(1)
32. 贪吃蛇游戏(2)
33. 贪吃蛇游戏(3)
34. 贪吃蛇游戏(4)
35. 文件
36. 二进制文件读写
37. 文本文件读写
38. 存储容器
39. 遍历容器
40. 隐式数据共享
41. model/view 架构
42. QListWidget、QTreeWidget 和 QTableWidget
43. QStringListModel
44. QFileSystemModel
45. 模型
46. 视图和委托
47. 视图选择
48. QSortFilterProxyModel
49. 自定义只读模型
50. 自定义可编辑模型
51. 布尔表达式树模型
52. 使用拖放
53. 自定义拖放数据
54. 剪贴板
55. 数据库操作
56. 使用模型操作数据库
57. 可视化显示数据库数据
58. 编辑数据库外键
59. 使用流处理 XML
60. 使用 DOM 处理 XML
61. 使用 SAX 处理 XML
62. 保存 XML
63. 使用 QJson 处理 JSON
64. 使用 QJsonDocument 处理 JSON
65. 访问网络(1)
66. 访问网络(2)
67. 访问网络(3)
68. 访问网络(4)
69. 进程
70. 进程间通信
71. 线程简介
72. 线程和事件循环
73. Qt 线程相关类
74. 线程和 QObject
75. 线程总结
76. QML 和 QtQuick 2
77. QML 语法
78. QML 基本元素
79. QML 组件
80. 定位器
81. 元素布局
82. 输入元素
83. Qt Quick Controls
84. Repeater
85. 动态视图
86. 视图代理
87. 模型-视图高级技术
88. Canvas
89. Canvas(续)
90. 粒子系统
91. 粒子系统(续)

197 评论

小马 2012年9月1日 - 11:14

楼主的贡献是伟大的,致以崇高的敬意! 😎

回复
DevBean 2012年9月1日 - 13:52

谢谢了啊

回复
wxf 2012年10月22日 - 14:42

建议豆子增加构建qt5环境的文章。菜鸟表示搞不定。。

回复
DevBean 2012年10月23日 - 09:05

现在 Qt5 的 Beta 已经发布了,可以安装尝试下:http://releases.qt-project.org/qt5.0/beta1/

回复
www 2013年1月15日 - 17:53

不得不赞叹博主的奉献精神!向博主致敬!

回复
豆子 2013年1月16日 - 09:49

过奖过奖

回复
jinlingren1122 2013年1月30日 - 18:53

😉 太好了

回复
豆子 2013年1月31日 - 15:43

多谢!

回复
gavin 2013年2月1日 - 17:03

豆子你好,看了您这份教程有几天了,写得非常好。我自己也实现了一个简单的画板程序,但是不知道如何发布。程序只能在creator中运行,在debug或release文件夹中双击exe都会提示缺少dll,我就把缺少的dll都复制进去。然后双击exe,结果是什么反应也没有。以为是运行后瞬间退出,所以就在main.cpp中添加创建文件的代码,发现并非运行后退出,而是根本没运行,这是为什么?该怎么办?望指点。

回复
great 2013年2月3日 - 10:24

有GUI对吗?需要platforms插件 创建一个platforms文件夹 搜索一下qwindows.dll(release版本)或qwindowsd.dll(debug版本),复制进去就好了

回复
豆子 2013年2月5日 - 15:03

你说的是 Qt5 吗?Qt4 貌似是不需要的

回复
gavin 2013年2月11日 - 09:43

Qt 4 确实可以,但是对于5,将platforms放在exe同个文件夹吗,还是不行啊。我把整个plugins文件夹复制过来也不行

回复
豆子 2013年2月11日 - 16:27

两个都需要的,你可以看看文档:http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html

回复
豆子 2013年2月5日 - 15:05

如果依旧没有运行,尝试在 cmd 中运行,可能会有错误信息出现;如果是 Qt5,参考下 great 的回复?

回复
hang 2013年4月7日 - 22:57

太棒了!感谢主人花那么多时间精力分享学习过程,通俗易懂!

回复
unique 2013年4月9日 - 14:14

❓ 这些文章都太有用了,好好拜读。btw 我的问题是:我安装了qt5, creator里面写代码不能单步运行,提示调试器未设置。我在工具-选项-构建与运行中 看到貌似我机器里没有cdb调试器(“管理”)按钮时灰色的,怎么解决这个问题?不能单步运行太痛苦了。

还有一个不理解的地方,我下载了qt-vs-addin-1.2.0-opensource.exe(这个exe我之前运行过) 但是vs中仍然运行不了qt 提示没有设置version,怎么解决?

如果能出一个关于qt5版本的环境搭建的文章就好了!万事开头难啊!

回复
豆子 2013年4月9日 - 20:01

QtCreator 的 CBD 需要自己设置,可以查看文档:http://qt-project.org/doc/qtcreator-2.7/creator-debugger-engines.html;Qt VS Addon 添加之后,在菜单中有个 Qt 的菜单,里面可以设置 Qt 版本,你找找看。

回复
渡世白玉 2013年4月10日 - 10:47

😛 😛 😛 😛 😛
博主威武、、太需要了、、qt5现在几乎没什么中文资料,对于我这看到英文头痛的人来说,这是福利啊、、、

回复
Rui-huai Zhang 2013年4月24日 - 15:54

请问有没有打算写一些Qt5 Animation的东西呢?

回复
豆子 2013年4月25日 - 08:57

有是有,打算将这个系列做成一个全面的教程,不过最近在帮忙做一个网站,很少更新,等忙过一段落就好了的~

回复
Rui-huai Zhang 2013年4月25日 - 19:49

期待,支持!

回复
seeking 2013年4月25日 - 18:12

您好,我在Ubuntu12.04下就安装了qt-linux-opensource-5.0.1-x86-offline.run,测试运行根本就行不通。请问我还需要安装什么东西吗?

回复
seeking 2013年4月25日 - 22:25

您好,我在Ubuntu12.04下就安装了qt-linux-opensource-5.0.1-x86-offline.run,测试HelloWord运行出现如下错误提示:
/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
make: Leaving directory `/home/du/FirstApp-build-Desktop_Qt_5_0_1_GCC_32bit-Debug'
make: *** [FirstApp] Error 1
22:21:36: 进程"/usr/bin/make"退出,退出代码 2
Error while building/deploying project FirstApp (kit: Desktop Qt 5.0.1 GCC 32bit)
当执行步骤 'Make'时。
请问我还需要安装什么东西吗?

回复
豆子 2013年4月26日 - 09:09

cannot find -lGL 错误信息是没有找到 GL 库,是不是没有安装 OpenGL 的开发库?

回复
豆子 2013年4月26日 - 09:06

这个我没有测试过,你到网上搜一下呢?一般而言只要安装了 GCC 就可以了,我记得 ubuntu 默认是不安装这个的。

回复
phnix 2013年4月26日 - 10:44

ubuntu下默认安装gcc,但只有c编译器,不带g++,g++要单独安装。 😀

回复
豆子 2013年4月27日 - 09:01

这个不大了解,之前一直使用的是 openSUSE。感谢告知!

回复
seeking 2013年4月27日 - 13:18

Ubuntu下我使用的是g++ 4.7

回复
seeking 2013年4月26日 - 12:23

实在是太感谢您了!一句话帮我解决了纠结几天的问题。这个错误就是因为没有安装OpenGL的原因。再一次的感谢您。

回复
Jakes 2013年4月26日 - 19:36

感谢你出的这系列教程。有没有兴趣搞QtQuick2的教程呢? 😛

回复
豆子 2013年4月27日 - 09:00

肯定会的,不过计划是放在 C++ 部分之后。

回复
lumm 2013年5月10日 - 14:53

谢谢小豆子

回复
JJLee 2013年7月31日 - 18:00

请问下楼主QT里面如何读写XML文件?希望楼主能给个思路,最后能够写了简单的小程序给我看看,万分感谢啦!邮箱:357059570@qq.com

回复
豆子 2013年8月1日 - 09:01

59 开始的几章都是关于 XML 的处理的部分,可以关注下

回复
JJLee 2013年8月1日 - 09:24

好的,那59是还没更新到吧

回复
豆子 2013年8月1日 - 15:22

现在第一篇就是59,目录刚刚更新

回复
JJLee 2013年8月1日 - 15:26

看到啦!楼主实在太好人,太感谢啦!

gengjiawen 2013年8月5日 - 13:46

请问有没有整理的pdf的文档啊

回复
豆子 2013年8月7日 - 11:22

这个目前还没有,不好意思

回复
tux 2013年8月12日 - 01:46

豆子老师你好(这里就先称您为老师),初学GUI 编程,当初知道qt跨平台于是就选择了这个,由于之前并没有学习过qt以前的版本,本以为qt想下兼容,刚才那个别人写的qt3的程序直接放到qt中,qt5 出现时间较短,市面有什么书籍?我应该如何去学习呢?一眼望去,qt 就是个庞然大物,怎样去下爪子呢?

回复
豆子 2013年8月12日 - 14:50

Qt3 和 Qt4 已经不兼容了(几乎所有的类都有重写,并且 API 也不兼容),Qt3 移植到 Qt4 有两种方法:第一,使用 Qt4 提供的 qt3support 模块,继续在 Qt4 中使用 Qt3 的类,不过所有的类前缀都要改成 Q3;第二,重新用 Qt4 的类重写程序。官方推荐重写代码,因为 Qt5 已经把 qt3support 移除了,也就是完全不支持 Qt3 的代码。由于 Qt5 目前市面上的书很少,并且 Qt5 与 Qt4 大致兼容,只需要少量修改代码,整体思路还是一致的,改进不如 Qt4 和 Qt3 那么激进,所以如果重头开始学习,直接学 Qt4 最好。相关书籍,比如官方推荐的《C++ GUI Programming with Qt4, 2nd Edition》就可以了。

回复
xuefu 2013年8月22日 - 19:12

豆子老师,你好。初学Qt4,写了一点GUI程序,想试试给这个小应用程序静态编译,不用Qt的SDK就能运行,网上找了好多教程都感觉好麻烦,还要先静态编译安装Qt,,,这里想请教一下,怎么在ubuntu 12.04下静态编译自己写的程序,,,会一点shell知识,希望能够像大多数开源软件一样能实现./configure;make;sudo make install三步安装。。。谢谢

回复
豆子 2013年8月23日 - 09:06

Qt 官网提供的二进制安装包都是动态链接的,如果你需要静态连接,必须自己编译 Qt。大致就是 CONFIG += staticlib 之类,按照网上教程应该就差不多了。至于为什么 Qt 不提供官方的静态库,主要是因为 Qt 的 LGPL 授权的限制。

回复
xuefu 2013年8月24日 - 15:25

谢谢豆子老师,Qt-4.8.5已经静态编译好了,参考网上的一个教程也能够静态编译自己写的程序,可是又出现了一个问题,因为用到了mysql,导致

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:

这个怎么把QMysql驱动也编译进去啊?

回复
豆子 2013年8月26日 - 09:08

QMySql 的驱动默认不被编译,但是你可以在 src 文件夹下找到它的源代码,依然按照静态编译的配置单独编译这个驱动即可

回复
xuefenfg 2013年9月5日 - 19:51

p= new QMediaPlayer(this);
p->setMedia(QUrl::fromLocalFile(QDir::currentPath()
+"/release/backmusic.wav"));
p->play();
p->setVolume(100);

这是我播放音乐的代码,在Qt Creator里头能出声音。加入.dll后单独运行就不出声了。
请问是setMedia()有误吗?

回复
豆子 2013年9月6日 - 09:48

具体问题不大清楚,你可以试试输出路径看看对不对,或者是看看 dll 有没有成功加载

回复
恒古炎 2013年9月11日 - 18:59

豆子哥,我学习QMainWindow类的过程中添加了一个QWidget,为了先测试,这个QWidget是放在一个类的,同时也在同一个类里面定义了一个QPushButton和QLineEdit,然后我用布局把这两个控件加到了QWidget中,之后再把QWidget加到了QMainWindow,同时在构造函数中把click()作为信号,然后把setEditText()作为槽,但是程序运行说没找到按钮。
请问同一个类中放在不同容器中的控件就不能用信号槽吗?

回复
豆子 2013年9月12日 - 15:30

可以使用的,估计是别的什么问题。比如你在 QWidget 中的 button,在 QMainWindow 中的 connect() 函数应该改为 widget->button 等等问题

回复
莫上山 2013年9月23日 - 22:49

大神能不能分享一些qt5程序的源码,网盘之类上面,大家都能下载看看。。跪谢

回复
豆子 2013年9月24日 - 16:38

目前没有专门的 Qt5 代码,不过这里的代码应该都可以在 Qt5 编译的

回复
恒古炎 2013年9月27日 - 11:05

我想把exe文件给没有qt环境的电脑用 请问除了相应的头文件dll之外,还需要什么dll呢? os:win8 编辑器:qt createt

回复
豆子 2013年9月27日 - 14:18

你可以在文档中找到答案:http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html

回复
恒古炎 2013年9月27日 - 20:32

感谢 已经可以运行了,但是又出现一个问题。OTL,我的系统是win8 64位的,release版本只能在64位Windows成功运行,请问32位版本需要重新编译吗?

回复
豆子 2013年9月28日 - 15:13

是的,32 位和 64 位的应用必须编译两个不同的版本,这个是无法避免的,即便二者的编译器也是不一样的。在安装编译器的时候一般会有选项是安装 32 位版本还是 64 位版本

回复
小胖子 2013年10月3日 - 16:36

👿
开始学习QT
就跟着这个教程走了
希望能够有所收获。
谢谢豆子这么辛苦的写这个

回复
外星人 2013年10月4日 - 12:11

非常感谢。。。不过我下载的是QT5.1 这教程能用吗

本人菜鸟一个。。

回复
豆子 2013年10月8日 - 13:21

Qt5.1 和 Qt5.0 的代码是一致的,没有区别,可以正常使用

回复
jeeyoo 2013年11月5日 - 16:39

😛
豆子老师,请教您一个问题:
我在 .pro文件中 使用

DLLFiles.path = release
DLLFiles.files += $$PWD/dll/da.dll
INSTALLS = DLLFiles

本意是想把源代码目录里的dll目录下的dll文件拷贝到release中,但一直没有成功.请教豆子老师,该如何实现.

多谢~~

回复
豆子 2013年11月5日 - 19:30

这个我也不大清楚,你可以用 message() 函数输出下 $$PWD 的值看看对不对,然后把 release 前面也加上 $$PWD 做绝对路径试试看

回复
恒古炎 2013年11月8日 - 21:53

lol 《访问网络4》找不到页面了 不知道豆子老师收到了刚刚的回复没有

回复
恒古炎 2013年11月10日 - 21:08

请问Qt5怎么用QNetworkAccessManager 实现FTP?

回复
豆子 2013年11月11日 - 09:30

目前只能利用 QNetworkAccessManager 发送 FTP 命令自己解析。你可以继续使用 QFtp 类,这个类目前不随 Qt 发布,而是作为一个独立的模块,但是依然可以继续工作

回复
shicq 2013年11月18日 - 11:27

/home/shi/shipin/vlcdemo/demo-player/src/demo-player: error while loading shared libraries: libvlc-qt.so.0.8: cannot open shared object file: No such file or directory

/home/shi/shipin/vlcdemo/demo-player/src/demo-player exited with code 127

豆子老师,这个错误是什么原因?是我没有连接上VLC的库,还是工程文件的配置出现了问题.谢谢老师回答。

回复
豆子 2013年11月18日 - 11:35

看错误信息是没有找到 so 文件,请查下库路径是否正确?

回复
naifa 2013年11月26日 - 18:05

楼主。。之后会写qt quick的教程吗。。非常期待。

回复
豆子 2013年11月26日 - 18:50

肯定会的,可以先留言下看看需要哪方面内容

回复
naifa 2013年11月27日 - 09:23

从qt 5.2的改进就可以看的出来。。qt quick 目前是Digia 公司的做为核心推动发展的方向。以实现QT在移动平台跨平台,同时quick control部分也可以看的出来。之前的UI组件会慢慢往quick control转移上。QML是非常有潜力的UI语言。但目前QT QUICK还在完善中。目前中文学习资料比较少。对于我们这种E文是小白的人来说。学习起来就比较痛苦了。。希望楼主能多一些这样的教程。。也非常感谢有楼主这样奉献精神的人。

回复
豆子 2013年11月27日 - 15:25

是的,Qt Quick 的确作为未来的重中之重,所以在后面的章节中也会详细介绍的。按照计划应该是在线程部分结束之后。

回复
2013年12月6日 - 16:23

你好,我在openSUSE13.1上安装了
**qt-linux-opensource-5.1.1-x86-offline.run**,结果发现在*Qt Creator*及编译生成的程序中都无法输入中文。我使用的是fcitx输入法。网上说是要安装qt5的相应组件,不过openSUSE好像没有与之对应的**fcitx-qt5**。我尝试编译从GitHub上下载的源码,不过无法通过编译,显示

CMake Error at CMakeLists.txt:27 (qt5_wrap_cpp):
Unknown CMake command "qt5_wrap_cpp".

的错误。我发现您也好像在用openSUSE,所以在此提出这个问题,望解答,谢谢!

回复
豆子 2013年12月8日 - 11:22

Qt5 的中文输入好像有问题,这个具体没有测试。不过有人说用iBus貌似可以,你尝试下看看呢?

回复
2013年12月8日 - 11:52

IBUS倒是能用,不过也仅限于此了。openSUSE的Factory源中有“fcitx-qt5”,不过安装后问题照旧,还是耐心地等待吧。

回复
豆子 2013年12月9日 - 10:27

嗯,Qt5 现在版本太新,可能会有一些兼容性的问题。

回复
星弦雪 2013年12月6日 - 16:24

学习了,感谢楼主

回复
Charles 2014年1月8日 - 11:14

豆子,想用qt5做类似qq的界面,咋玩

回复
豆子 2014年1月9日 - 16:45

QQ 类似的界面是 DirectUI 技术实现的,你可以看看这种方法。只不过所有控件要自己绘制,会很复杂。

回复
Pandorym 2014年1月10日 - 02:42

我想实现以下功能:
首先是输入x、y;
然后绘制x*y个白色矩形;
点击白色矩形后,白色矩形会变为红色。

思路是有一个x*y的布尔数组,值为True时是白色,为False时是黑色,
而点击变色就是在点击矩形是对 !(对应的变量)。

非常希望豆子能給一小段代码以作示范。

回复
豆子 2014年1月10日 - 10:49

你的需求不大清楚,不过如果只是单纯的色块的话,使用 QGraphicsRectItem 会更简单一些。将其按照 x、y 的值进行排列。QGraphicsRectItem 可以添加一个 checked 标记位,用于记录是不是被点击。重载 QGraphicsRectItem 的 mouseReleaseEvent() 来响应鼠标单击事件,并设置自己 checked 标记位,根据这个标记位的值来设置 QGraphicsRectItem 的颜色即可。类似的,你也可以通过自定义 QPushButton 来实现(好处是 QPushButton 有自己的 clicked 信号,所以不需要重写 mouseReleaseEvent() 了)。

如果你必须使用 paintEvent 函数自己绘制这些矩形的话,可以选择一个 QRect 二维数组来记录数据,并且给其中每一个 QRect 一个标记位,然后将这个 QRect 数组绘制出来(每个 QRect 都保存了每个矩形的坐标和大小,所以很容易绘制)。当点击发生时,更新对应 QRect 的标记位(可以使用计算几何算法,利用取模运算获得鼠标点击的点位于哪一个矩形中),然后利用 repaint(QRect) 函数仅重绘该矩形的范围即可(当然也可以全部重绘,但效率显然不如部分绘制)。

总之,个人感觉实现思路主要是要把数据(记录标记位)和显示分开。如果按照你给出的解决方案也是可行的,但是需要维护一个 BOOL 数组,不如把每一个看作对象,每个矩形仅仅维护自己的标记位更清晰,实现起来也更简单。

回复
Pandorym 2014年1月11日 - 00:04

谢谢豆子百忙中給我帮助,
我在努力地理解。
最近家里出了些事,
有问题再来麻烦豆子。~

回复
Pandorym 2014年1月25日 - 13:57

void GraphicsRectItem::mouseReleaseEvent(QGraphicsSceneMouse* event)
{
Mark=!Mark;
if (Mark)
setBrush(Qt::blue);
else
setBrush(Qt::black);
}

为什么点击后不会变色呢?

回复
逆、光 2014年2月16日 - 14:31

请教豆子,能不能详细写个文档,关于 发布Qt程序的?

回复
豆子 2014年2月16日 - 19:10

有关发布的内容会在后面详细说明,不过可以先通过文档来了解下:https://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html

回复
tang 2014年3月22日 - 23:10

想自学Qt,看到了你的教学博客,真是太感动了!
一个晚上精读了前7篇教程并上手写了写代码,很受用。
我往后点了几篇先扫了一眼(看了7-10),感觉在你的教程中没有怎么介绍Qt Creator Design,以及用它构建GUI的过程。没有过多的介绍,是因为它不好用么?还是其他的什么原因?毕竟拖拽控件直接画界面感觉还是最方便的。

回复
豆子 2014年3月24日 - 13:52

是的,不过 Designer 一般比较简单,也不大好说什么。所以先把 Designer 一段略去了。文中大部分都是手写代码,这样控制起来比较方便,而且便于展示代码。

回复
tang 2014年3月24日 - 21:27

习惯了visual studio一拖控件,双击进入默认事件代码,没写过GUI也可以瞬间开发出原型,相比觉得Designer还是不够爽啊。

回复
豆子 2014年3月26日 - 13:07

Designer 基本也可以这么开发的,实际上还比较方便。

回复
razoryan 2014年3月26日 - 10:07

感谢豆子,一直在学习你的教程,收获很多。现在我遇到一个问题,要在MFC中调用Qt生成的dll文件,按照qtwinmigrate-2.8-opensource中的方式成功了,可是放到没安装Qt的电脑上却调用不成功,请问该怎么解决呢?

回复
豆子 2014年3月26日 - 13:23

这个没有测试过,不过是不是要把 Qt 的依赖库都复制过去呢?不要忘记还有用到的各种插件之类的。

回复
UFO 2014年3月27日 - 23:36

非常感谢豆子兄弟的教程,使我这样初学QT并且直接学习QT5,而且英语超烂的人有了明灯!
豆子兄弟后面是否会写如何创建自定义控件啊?
小弟实在太愚笨了,看了C++ GUI QT4编程(第二版)和精通QT4编程(第二版)相关篇章,可还是没能搞懂如何创建自己的控件 :(。
希望豆子兄弟能为小弟开窍,万分感谢!

回复
豆子 2014年3月28日 - 09:41

首先你要明确自定义控件需要提供哪些功能,然后把这些功能添加到控件中,以后就可以使用这个控件了。多练习一下其实也不是那么麻烦的。

回复
2014年4月13日 - 18:29

豆子大师你好,看了你的学习之路受益匪浅,毕业设计也选了用Qt做一个麻将游戏,不过说来惭愧,之后在大四因为提前工作的原因中没有继续学习,目前到了写完贪食蛇游戏的阶段,想请问一下我做这个游戏需要的掌握的内容(大概就是简单界面与简单逻辑),以及这个做得话会不会在我预料之外的困难,我也就询问一下老师能不能改题目。在此谢过

回复
豆子 2014年4月14日 - 10:52

简单的话应该问题不是很多,主要是 Graphics View Framework 使用熟悉就好了

回复
青天揽日月 2014年4月30日 - 14:08

豆子啥时候出版这本书?为了感谢,我肯定买一本:)

回复
豆子 2014年5月5日 - 15:48

感谢支持!目前还没完成 ;-P

回复
lpxxn 2014年5月23日 - 15:38

你好,我是qt新手用的是qt5 在 学qt自定义插件的时候总是不成功,
找到的例子好多都是让重新编译qt

请指点一下

回复
豆子 2014年5月27日 - 09:14

Qt 5 的插件机制与 Qt 4 不一样,可以看看 Qt 5 的 plugin 相关文档。

回复
lidongen 2014年5月25日 - 18:27

豆子高手,您好!
有个问题要请教一下,我在Qt-creater中点击应用程序的界面文件xxx.ui,出现runtime error 后Qt creater 自动关闭。 即使重装Qt后,新建一个应用pro,双击其mainwindow.ui时,问题还存在。 有什么解决办法呢?

回复
豆子 2014年5月27日 - 09:20

应该是 IDE 哪里出了问题?具体还真不知道该怎么解决。或许你将程序完全退出之后,将遗留文件全部清除试试。

回复
zhjx922 2014年5月26日 - 09:41

多出点QML相关的吧,出书也行,哈哈

回复
豆子 2014年5月27日 - 09:20

QML 会在以后都是重点,目前由于书稿的原因更新比较慢,见谅 ;-P

回复
zhjx922 2014年5月27日 - 11:41

出吧,到时候买一本支持你,O(∩_∩)O

回复
darkhandz 2014年7月3日 - 08:44

等着你的书

回复
darkhandz 2014年7月28日 - 14:21

豆子老师你好,我把你的Qt学习之路:从入门到精通 60篇 全部复制整理成一个PDF了,是比较精美的版本,而且自己也校对纠正一些错字,代码字体格式也整理好的,想发出来共享给大家,每一页的页眉都注明了出处,差附上你51cto的博客地址,首页也写上了你的名字及你现在这个博客的链接。
现想征得你同意再发出去共享,如果你不同意那么我就自用不发了,望回复。

回复
豆子 2014年7月28日 - 22:14

可以的,感谢支持!不过现在还有很多内容没有完成,没准儿之后还得劳驾再次帮忙修订一遍了 ;-P

回复
durrrr 2014年8月20日 - 19:55

感谢博主!受益匪浅!

回复
NeverMore 2014年9月21日 - 01:09

为什么访问您的网站经常要挂代理才上的去。好纠结。

回复
豆子 2014年9月21日 - 10:24

不好意思,服务器提供商换过主机后,连接一直不稳定。以后考虑换回国内主机。对您造成不便敬请谅解。

回复
IceSoul 2014年10月5日 - 18:16

归档序号错乱了,昨天还好着,不知道作者修改了什么

回复
豆子 2014年10月6日 - 17:02

可以详细说明一下吗?最近一直没有任何修改

回复
fzyz_sb 2014年11月10日 - 14:02

楼主,我想请教你一下,你是参考C++ GUI QT 4这本书吗?我准备看完你的教程,再看看这本书。

回复
豆子 2014年11月12日 - 14:41

大致是参考这本书的,不过也有一些修改,所以谁先谁后都没有关系的。因为这本书主要是 Qt 4 的,本文主要添加了有关 Qt 5 的内容。

回复
jacket 2014年12月30日 - 22:08

楼主,我点“订阅”的时候(用了上面的那个邮箱), 总是提示我“已经订阅过了”,但实际上我还是没有订阅到~请问该怎么办呢?

回复
豆子 2014年12月30日 - 22:15

您使用的是哪个邮箱?具体原因我也不大清楚,试试先把邮箱移除再重新订阅下?

回复
王大贵 2015年1月13日 - 21:20

正在学习中,非常给力,感谢豆子的无私奉献
另外非常希望豆子能做一期关于multimedia的专辑,现在去网上搜索QT视频/音频制作内容,大多数都是Qt5废弃的phonon

回复
mseyj 2015年1月17日 - 10:12

没有QSerialPort相关的,最近我用5.3.2里的串口类读取数据,在子线程中每次readAll时程序就崩掉了,数据量比较大,下位机是一直在不停的发送数据包的,求楼主指点

回复
Ghost 2015年1月19日 - 18:58

老师您好,我有个问题想请教一下,我的程序在自己的电脑上(win7 64位)可以开机自启动,到别的电脑上(xp 32位)可以手动打开并正常执行,却不能开机自启动,报错提示this application failed to start because it could not find or load the Qt platform plugins "windows"。网上看到别人说要放入libegl.dll、libGLESv2.dll等,但是结果还是一样,实在是百思不得其解,不知道该如何处理。还希望老师能百忙中抽点时间指导一二,非常感谢!

回复
豆子 2015年1月21日 - 14:56

仅就 Qt 本身而言,自启动与手动启动没有任何区别。所以现在不知道是因为什么原因导致 windows 平台插件没有加载。方便的话可以将程序发送到邮箱以便解决。

回复
Ghost 2015年1月27日 - 09:30

老师好,我问的问题没有叙述正确,要问的应该是在WIN7系统下的Qt所编译的release版本的程序在别的电脑上无法开机自启动,找了好久终于找到原因了,是因为我没有在别的电脑上配置环境变量。谢谢老师的回复!

回复
Luckyqiao 2015年1月26日 - 22:41

请问博主知道如何以绿色软件的方式发布Qt编写的程序吗?感觉Qt5的动态依赖库又多又大,发布程序很不方便。

回复
豆子 2015年1月27日 - 09:16

只需要将所需要的全部 dll 与 exe 放在同一目录下(插件需要保持目录结构,比如 plugins 和 platforms)就可以直接运行了。

回复
Luckyqiao 2015年1月28日 - 21:37

可不可以把所有的文件编译到同一个exe中呢?

回复
豆子 2015年1月29日 - 11:33

那需要自己静态编译 Qt,然后重新编译应用程序就可以了。

回复
mhxy3deng 2015年3月3日 - 21:09

豆子老师,你好,我看了你这个QT学习之路很久了,最近遇到一个问题,就是想通过QT发送信息到网站(如:百度),并在网站上查询该信息,把获得的信息在QT中显示,我应该从哪里开始着手?

回复
豆子 2015年3月9日 - 14:13

使用QNetworkAcessManager进行网络访问,一般拼接字符串,然后添加 get 或 post 数据即可,可以参考下QNetworkAcessManager的相关文档

回复
Ghost 2015年3月9日 - 15:39

老师好,请问一下Qt可不可以获取当前打开的网页的网址?比如我用360浏览器打开了www.baidu.com,Qt能否获取www.baidu.com这个网址呢?可以的话应该用什么方法?谢谢!

回复
豆子 2015年3月11日 - 11:04

这个不大清楚,个人认为是不可以直接获取的。或者有一种方法,监控系统 80 或 443 端口,不过不知道能不能成功

回复
mhxy3deng 2015年3月12日 - 21:11

豆子老师你好,我现在又有另外的问题了。在QT5中使用了第三方库,还能够静态编译吗?要是不可以的话,进行静态编译需要满足什么条件?

回复
shylock 2015年3月24日 - 11:02

豆子啊,用qt下载碰到Content-Disposition:要怎么解决?比如 http://red.protexis.net/d.aspx?i=4941669c-091f-433e-8506-cb2ff456b30c&; 这个链接。

m_Qxhr = new QNetworkAccessManager;
QNetworkRequest req(url);
m_Reply = m_Qxhr->head(req);
connect(m_Reply, SIGNAL(finished()), this, SLOT(GetHead()));
我是先这样用head获得length和文件名,但是这样得到的content-length比实际的文件小,比如这里得到的Content-Length: 855000,而实际的文件大小是Content-Length:1772960。
然后再用下面的slot去get。
void GetHead(){
QNetworkRequest req;
req.setUrl(url);
m_Reply = m_Qxhr->get(req);
connect(m_Reply, SIGNAL(readyRead()), this, SLOT(ReadyRead()));}

结果是下载的时候因为Content-Length的原因会截断,只下载855000就发出finish信号了。
我在get之前尝试用req.setHeader();设置content-length,结果设置失败了。请问要怎么才能下载Content-Disposition这种的呢 ?

回复
豆子 2015年3月27日 - 11:14

这个不大清楚,试一下 setRawHeader 这个函数看看能不能成功?

回复
shylock 2015年3月27日 - 16:59

找到原因了
Qt在发request的时候是默认加User-Agent:Mozilla/5.0,大部分服务器都是支持这种设置的。但是我前面发的那个链接服务器设置比较特殊,验证User-Agent的时候必须要系统信息。
所以代码里在发request的时候需要显示设置req.setRawHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1)");

回复
lhcy 2015年3月30日 - 10:58

豆子老师,您好,我用treeview写一个文件目录树,想实现点击目录树上的节点,显示出节点的文件名和路径,这是槽:
void MainWindow::on_treeView_doubleClicked(const QModelIndex &index)
{
QFileSystemModel model;
QString filename=model.fileName(index);
//QString filepath=model.filePath(index);
qDebug()<<filename;
//qDebug()<<filepath;
}
现在点击节点能获取到文件名,但是点击节点显示路径却出错,获取不到,这是为什么呢?
CSDN上也有个和我一样的问题:http://bbs.csdn.net/topics/390125792

回复
xyyiii 2015年3月31日 - 02:48

非常感谢。。。。

回复
lxg 2015年4月1日 - 15:37

一直以为qt是directui,颠覆了...
难道不是createwindow创建了主窗口,其他子窗口是直接画上去的?

回复
豆子 2015年4月8日 - 09:22

目前没有找到资料说 Qt 是 DirectUI,个人感觉是 Qt 并不是完全重绘,而是自定义了组件的外观,这个待议

回复
Charis Chen 2015年4月9日 - 22:27

豆子,问问你噢,有没有一本像C++ GUI Qt4这样比较好的Qt5的教材呢?求推荐~~

回复
心魔 2015年4月14日 - 17:24

楼主,怎么没有一些窗口动画的教程啊

回复
豆子 2015年4月21日 - 12:27

哪方面的窗口动画?

回复
心魔 2015年4月21日 - 14:55

比如说窗口弹出的曲线动画,然后dialog或者在GraphicsView当中的绕轴旋转(因为我自己在做绕对话框1/2宽度这个轴旋转没能实现),还有我自己想象的对话框点击关闭之后,整个对话框像气泡,或者玻璃一样破碎,渐隐的动画这三种

回复
杰克 2015年5月20日 - 21:48

豆子老师,您好,我想问下我在QT中进行VTK的编程,已在PRO文件中加入所需要的lib和includepath,但运行程序时它仍然爆这样的错误: error: undefined reference to `_imp___ZN25vtkRenderWindowInteractor15SetRenderWindowEP15vtkRenderWindow';
error: undefined reference to `_imp___ZN16vtkBalloonWidget10AddBalloonEP7vtkPropPKcP12vtkImageData';
error: undefined reference to `_imp___ZN11vtkRenderer8AddActorEP7vtkProp';
error: undefined reference to `_imp___ZN17vtkAbstractWidget23SetWidgetRepresentationEP23vtkWidgetRepresentation';等等。我在网上查了下,大部分说好像是VTK的库没加进去,但我在PRO加完了LIB呀。求解到底怎样能解决这个问题?

回复
豆子 2015年6月3日 - 09:46

这种问题一般都是因为环境问题,经常在别的机器上面无法重现。你可以使用绝对路径试试,先 clean 一下在进行编译。

回复
mmic 2015年6月26日 - 15:15

支持下, 感谢博主!受益匪浅!

回复
战旗美如画 2015年7月20日 - 17:10

豆老板,看了你的教程,已无法估的投入到了qt的怀抱,不过现在我刚开始,遇到了一些问题。
因为我在学习用 vim,所以希望能用vim编辑代码,但发现不用qt creator来写代码真的太麻烦了,因为写完代码之后要到控制台到文件所在目录,执行qmake -project来生成工程,然后在qmake链接,然后再编辑pro文件再最后面加上qt += widgets(否则在make的时候会出现fatal error: QApplication: No such file or directory错误),然后再把生成的exe文件复制到qt下面的bin目录里(否则直接双击无法运行程序,会出现接口错误)。是不是我哪里弄错了?我觉得应该不是这么麻烦的吧?

回复
豆子 2015年7月21日 - 09:16

不使用 IDE 的话的确需要这么多步骤,所以现在一般会使用脚本,写好脚本之后运行一下,可以让系统去做这一系列的工作。网上也有很多将 vim 打造成 IDE 的方法,可以参考一下。

回复
战旗美如画 2015年7月21日 - 09:18

谢谢豆老板,学习了~~~

回复
mark 2015年7月27日 - 22:11

QT怎么调用c语言写的函数啊?

回复
豆子 2015年8月1日 - 14:29

Qt 是 C++ 的,使用 C++ 的方式即可,具体来说就是放在 extern {} 块中。

回复
金龙 2015年7月31日 - 17:51

豆子最近有更新一些其他的么!感觉跟着你学还是蛮有效率的。

回复
豆子 2015年8月1日 - 14:42

有关 QML 的内容,网上有一系列不错的教程,可以参考下。原文地址是 http://qmlbook.github.io/,网上也有中文翻译,请自行搜索。

回复
蓝色 2015年8月4日 - 11:08

豆子您好,请教您一个问题,我如何才能创建dll共享库呢?

我直接在QT中创建,并直接编译,会要求我指定一个运行的EXE文件,然后并没有生成相应的dll文件

回复
豆子 2015年8月16日 - 13:13

将 pro 文件中的 TEMPLATE = app 改成 template = lib,编译出来就是共享库了

回复
lemon 2015年8月11日 - 18:59

豆豆,Qt中使QAxObject操作Excel,程序执行完后在资源管理器中有无数个Excel.EXE。相当于每操作一次就产生一个Excel.EXE。请教下该怎么解决

回复
豆子 2015年8月16日 - 16:18

这个没有测试过,是不是需要释放一下 ActiveX 对象?

回复
xieyang 2015年9月13日 - 17:41

刚刚发现豆子写的Qt学习之路,看起还很不错,加入收藏夹了。给作者点个个赞。

回复
豆子 2015年9月16日 - 09:40

多谢支持

回复
豆子 2015年9月16日 - 09:41

多谢支持!

回复
宋言 2015年11月3日 - 15:00

豆子好样的!已捐助。顺便提问:
我在qtcreator中该怎样调用第三方动态链接库呢?就是有.dll .lib和.h三个文件的那种。
谢谢!

回复
豆子 2015年11月4日 - 13:54

多谢支持!
不清楚你说的“在 Qt Creator 中调用第三方动态链接库”是什么意思?是让 Qt Creator 调用,还是通过 Qt 的应用程序调用?如果是后者,只需要修改 pro 文件,增加 LIBS += XXX 这样的语句即可,可以查阅下相关文档。

回复
宋言 2015年11月5日 - 10:26

额。。。我是初学者,不清楚二者的区别。。。
我现在是要用QT写个程序来读写excel。我找到了一个第三方的excel读写库,在visual studio中已经成功实现了我需要的所有功能。现在想把我写的函数放到GUI里面,然后发现visual studio中关于库的设置什么的在QT creator 中全都没有!(估计是我没找到)。。。

回复
豆子 2015年11月5日 - 10:30

这样的话就只需要在 .pro 文件中添加 LIBS 之类的语句,例如,需要链接 Iphlpapi.dll 时,添加 LIBS += lIphlpapi(注意 dll 名字前面有一个l)

回复
宋言 2015年11月5日 - 14:44

谢谢豆子哥!再次捐助!

刘杰 2015年11月28日 - 16:02

豆子哥,感谢您的伟大壮举的贡献。看来了你的教程,对于QT5的了解又深刻了一些。
目前正在一步一步学习中,我现在有一个问题就是对于QT5的软件打包问题:
我的打包步骤是:1、将.exe文件单独放在一个文件夹里
2、用depends进行查找所需的dll文件
3、包含MSVC的库文件,编译使用(我的编译器是VS2013)
4、包含paltforms底下的文件库
5、用单文件打包工具进行打包
对于一些简单的软件我测试是可以的,但是发现打包后软件都是几十M感觉太大!!!
然后我用depends检测时还发现了系统里我自己都没有的库文件,不知道这是为什么,这个库文件的名称是:
API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
我不知道为什么用VS的编译器的时候会出现这2个编译库,我用everything查找了一下我电脑里就没有这2个库,不知道如何解决这个问题?
还有就是关于图片的问题,如果是资源文件,那些图标,是不是也要放到打包的文件夹底下?
另外就是一个数据库的问题,生成的数据库是在当前目录下,就是打包的文件夹里面,那么我在打包完以后就没法处理数据库的信息了,是不是改一下路径,改成打包以后的文件所在的目录下比较好,还是写死在一个文件夹底下比较好?

回复
豆子 2015年12月6日 - 20:10

1. Qt 的 dll 即便是 release 版本的也比较大,这个没有办法,可以试着用 ASPack 之类的压缩工具把 dll 压缩一下。
2. 关于那两个 dll,我没有遇到过,可能是引入了别的什么库吧。
3. 如果使用资源文件,图片会被编译成二进制的,所以,不需要打包一起发布。不过,如果是运行时加载的就必须打包了。
4. 数据库可以放在 exe 运行目录下比较方便,运行时获取自己的运行路径,或者直接放在用户目录下也是可以的。

回复
VINI VIDI VICI 2015年12月8日 - 15:19

豆子大神能不能写一写自定义控件的方法?网上好多方法用QT5都编译不通过啊

回复
豆子 2015年12月8日 - 16:12

关于什么的“自定义控件”?普通的话,就是继承 QWidget 这样的类就可以的

回复
VINI VIDI VICI 2015年12月8日 - 16:24

通过插件法自定义一个原来没有的控件。生成dll和lib后,拷贝到..\plugins\designer中,这时在QtDesigner中可以直接拖拽生成这个控件,但是编译会不通过,显示找不到头文件,将头文件拷贝到工程目录下会显示链接失败,将lib和bin也拷贝到工程目录和执行目录下,依然链接失败,请教是该怎么使用这个自定义的控件呢?

回复
VINI VIDI VICI 2015年12月8日 - 16:37

还有,我直接继承现有的控件,写了一个Qt GUI Class,且控件外观有修改,那么用QtDesigner画界面时,新控件的外观上的变化并不会显示出来,但手写代码的话就可以显示出新的外观,感觉很奇怪,是不是我哪里写的不对?

回复
一枚硬币 2016年2月24日 - 10:16

豆哥,我用QStyle的方式自定义QProgressBar,自定义的进度条是用来显示声音的进度值的。现在的问题是:我调节声音旋钮进度条可以显示出来,但进度条只能前进一次(进度条的数值是正确的),正确的现象应该是,每次调节声音旋钮,进度条应该前进一次。
我初步查看了一下,调节声音旋钮,进度条没有前进,是drawControl函数里的CE_ProgressBarContents项没有执行到,进度条前进了,就执行到了。请问这是什么原因?

回复
香儿光翟 2016年3月20日 - 23:49

豆子老师你好!
最近遇见一些问题,我又来请教你,希望能够得到回复。
最近刚刚看《代码本色》,写了一个关于小球在窗口中运行的简单程序,但是就这样出现了问题,我感觉小球似乎在闪烁,我百度之后,得到的是用双缓存技术来消除这种闪烁,为此,我又修改一下代码但是感觉还是没有什么效果,希望豆子老师在这里能帮我解决一下,谢谢!
下面是源代码:
Widget::Widget(QWidget *parent)
: QWidget(parent),pixmap(width(),height())
{

circle.x=width()/2;
circle.y=height()/2;
circle.xV=10;
circle.yV=20;
circle.radius=20;

timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(step()));
timer->start(41);
setAutoFillBackground(false);

}

void Widget::step(){

if(circle.x+circle.xV+circle.radius>width()|| circle.x+circle.xV-circle.radiusheight() || circle.y+circle.yV-circle.radius<0)
circle.yV=0-circle.yV;

circle.x+=circle.xV;
circle.y+=circle.yV;
//参考网上的使用双缓存技术,虽然不知道对不对...
pixmap.fill(Qt::white);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(Qt::yellow);
painter.drawEllipse(QPoint(circle.x,circle.y),circle.radius,circle.radius);
update();

}

Widget::~Widget()
{

}
void Widget::paintEvent(QPaintEvent *e){

QPainter painter(this);
painter.drawPixmap(QPoint(0,0),pixmap);

}
谢谢!

回复
香儿光翟 2016年3月20日 - 23:50

setAutoFillBackground(false);这一部分应该没有的,希望豆子老师及时回复!

回复
豆子 2016年3月21日 - 13:01

从 cpp 文件中有些不知道是什么类型,最好把整个工程发送到邮箱

回复
精灵之影 2016年4月27日 - 14:46

豆子老师你好
我是初学者,想问一下,如果c++基础不好的话
能照你的教程学习QT吗
如果不行,推荐先学习哪些内容再学历你的教程呢?

回复
豆子 2016年4月27日 - 15:08

基础 C++ 必须要知道的,高级用法比如模板之类可以不了解。否则的话,学习 Qt 可能会比较吃力。可以从 C++ 基础开始学习,比如《C++ Primer Plus》之类的书籍都是很好的入门书。

回复
精灵之影 2016年4月27日 - 15:53

好的,感谢豆子老师的推荐

回复
想起 2016年7月14日 - 09:13

您好,我使用Qt有一段时间了。现在遇到一些问题:由于使用了Qt5.7里面的Qt3D模块,关闭主程序的时候会中断,提示Qt3DCored.dll的问题,0x0000005。不知道Qt3D模块能不能在三维空间画直线和多边形?包括凹多边形。谢谢豆子老师

回复
ccppaa 2016年8月20日 - 16:22

大神,用小票打印机打印出来的字体特别大,长,字体设置了QPrinter p;
QTextDocument doc;
QFont font = doc.defaultFont();
font.setFamily("等线");
font.setBold(true);
font.setPointSize(font.pointSize() + 2);
//font.pointSize()是11,
doc.setHtml(htmlString);
QSizeF s = QSizeF(p.logicalDpiX() * (58 / 25.4), p.logicalDpiY() * (297 / 25.4));
doc.setPageSize(s);
p.setOutputFormat(QPrinter::NativeFormat);
doc.print(&p);
这是部分代码,但是打印出来的字特别大长,用word 试了,打印机是正常的

回复
ccppaa 2016年8月27日 - 08:26

一直在试是哪里的问题,改用p.setPageSize(s)字号大小正常,但是位置特别偏,还用doc.的时候,改了一下s 中297,如620,820,1920字越来越正常,是不是因为电脑分辨率的问题,如果是因为这个,那该怎么设置让它在不同的电脑上都能正常显示

回复
ccppaa 2016年8月27日 - 16:39

字大小的问题解决了,是我设置纸张规格的问题,

回复
ccc 2018年8月11日 - 10:21

您好,请问您qt学习之路1的链接可以发一下吗?谢谢!

回复
豆子 2018年8月11日 - 20:31

第一篇的地址是:http://blog.51cto.com/devbean/193918
只是这部分都是 Qt 4 的,现在针对 Qt 5 的话很多内容都过时了

回复
xffish 2019年9月27日 - 07:11

竟然从2012年更新到2016年,太震撼了。感谢博主。

回复
yang 2019年12月8日 - 13:06

能否提供pdf或epub下载,谢谢

回复
豆子 2019年12月16日 - 10:11

目前我没有 pdf 或者 epub 的打包,不知道有木有别人生成过

回复
L_inkOO 2019年12月31日 - 00:00

博主你好!我学了C和C++还有数据结构,学习这些语言和算法的时候都是做的一些格式化输入输出的题,全部是依赖于控制台程序。现在想打算做一个带图形界面的程序,包含的算法是图论里的寻找两点最短路径。在知乎上看了大家的讨论,都说初入图形化Qt好上手,MFC、EasyX、WPF这些都很麻烦,但对我来说不管用什么做界面,都找不到思路。现在我做的这个程序已经能够在控制台的情况完美运行,只差GUI的实现了。
总的一句话来讲:我至今没有做过一个完整的图形化运行的程序,真的不知道怎么把一个控制台的程序变成带界面的东西。

照着Qt给的实例,或者GitHub上别人的完整GUI项目做一遍运行运行,感觉会了,一到自己做,没有任何提示任何思路,只有一个黑框框(控制台运行的程序),不知道怎么搞啊?

回复
豆子 2020年1月5日 - 16:17

既然你已经有个目标,那就照着这个目标去选择需要哪些技术才能实现。比如,你现在的程序已经能够在控制台运行,那么就考虑界面需要提供哪些参数来让你的程序能够运行?如果你的程序参数是通过命令行参数传入的,或者直接写死在源代码里面,那么就应该改造成接受参数。这样,界面就可以使用参数传入,从而复用你的程序。你现在的程序就是业务逻辑,界面用来展示业务,这样就实现了业务与展示的分离。一旦程序完成,那么就开始从最简单的角度入手,比如最短路径算法可能需要绘制地图。算法里面的地图可能使用二维数组存储,那么如何在界面展示这个数组?最简单的思路可能是元素 0 显示成路径,元素 1 显示成墙,类似这样。所以就可以考虑在 Qt 中按照这个二维数组的数据绘制地图。这就涉及到窗口绘图的技术。完成地图,那么你要考虑用户该怎么输入最短路径需要的两个点?当然让用户通过鼠标点击选择最好。这就需要 Qt 的鼠标事件处理。因此针对你的程序,可能仅仅为了图形化显示一个算法,那么可以从如何可视化显示你算法的数据、过程入手,考虑将算法中抽象的数组存储、每步的结果,使用图形显示出来。最终你将得到一个可视化的算法演示过程。然后你可能再需要菜单控制算法开始、结束等,这样就基本完成一个简单的程序了。如果感觉从绘图入口比较复杂,那也可以反过来,从菜单到绘制。总之不要既想做菜单又想完成显示,这样结构就会混乱了。

回复
forever 2020年6月2日 - 13:22

我觉得时熟练度的问题,如果你之前有过gui的经验,那么上手qt 应该非常快,正是因为你没有过类似的经验,不明白其中的运行大概时怎样的,组件都有哪些,怎么自定义自己想要的组件,又或者不明白了,怎么查找帮助文档,这些说起来就是经验和Qt 的基础的问题。就常理来看,我个人认为是如此的。(我搞那个tensorflow 目前状况跟你差不多,比你还差点,让我自己创建个模型,训练下,就完全不行,看到别人说的,啥都明白的样子,我觉得就是一个熟练度和基础的问题),慢慢来。

回复
cht 2020年4月16日 - 07:37

豆子老师,请问有没有关于QT上使用MODBUS的相关资料呢?

回复
豆子 2020年4月21日 - 13:30

目前我也没有相关资料

回复
wansst 2020年6月6日 - 16:43

单位里的项目刚用了 用qserialport
不过建议别用。。 因为出了问题 是这个库的bug 后来全改成了 windowsapi折腾了好久

回复
xdj 2020年6月27日 - 13:14

您好,我想请问一下,qt能否实现向matlab一样读取三维点坐标数据,画出散点图并连成线?谢谢。

回复
豆子 2020年7月27日 - 22:16

个人感觉是可以的,大概要用 QPainter 绘制吧

回复
初学QT怎么学? | Dotnet9 2020年7月12日 - 16:26

[…] 《Qt 学习之路 2》目录 […]

回复
金珣 2020年9月14日 - 20:02

豆子老师,请问一下 这个访问网络的源代码有吗?从delphi转qt看得有点吃力,有源代码吗。

回复
豆子 2020年9月15日 - 11:33

源代码部分有,一般在文末。如果没有的话可能是因为代码比较简单,按照文章中的代码片段组织一下就是完整代码,或者有的文件链接可能有问题,如果发现的话就及时留言处理下。

回复
rua 2020年10月4日 - 17:43

博主你好,我在使用qt时经常会莫名的出现编码错误,貌似是utf8bom 相关的原因,所报的错误是"常量中有换行符".请问您以前出现过吗?如果出现过是用什么方法解决了这个报错呢?

回复
豆子 2020年10月13日 - 17:31

最简单的办法是源代码中不要有英文以外字符,所有可视文本使用国际化翻译,就不会有任何问题

回复
banghuzhu 2021年1月31日 - 18:23

豆子老师,请问一下QT用什么方法可以获取字体的像素点数据,谢谢!!

回复
liu kian 2021年3月9日 - 11:09

在网络上查找QT5相关资料而找来的
感谢楼主的分享,向楼主的分享精神,致以崇高的敬意!

回复

发表评论

关于我

devbean

devbean

豆子,生于山东,定居南京。毕业于山东大学软件工程专业。软件工程师,主要关注于 Qt、Angular 等界面技术。

主题 Salodad 由 PenciDesign 提供 | 静态文件存储由又拍云存储提供 | 苏ICP备13027999号-2