Chinaunix首页 | 论坛 | 博客
  • 博客访问: 233516
  • 博文数量: 27
  • 博客积分: 270
  • 博客等级: 二等列兵
  • 技术积分: 444
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-21 19:55
个人简介

Enjoy yourself!

文章分类

分类: Windows平台

2013-06-18 17:45:18

本文转自:http://blog.csdn.net/wzm10455/article/details/8745380

◆ 安装 Qt 以后要记得配置环境变量。在 Windows 下安装以后,用 Qt Command Prompt 可以自动设定,但是要小心干扰到其他程序的环境变量。较谨慎的办法是自行打开 bat 文件查看所需操作,手动编辑环境变量。


◆ Qt Creator 界面上有许多文字没有设定字体,使用了系统的某个默认配置,导致满眼都是丑陋的宋体英文。在注册表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize 之中,把 GUIFont.Facename 的键值由改为需要的字体名——例如,即可美容。

◆ 用 setGeometry() 在 X11 上可能导致闪烁,所以分别用 size() 和 move() 更有兼容性。详见 Qt 文档中的 Window Geometry 相关部分。

◆ 尽量不要在循环语句中访问 Gui 内部的容器,例如 Text Edit,那样可能会大大降低速度。在一开始把数据复制到内存中,再进行循环操作会比较快。

◆ 在一个函数体内部声明变量,要按照“先父后子”的顺序,否则,C++ 的逆序析构原则会和 Qt 的父子对象关系管理策略发生冲突,导致程序崩溃。

◆ 重新安装 Qt 时记得清理 ......\Application Data\Nokia 文件夹,否则其中的一些配置文件可能会对新版本的 Qt 造成干扰。如果发现 Qt Creator 的帮助系统中缺少了一些文档(或者出现了重复的目录项),那么删去配置文件会解决,当然,用户原有的设定将会丢失。

◆ setWindowFlags() 的使用要小心,用 setWindowFlags(windowFlags() | newFlag) 才可以保留原来的窗口属性。但是此函数不会自动去除冲突的属性,例如 Qt::WindowTitleHint 和 Qt::FramelessWindowHint。它们在设定后可能会同时存在,导致不确定的结果。可以用  setWindowFlags(windowFlags() ^ (newFlag1 | newFlag2 | contraNewFlag1 | contraNewFlag2)) 来去掉冲突的属性。可能更好的解决方法是调用基类构造函数来设定 windowFlags。后者可以避免复杂的表达式。

◆ Qt Creator 侧栏的 File System 窗口存在 Bug。一是缺少及时的 update——如果在外部更改了工程文件夹下的内容(删除程序生成的文件和文件夹,只留下源代码),那么 File System 窗口会继续显示旧内容;二是文件夹无故变成全小写——从外部拖拽一个新的文件夹下的 .pro 文件,打开这个工程,单击工程中的一个源文件,则 File System 窗口上部会显示一个全小写的文件夹名。如果关掉 File System 再打开,则问题消失。

◆ 注意无 .h 后缀的头文件包含形式,有时需要查看它实际指向的文件才能准确知道它代表什么。例如,qDebug() 在 qevent.cpp 中重载了 << 操作符,可以输出 QEvent 中的事件类型(枚举变量)的名称。程序中如果未包含 qevent 则只能输出十六进制值。看起来,应当包含的是 ,但实际上 => "qevent.h", => "qcoreevent.h",所以 才是需要包含的。

◆ QObject 子类——例如用于实现程序窗口的类——在构造函数中常常需要进行一些初始化工作,包括 connect 信号和槽等。这时一定要特别注意顺序,否则可能会出现各种严重的错误。

◆ 安装 Qt 以后,可能会在空闲空间最大的硬盘根目录下发现 vcredist 程序包。不知为什么它被安装到了错误的位置。可以在系统的“添加或删除程序”功能中找到 Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022 并卸载之。在安装这个软件包的新版本 30729 之后,可以正常运行 Qt Creator 而无需根目录下的一堆文件。但是,以后重新安装新版 Qt 仍然会遇到这个问题,直接卸载 Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022 之后,由于版本 30729 的存在,Qt Creator 可以正常运行。


◆ QProcess 可以用于调用外部程序,但要注意,Windows 系统的一些功能并非独立的程序,不能直接调用。例如 dir 是命令提示符 cmd.exe 提供的命令,而不是程序,要调用 cmd 以后才能使用。下面是从网络中得到的用法示例:

QProcess p(0);
p.start("cmd");
p.waitForStarted();
p.write("dir\n");
p.closeWriteChannel();
p.waitForFinished();
qDebug() << QString::fromLocal8Bit(p.readAllStandardOutput());



QProcess p(0);
p.start("cmd", QStringList() << "/c" << "dir");
p.waitForStarted();
p.waitForFinished();
qDebug() << QString::fromLocal8Bit(p.readAllStandardOutput());

write() 中要使用 \n 结尾,作用等同于在窗口中敲回车键?

这样使用 cmd 命令并不显示黑色的命令行窗口,代码片段中的最后一行可以输出标准输出中的信息。使用 setStandardOutputFile() 可以把这些信息保存为文件。

 

◆ 如果出现 invalid use of incomplete struct 错误,可能是 ui 设计过程中不小心改动了 object name 的原因。Object name 是在新建 project 或 widget 时设置的,在 Qt Designer 中该变量可能不显示为默认字体(而是加粗的字体,表示改动过),如果点击按钮恢复为默认值,会出错。

阅读(2227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~