豆子老师,你好。初学Qt4,写了一点GUI程序,想试试给这个小应用程序静态编译,不用Qt的SDK就能运行,网上找了好多教程都感觉好麻烦,还要先静态编译安装Qt,,,这里想请教一下,怎么在ubuntu 12.04下静态编译自己写的程序,,,会一点shell知识,希望能够像大多数开源软件一样能实现./configure;make;sudo make install三步安装。。。谢谢
/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
老师您好,我有个问题想请教一下,我的程序在自己的电脑上(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等,但是结果还是一样,实在是百思不得其解,不知道该如何处理。还希望老师能百忙中抽点时间指导一二,非常感谢!
豆老板,看了你的教程,已无法估的投入到了qt的怀抱,不过现在我刚开始,遇到了一些问题。 因为我在学习用 vim,所以希望能用vim编辑代码,但发现不用qt creator来写代码真的太麻烦了,因为写完代码之后要到控制台到文件所在目录,执行qmake -project来生成工程,然后在qmake链接,然后再编辑pro文件再最后面加上qt += widgets(否则在make的时候会出现fatal error: QApplication: No such file or directory错误),然后再把生成的exe文件复制到qt下面的bin目录里(否则直接双击无法运行程序,会出现接口错误)。是不是我哪里弄错了?我觉得应该不是这么麻烦的吧?
197 评论
楼主的贡献是伟大的,致以崇高的敬意! 😎
谢谢了啊
建议豆子增加构建qt5环境的文章。菜鸟表示搞不定。。
现在 Qt5 的 Beta 已经发布了,可以安装尝试下:http://releases.qt-project.org/qt5.0/beta1/
不得不赞叹博主的奉献精神!向博主致敬!
过奖过奖
😉 太好了
多谢!
豆子你好,看了您这份教程有几天了,写得非常好。我自己也实现了一个简单的画板程序,但是不知道如何发布。程序只能在creator中运行,在debug或release文件夹中双击exe都会提示缺少dll,我就把缺少的dll都复制进去。然后双击exe,结果是什么反应也没有。以为是运行后瞬间退出,所以就在main.cpp中添加创建文件的代码,发现并非运行后退出,而是根本没运行,这是为什么?该怎么办?望指点。
有GUI对吗?需要platforms插件 创建一个platforms文件夹 搜索一下qwindows.dll(release版本)或qwindowsd.dll(debug版本),复制进去就好了
你说的是 Qt5 吗?Qt4 貌似是不需要的
Qt 4 确实可以,但是对于5,将platforms放在exe同个文件夹吗,还是不行啊。我把整个plugins文件夹复制过来也不行
两个都需要的,你可以看看文档:http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html
如果依旧没有运行,尝试在 cmd 中运行,可能会有错误信息出现;如果是 Qt5,参考下 great 的回复?
太棒了!感谢主人花那么多时间精力分享学习过程,通俗易懂!
❓ 这些文章都太有用了,好好拜读。btw 我的问题是:我安装了qt5, creator里面写代码不能单步运行,提示调试器未设置。我在工具-选项-构建与运行中 看到貌似我机器里没有cdb调试器(“管理”)按钮时灰色的,怎么解决这个问题?不能单步运行太痛苦了。
还有一个不理解的地方,我下载了qt-vs-addin-1.2.0-opensource.exe(这个exe我之前运行过) 但是vs中仍然运行不了qt 提示没有设置version,怎么解决?
如果能出一个关于qt5版本的环境搭建的文章就好了!万事开头难啊!
QtCreator 的 CBD 需要自己设置,可以查看文档:http://qt-project.org/doc/qtcreator-2.7/creator-debugger-engines.html;Qt VS Addon 添加之后,在菜单中有个 Qt 的菜单,里面可以设置 Qt 版本,你找找看。
😛 😛 😛 😛 😛
博主威武、、太需要了、、qt5现在几乎没什么中文资料,对于我这看到英文头痛的人来说,这是福利啊、、、
请问有没有打算写一些Qt5 Animation的东西呢?
有是有,打算将这个系列做成一个全面的教程,不过最近在帮忙做一个网站,很少更新,等忙过一段落就好了的~
期待,支持!
您好,我在Ubuntu12.04下就安装了qt-linux-opensource-5.0.1-x86-offline.run,测试运行根本就行不通。请问我还需要安装什么东西吗?
您好,我在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'时。
请问我还需要安装什么东西吗?
cannot find -lGL 错误信息是没有找到 GL 库,是不是没有安装 OpenGL 的开发库?
这个我没有测试过,你到网上搜一下呢?一般而言只要安装了 GCC 就可以了,我记得 ubuntu 默认是不安装这个的。
ubuntu下默认安装gcc,但只有c编译器,不带g++,g++要单独安装。 😀
这个不大了解,之前一直使用的是 openSUSE。感谢告知!
Ubuntu下我使用的是g++ 4.7
实在是太感谢您了!一句话帮我解决了纠结几天的问题。这个错误就是因为没有安装OpenGL的原因。再一次的感谢您。
感谢你出的这系列教程。有没有兴趣搞QtQuick2的教程呢? 😛
肯定会的,不过计划是放在 C++ 部分之后。
谢谢小豆子
请问下楼主QT里面如何读写XML文件?希望楼主能给个思路,最后能够写了简单的小程序给我看看,万分感谢啦!邮箱:357059570@qq.com
59 开始的几章都是关于 XML 的处理的部分,可以关注下
好的,那59是还没更新到吧
现在第一篇就是59,目录刚刚更新
看到啦!楼主实在太好人,太感谢啦!
请问有没有整理的pdf的文档啊
这个目前还没有,不好意思
豆子老师你好(这里就先称您为老师),初学GUI 编程,当初知道qt跨平台于是就选择了这个,由于之前并没有学习过qt以前的版本,本以为qt想下兼容,刚才那个别人写的qt3的程序直接放到qt中,qt5 出现时间较短,市面有什么书籍?我应该如何去学习呢?一眼望去,qt 就是个庞然大物,怎样去下爪子呢?
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》就可以了。
豆子老师,你好。初学Qt4,写了一点GUI程序,想试试给这个小应用程序静态编译,不用Qt的SDK就能运行,网上找了好多教程都感觉好麻烦,还要先静态编译安装Qt,,,这里想请教一下,怎么在ubuntu 12.04下静态编译自己写的程序,,,会一点shell知识,希望能够像大多数开源软件一样能实现./configure;make;sudo make install三步安装。。。谢谢
Qt 官网提供的二进制安装包都是动态链接的,如果你需要静态连接,必须自己编译 Qt。大致就是 CONFIG += staticlib 之类,按照网上教程应该就差不多了。至于为什么 Qt 不提供官方的静态库,主要是因为 Qt 的 LGPL 授权的限制。
谢谢豆子老师,Qt-4.8.5已经静态编译好了,参考网上的一个教程也能够静态编译自己写的程序,可是又出现了一个问题,因为用到了mysql,导致
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:
这个怎么把QMysql驱动也编译进去啊?
QMySql 的驱动默认不被编译,但是你可以在 src 文件夹下找到它的源代码,依然按照静态编译的配置单独编译这个驱动即可
p= new QMediaPlayer(this);
p->setMedia(QUrl::fromLocalFile(QDir::currentPath()
+"/release/backmusic.wav"));
p->play();
p->setVolume(100);
这是我播放音乐的代码,在Qt Creator里头能出声音。加入.dll后单独运行就不出声了。
请问是setMedia()有误吗?
具体问题不大清楚,你可以试试输出路径看看对不对,或者是看看 dll 有没有成功加载
豆子哥,我学习QMainWindow类的过程中添加了一个QWidget,为了先测试,这个QWidget是放在一个类的,同时也在同一个类里面定义了一个QPushButton和QLineEdit,然后我用布局把这两个控件加到了QWidget中,之后再把QWidget加到了QMainWindow,同时在构造函数中把click()作为信号,然后把setEditText()作为槽,但是程序运行说没找到按钮。
请问同一个类中放在不同容器中的控件就不能用信号槽吗?
可以使用的,估计是别的什么问题。比如你在 QWidget 中的 button,在 QMainWindow 中的 connect() 函数应该改为 widget->button 等等问题
大神能不能分享一些qt5程序的源码,网盘之类上面,大家都能下载看看。。跪谢
目前没有专门的 Qt5 代码,不过这里的代码应该都可以在 Qt5 编译的
我想把exe文件给没有qt环境的电脑用 请问除了相应的头文件dll之外,还需要什么dll呢? os:win8 编辑器:qt createt
你可以在文档中找到答案:http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html
感谢 已经可以运行了,但是又出现一个问题。OTL,我的系统是win8 64位的,release版本只能在64位Windows成功运行,请问32位版本需要重新编译吗?
是的,32 位和 64 位的应用必须编译两个不同的版本,这个是无法避免的,即便二者的编译器也是不一样的。在安装编译器的时候一般会有选项是安装 32 位版本还是 64 位版本
👿
开始学习QT
就跟着这个教程走了
希望能够有所收获。
谢谢豆子这么辛苦的写这个
非常感谢。。。不过我下载的是QT5.1 这教程能用吗
本人菜鸟一个。。
Qt5.1 和 Qt5.0 的代码是一致的,没有区别,可以正常使用
😛
豆子老师,请教您一个问题:
我在 .pro文件中 使用
DLLFiles.path = release
DLLFiles.files += $$PWD/dll/da.dll
INSTALLS = DLLFiles
本意是想把源代码目录里的dll目录下的dll文件拷贝到release中,但一直没有成功.请教豆子老师,该如何实现.
多谢~~
这个我也不大清楚,你可以用 message() 函数输出下 $$PWD 的值看看对不对,然后把 release 前面也加上 $$PWD 做绝对路径试试看
lol 《访问网络4》找不到页面了 不知道豆子老师收到了刚刚的回复没有
请问Qt5怎么用QNetworkAccessManager 实现FTP?
目前只能利用 QNetworkAccessManager 发送 FTP 命令自己解析。你可以继续使用 QFtp 类,这个类目前不随 Qt 发布,而是作为一个独立的模块,但是依然可以继续工作
/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的库,还是工程文件的配置出现了问题.谢谢老师回答。
看错误信息是没有找到 so 文件,请查下库路径是否正确?
楼主。。之后会写qt quick的教程吗。。非常期待。
肯定会的,可以先留言下看看需要哪方面内容
从qt 5.2的改进就可以看的出来。。qt quick 目前是Digia 公司的做为核心推动发展的方向。以实现QT在移动平台跨平台,同时quick control部分也可以看的出来。之前的UI组件会慢慢往quick control转移上。QML是非常有潜力的UI语言。但目前QT QUICK还在完善中。目前中文学习资料比较少。对于我们这种E文是小白的人来说。学习起来就比较痛苦了。。希望楼主能多一些这样的教程。。也非常感谢有楼主这样奉献精神的人。
是的,Qt Quick 的确作为未来的重中之重,所以在后面的章节中也会详细介绍的。按照计划应该是在线程部分结束之后。
你好,我在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,所以在此提出这个问题,望解答,谢谢!
Qt5 的中文输入好像有问题,这个具体没有测试。不过有人说用iBus貌似可以,你尝试下看看呢?
IBUS倒是能用,不过也仅限于此了。openSUSE的Factory源中有“fcitx-qt5”,不过安装后问题照旧,还是耐心地等待吧。
嗯,Qt5 现在版本太新,可能会有一些兼容性的问题。
学习了,感谢楼主
豆子,想用qt5做类似qq的界面,咋玩
QQ 类似的界面是 DirectUI 技术实现的,你可以看看这种方法。只不过所有控件要自己绘制,会很复杂。
我想实现以下功能:
首先是输入x、y;
然后绘制x*y个白色矩形;
点击白色矩形后,白色矩形会变为红色。
思路是有一个x*y的布尔数组,值为True时是白色,为False时是黑色,
而点击变色就是在点击矩形是对 !(对应的变量)。
非常希望豆子能給一小段代码以作示范。
你的需求不大清楚,不过如果只是单纯的色块的话,使用 QGraphicsRectItem 会更简单一些。将其按照 x、y 的值进行排列。QGraphicsRectItem 可以添加一个 checked 标记位,用于记录是不是被点击。重载 QGraphicsRectItem 的 mouseReleaseEvent() 来响应鼠标单击事件,并设置自己 checked 标记位,根据这个标记位的值来设置 QGraphicsRectItem 的颜色即可。类似的,你也可以通过自定义 QPushButton 来实现(好处是 QPushButton 有自己的 clicked 信号,所以不需要重写 mouseReleaseEvent() 了)。
如果你必须使用 paintEvent 函数自己绘制这些矩形的话,可以选择一个 QRect 二维数组来记录数据,并且给其中每一个 QRect 一个标记位,然后将这个 QRect 数组绘制出来(每个 QRect 都保存了每个矩形的坐标和大小,所以很容易绘制)。当点击发生时,更新对应 QRect 的标记位(可以使用计算几何算法,利用取模运算获得鼠标点击的点位于哪一个矩形中),然后利用 repaint(QRect) 函数仅重绘该矩形的范围即可(当然也可以全部重绘,但效率显然不如部分绘制)。
总之,个人感觉实现思路主要是要把数据(记录标记位)和显示分开。如果按照你给出的解决方案也是可行的,但是需要维护一个 BOOL 数组,不如把每一个看作对象,每个矩形仅仅维护自己的标记位更清晰,实现起来也更简单。
谢谢豆子百忙中給我帮助,
我在努力地理解。
最近家里出了些事,
有问题再来麻烦豆子。~
void GraphicsRectItem::mouseReleaseEvent(QGraphicsSceneMouse* event)
{
Mark=!Mark;
if (Mark)
setBrush(Qt::blue);
else
setBrush(Qt::black);
}
为什么点击后不会变色呢?
请教豆子,能不能详细写个文档,关于 发布Qt程序的?
有关发布的内容会在后面详细说明,不过可以先通过文档来了解下:https://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html
想自学Qt,看到了你的教学博客,真是太感动了!
一个晚上精读了前7篇教程并上手写了写代码,很受用。
我往后点了几篇先扫了一眼(看了7-10),感觉在你的教程中没有怎么介绍Qt Creator Design,以及用它构建GUI的过程。没有过多的介绍,是因为它不好用么?还是其他的什么原因?毕竟拖拽控件直接画界面感觉还是最方便的。
是的,不过 Designer 一般比较简单,也不大好说什么。所以先把 Designer 一段略去了。文中大部分都是手写代码,这样控制起来比较方便,而且便于展示代码。
习惯了visual studio一拖控件,双击进入默认事件代码,没写过GUI也可以瞬间开发出原型,相比觉得Designer还是不够爽啊。
Designer 基本也可以这么开发的,实际上还比较方便。
感谢豆子,一直在学习你的教程,收获很多。现在我遇到一个问题,要在MFC中调用Qt生成的dll文件,按照qtwinmigrate-2.8-opensource中的方式成功了,可是放到没安装Qt的电脑上却调用不成功,请问该怎么解决呢?
这个没有测试过,不过是不是要把 Qt 的依赖库都复制过去呢?不要忘记还有用到的各种插件之类的。
非常感谢豆子兄弟的教程,使我这样初学QT并且直接学习QT5,而且英语超烂的人有了明灯!
豆子兄弟后面是否会写如何创建自定义控件啊?
小弟实在太愚笨了,看了C++ GUI QT4编程(第二版)和精通QT4编程(第二版)相关篇章,可还是没能搞懂如何创建自己的控件 :(。
希望豆子兄弟能为小弟开窍,万分感谢!
首先你要明确自定义控件需要提供哪些功能,然后把这些功能添加到控件中,以后就可以使用这个控件了。多练习一下其实也不是那么麻烦的。
豆子大师你好,看了你的学习之路受益匪浅,毕业设计也选了用Qt做一个麻将游戏,不过说来惭愧,之后在大四因为提前工作的原因中没有继续学习,目前到了写完贪食蛇游戏的阶段,想请问一下我做这个游戏需要的掌握的内容(大概就是简单界面与简单逻辑),以及这个做得话会不会在我预料之外的困难,我也就询问一下老师能不能改题目。在此谢过
简单的话应该问题不是很多,主要是 Graphics View Framework 使用熟悉就好了
豆子啥时候出版这本书?为了感谢,我肯定买一本:)
感谢支持!目前还没完成 ;-P
你好,我是qt新手用的是qt5 在 学qt自定义插件的时候总是不成功,
找到的例子好多都是让重新编译qt
请指点一下
Qt 5 的插件机制与 Qt 4 不一样,可以看看 Qt 5 的 plugin 相关文档。
豆子高手,您好!
有个问题要请教一下,我在Qt-creater中点击应用程序的界面文件xxx.ui,出现runtime error 后Qt creater 自动关闭。 即使重装Qt后,新建一个应用pro,双击其mainwindow.ui时,问题还存在。 有什么解决办法呢?
应该是 IDE 哪里出了问题?具体还真不知道该怎么解决。或许你将程序完全退出之后,将遗留文件全部清除试试。
多出点QML相关的吧,出书也行,哈哈
QML 会在以后都是重点,目前由于书稿的原因更新比较慢,见谅 ;-P
出吧,到时候买一本支持你,O(∩_∩)O
等着你的书
豆子老师你好,我把你的Qt学习之路:从入门到精通 60篇 全部复制整理成一个PDF了,是比较精美的版本,而且自己也校对纠正一些错字,代码字体格式也整理好的,想发出来共享给大家,每一页的页眉都注明了出处,差附上你51cto的博客地址,首页也写上了你的名字及你现在这个博客的链接。
现想征得你同意再发出去共享,如果你不同意那么我就自用不发了,望回复。
可以的,感谢支持!不过现在还有很多内容没有完成,没准儿之后还得劳驾再次帮忙修订一遍了 ;-P
感谢博主!受益匪浅!
为什么访问您的网站经常要挂代理才上的去。好纠结。
不好意思,服务器提供商换过主机后,连接一直不稳定。以后考虑换回国内主机。对您造成不便敬请谅解。
归档序号错乱了,昨天还好着,不知道作者修改了什么
可以详细说明一下吗?最近一直没有任何修改
楼主,我想请教你一下,你是参考C++ GUI QT 4这本书吗?我准备看完你的教程,再看看这本书。
大致是参考这本书的,不过也有一些修改,所以谁先谁后都没有关系的。因为这本书主要是 Qt 4 的,本文主要添加了有关 Qt 5 的内容。
楼主,我点“订阅”的时候(用了上面的那个邮箱), 总是提示我“已经订阅过了”,但实际上我还是没有订阅到~请问该怎么办呢?
您使用的是哪个邮箱?具体原因我也不大清楚,试试先把邮箱移除再重新订阅下?
正在学习中,非常给力,感谢豆子的无私奉献
另外非常希望豆子能做一期关于multimedia的专辑,现在去网上搜索QT视频/音频制作内容,大多数都是Qt5废弃的phonon
没有QSerialPort相关的,最近我用5.3.2里的串口类读取数据,在子线程中每次readAll时程序就崩掉了,数据量比较大,下位机是一直在不停的发送数据包的,求楼主指点
老师您好,我有个问题想请教一下,我的程序在自己的电脑上(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等,但是结果还是一样,实在是百思不得其解,不知道该如何处理。还希望老师能百忙中抽点时间指导一二,非常感谢!
仅就 Qt 本身而言,自启动与手动启动没有任何区别。所以现在不知道是因为什么原因导致 windows 平台插件没有加载。方便的话可以将程序发送到邮箱以便解决。
老师好,我问的问题没有叙述正确,要问的应该是在WIN7系统下的Qt所编译的release版本的程序在别的电脑上无法开机自启动,找了好久终于找到原因了,是因为我没有在别的电脑上配置环境变量。谢谢老师的回复!
请问博主知道如何以绿色软件的方式发布Qt编写的程序吗?感觉Qt5的动态依赖库又多又大,发布程序很不方便。
只需要将所需要的全部 dll 与 exe 放在同一目录下(插件需要保持目录结构,比如 plugins 和 platforms)就可以直接运行了。
可不可以把所有的文件编译到同一个exe中呢?
那需要自己静态编译 Qt,然后重新编译应用程序就可以了。
豆子老师,你好,我看了你这个QT学习之路很久了,最近遇到一个问题,就是想通过QT发送信息到网站(如:百度),并在网站上查询该信息,把获得的信息在QT中显示,我应该从哪里开始着手?
使用
QNetworkAcessManager
进行网络访问,一般拼接字符串,然后添加 get 或 post 数据即可,可以参考下QNetworkAcessManager
的相关文档老师好,请问一下Qt可不可以获取当前打开的网页的网址?比如我用360浏览器打开了www.baidu.com,Qt能否获取www.baidu.com这个网址呢?可以的话应该用什么方法?谢谢!
这个不大清楚,个人认为是不可以直接获取的。或者有一种方法,监控系统 80 或 443 端口,不过不知道能不能成功
豆子老师你好,我现在又有另外的问题了。在QT5中使用了第三方库,还能够静态编译吗?要是不可以的话,进行静态编译需要满足什么条件?
豆子啊,用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这种的呢 ?
这个不大清楚,试一下 setRawHeader 这个函数看看能不能成功?
找到原因了
Qt在发request的时候是默认加User-Agent:Mozilla/5.0,大部分服务器都是支持这种设置的。但是我前面发的那个链接服务器设置比较特殊,验证User-Agent的时候必须要系统信息。
所以代码里在发request的时候需要显示设置req.setRawHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1)");
豆子老师,您好,我用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
非常感谢。。。。
一直以为qt是directui,颠覆了...
难道不是createwindow创建了主窗口,其他子窗口是直接画上去的?
目前没有找到资料说 Qt 是 DirectUI,个人感觉是 Qt 并不是完全重绘,而是自定义了组件的外观,这个待议
豆子,问问你噢,有没有一本像C++ GUI Qt4这样比较好的Qt5的教材呢?求推荐~~
楼主,怎么没有一些窗口动画的教程啊
哪方面的窗口动画?
比如说窗口弹出的曲线动画,然后dialog或者在GraphicsView当中的绕轴旋转(因为我自己在做绕对话框1/2宽度这个轴旋转没能实现),还有我自己想象的对话框点击关闭之后,整个对话框像气泡,或者玻璃一样破碎,渐隐的动画这三种
豆子老师,您好,我想问下我在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呀。求解到底怎样能解决这个问题?
这种问题一般都是因为环境问题,经常在别的机器上面无法重现。你可以使用绝对路径试试,先 clean 一下在进行编译。
支持下, 感谢博主!受益匪浅!
豆老板,看了你的教程,已无法估的投入到了qt的怀抱,不过现在我刚开始,遇到了一些问题。
因为我在学习用 vim,所以希望能用vim编辑代码,但发现不用qt creator来写代码真的太麻烦了,因为写完代码之后要到控制台到文件所在目录,执行qmake -project来生成工程,然后在qmake链接,然后再编辑pro文件再最后面加上qt += widgets(否则在make的时候会出现fatal error: QApplication: No such file or directory错误),然后再把生成的exe文件复制到qt下面的bin目录里(否则直接双击无法运行程序,会出现接口错误)。是不是我哪里弄错了?我觉得应该不是这么麻烦的吧?
不使用 IDE 的话的确需要这么多步骤,所以现在一般会使用脚本,写好脚本之后运行一下,可以让系统去做这一系列的工作。网上也有很多将 vim 打造成 IDE 的方法,可以参考一下。
谢谢豆老板,学习了~~~
QT怎么调用c语言写的函数啊?
Qt 是 C++ 的,使用 C++ 的方式即可,具体来说就是放在 extern {} 块中。
豆子最近有更新一些其他的么!感觉跟着你学还是蛮有效率的。
有关 QML 的内容,网上有一系列不错的教程,可以参考下。原文地址是 http://qmlbook.github.io/,网上也有中文翻译,请自行搜索。
豆子您好,请教您一个问题,我如何才能创建dll共享库呢?
我直接在QT中创建,并直接编译,会要求我指定一个运行的EXE文件,然后并没有生成相应的dll文件
将 pro 文件中的 TEMPLATE = app 改成 template = lib,编译出来就是共享库了
豆豆,Qt中使QAxObject操作Excel,程序执行完后在资源管理器中有无数个Excel.EXE。相当于每操作一次就产生一个Excel.EXE。请教下该怎么解决
这个没有测试过,是不是需要释放一下 ActiveX 对象?
刚刚发现豆子写的Qt学习之路,看起还很不错,加入收藏夹了。给作者点个个赞。
多谢支持
多谢支持!
豆子好样的!已捐助。顺便提问:
我在qtcreator中该怎样调用第三方动态链接库呢?就是有.dll .lib和.h三个文件的那种。
谢谢!
多谢支持!
不清楚你说的“在 Qt Creator 中调用第三方动态链接库”是什么意思?是让 Qt Creator 调用,还是通过 Qt 的应用程序调用?如果是后者,只需要修改 pro 文件,增加 LIBS += XXX 这样的语句即可,可以查阅下相关文档。
额。。。我是初学者,不清楚二者的区别。。。
我现在是要用QT写个程序来读写excel。我找到了一个第三方的excel读写库,在visual studio中已经成功实现了我需要的所有功能。现在想把我写的函数放到GUI里面,然后发现visual studio中关于库的设置什么的在QT creator 中全都没有!(估计是我没找到)。。。
这样的话就只需要在 .pro 文件中添加 LIBS 之类的语句,例如,需要链接 Iphlpapi.dll 时,添加 LIBS += lIphlpapi(注意 dll 名字前面有一个l)
谢谢豆子哥!再次捐助!
豆子哥,感谢您的伟大壮举的贡献。看来了你的教程,对于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个库,不知道如何解决这个问题?
还有就是关于图片的问题,如果是资源文件,那些图标,是不是也要放到打包的文件夹底下?
另外就是一个数据库的问题,生成的数据库是在当前目录下,就是打包的文件夹里面,那么我在打包完以后就没法处理数据库的信息了,是不是改一下路径,改成打包以后的文件所在的目录下比较好,还是写死在一个文件夹底下比较好?
1. Qt 的 dll 即便是 release 版本的也比较大,这个没有办法,可以试着用 ASPack 之类的压缩工具把 dll 压缩一下。
2. 关于那两个 dll,我没有遇到过,可能是引入了别的什么库吧。
3. 如果使用资源文件,图片会被编译成二进制的,所以,不需要打包一起发布。不过,如果是运行时加载的就必须打包了。
4. 数据库可以放在 exe 运行目录下比较方便,运行时获取自己的运行路径,或者直接放在用户目录下也是可以的。
豆子大神能不能写一写自定义控件的方法?网上好多方法用QT5都编译不通过啊
关于什么的“自定义控件”?普通的话,就是继承 QWidget 这样的类就可以的
通过插件法自定义一个原来没有的控件。生成dll和lib后,拷贝到..\plugins\designer中,这时在QtDesigner中可以直接拖拽生成这个控件,但是编译会不通过,显示找不到头文件,将头文件拷贝到工程目录下会显示链接失败,将lib和bin也拷贝到工程目录和执行目录下,依然链接失败,请教是该怎么使用这个自定义的控件呢?
还有,我直接继承现有的控件,写了一个Qt GUI Class,且控件外观有修改,那么用QtDesigner画界面时,新控件的外观上的变化并不会显示出来,但手写代码的话就可以显示出新的外观,感觉很奇怪,是不是我哪里写的不对?
豆哥,我用QStyle的方式自定义QProgressBar,自定义的进度条是用来显示声音的进度值的。现在的问题是:我调节声音旋钮进度条可以显示出来,但进度条只能前进一次(进度条的数值是正确的),正确的现象应该是,每次调节声音旋钮,进度条应该前进一次。
我初步查看了一下,调节声音旋钮,进度条没有前进,是drawControl函数里的CE_ProgressBarContents项没有执行到,进度条前进了,就执行到了。请问这是什么原因?
豆子老师你好!
最近遇见一些问题,我又来请教你,希望能够得到回复。
最近刚刚看《代码本色》,写了一个关于小球在窗口中运行的简单程序,但是就这样出现了问题,我感觉小球似乎在闪烁,我百度之后,得到的是用双缓存技术来消除这种闪烁,为此,我又修改一下代码但是感觉还是没有什么效果,希望豆子老师在这里能帮我解决一下,谢谢!
下面是源代码:
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);
}
谢谢!
setAutoFillBackground(false);这一部分应该没有的,希望豆子老师及时回复!
从 cpp 文件中有些不知道是什么类型,最好把整个工程发送到邮箱
豆子老师你好
我是初学者,想问一下,如果c++基础不好的话
能照你的教程学习QT吗
如果不行,推荐先学习哪些内容再学历你的教程呢?
基础 C++ 必须要知道的,高级用法比如模板之类可以不了解。否则的话,学习 Qt 可能会比较吃力。可以从 C++ 基础开始学习,比如《C++ Primer Plus》之类的书籍都是很好的入门书。
好的,感谢豆子老师的推荐
您好,我使用Qt有一段时间了。现在遇到一些问题:由于使用了Qt5.7里面的Qt3D模块,关闭主程序的时候会中断,提示Qt3DCored.dll的问题,0x0000005。不知道Qt3D模块能不能在三维空间画直线和多边形?包括凹多边形。谢谢豆子老师
大神,用小票打印机打印出来的字体特别大,长,字体设置了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 试了,打印机是正常的
一直在试是哪里的问题,改用p.setPageSize(s)字号大小正常,但是位置特别偏,还用doc.的时候,改了一下s 中297,如620,820,1920字越来越正常,是不是因为电脑分辨率的问题,如果是因为这个,那该怎么设置让它在不同的电脑上都能正常显示
字大小的问题解决了,是我设置纸张规格的问题,
您好,请问您qt学习之路1的链接可以发一下吗?谢谢!
第一篇的地址是:http://blog.51cto.com/devbean/193918
只是这部分都是 Qt 4 的,现在针对 Qt 5 的话很多内容都过时了
竟然从2012年更新到2016年,太震撼了。感谢博主。
能否提供pdf或epub下载,谢谢
目前我没有 pdf 或者 epub 的打包,不知道有木有别人生成过
博主你好!我学了C和C++还有数据结构,学习这些语言和算法的时候都是做的一些格式化输入输出的题,全部是依赖于控制台程序。现在想打算做一个带图形界面的程序,包含的算法是图论里的寻找两点最短路径。在知乎上看了大家的讨论,都说初入图形化Qt好上手,MFC、EasyX、WPF这些都很麻烦,但对我来说不管用什么做界面,都找不到思路。现在我做的这个程序已经能够在控制台的情况完美运行,只差GUI的实现了。
总的一句话来讲:我至今没有做过一个完整的图形化运行的程序,真的不知道怎么把一个控制台的程序变成带界面的东西。
照着Qt给的实例,或者GitHub上别人的完整GUI项目做一遍运行运行,感觉会了,一到自己做,没有任何提示任何思路,只有一个黑框框(控制台运行的程序),不知道怎么搞啊?
既然你已经有个目标,那就照着这个目标去选择需要哪些技术才能实现。比如,你现在的程序已经能够在控制台运行,那么就考虑界面需要提供哪些参数来让你的程序能够运行?如果你的程序参数是通过命令行参数传入的,或者直接写死在源代码里面,那么就应该改造成接受参数。这样,界面就可以使用参数传入,从而复用你的程序。你现在的程序就是业务逻辑,界面用来展示业务,这样就实现了业务与展示的分离。一旦程序完成,那么就开始从最简单的角度入手,比如最短路径算法可能需要绘制地图。算法里面的地图可能使用二维数组存储,那么如何在界面展示这个数组?最简单的思路可能是元素 0 显示成路径,元素 1 显示成墙,类似这样。所以就可以考虑在 Qt 中按照这个二维数组的数据绘制地图。这就涉及到窗口绘图的技术。完成地图,那么你要考虑用户该怎么输入最短路径需要的两个点?当然让用户通过鼠标点击选择最好。这就需要 Qt 的鼠标事件处理。因此针对你的程序,可能仅仅为了图形化显示一个算法,那么可以从如何可视化显示你算法的数据、过程入手,考虑将算法中抽象的数组存储、每步的结果,使用图形显示出来。最终你将得到一个可视化的算法演示过程。然后你可能再需要菜单控制算法开始、结束等,这样就基本完成一个简单的程序了。如果感觉从绘图入口比较复杂,那也可以反过来,从菜单到绘制。总之不要既想做菜单又想完成显示,这样结构就会混乱了。
我觉得时熟练度的问题,如果你之前有过gui的经验,那么上手qt 应该非常快,正是因为你没有过类似的经验,不明白其中的运行大概时怎样的,组件都有哪些,怎么自定义自己想要的组件,又或者不明白了,怎么查找帮助文档,这些说起来就是经验和Qt 的基础的问题。就常理来看,我个人认为是如此的。(我搞那个tensorflow 目前状况跟你差不多,比你还差点,让我自己创建个模型,训练下,就完全不行,看到别人说的,啥都明白的样子,我觉得就是一个熟练度和基础的问题),慢慢来。
豆子老师,请问有没有关于QT上使用MODBUS的相关资料呢?
目前我也没有相关资料
单位里的项目刚用了 用qserialport
不过建议别用。。 因为出了问题 是这个库的bug 后来全改成了 windowsapi折腾了好久
您好,我想请问一下,qt能否实现向matlab一样读取三维点坐标数据,画出散点图并连成线?谢谢。
个人感觉是可以的,大概要用 QPainter 绘制吧
[…] 《Qt 学习之路 2》目录 […]
豆子老师,请问一下 这个访问网络的源代码有吗?从delphi转qt看得有点吃力,有源代码吗。
源代码部分有,一般在文末。如果没有的话可能是因为代码比较简单,按照文章中的代码片段组织一下就是完整代码,或者有的文件链接可能有问题,如果发现的话就及时留言处理下。
博主你好,我在使用qt时经常会莫名的出现编码错误,貌似是utf8bom 相关的原因,所报的错误是"常量中有换行符".请问您以前出现过吗?如果出现过是用什么方法解决了这个报错呢?
最简单的办法是源代码中不要有英文以外字符,所有可视文本使用国际化翻译,就不会有任何问题
豆子老师,请问一下QT用什么方法可以获取字体的像素点数据,谢谢!!
在网络上查找QT5相关资料而找来的
感谢楼主的分享,向楼主的分享精神,致以崇高的敬意!