Qt小技巧集锦
除了/*...*/
和//...
还可以使用下面的方式注释
#if 0
需要注释的代码
#endif
- 1
- 2
- 3
2、Qt使用cout
输出更详细的调试信息
使用C语言全局宏输出调试信息所在文件、行号
#define cout qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"
构造函数中:
cout<<"csdn";
- 1
- 2
- 3
结果如图:
注意:FILE和LINE两边各是两个下划线__
当然,也可以直接用qDebug输出:
文件、行号、所在函数
qDebug() << __FILE__ << __LINE__ << __FUNCTION__ << "This is a test";
- 1
结果:******.cpp 54 initForm This is a test
使用#define宏定义
#define qDebug() qDebug() <<"["<< __FILE__ <<__FUNCTION__<< __LINE__<<"]"<<":"
- 1
3、Qt可以使用第三方的信号与槽机制。
你甚至可以在同一个项目里使用两种信号与槽机制。只需要把下面一行加到你的项目文件(.pro)
CONFIG += no_keywords
- 1
这行命令式告诉Qt在使用第三方类库如boost时不定义signals,slots和emit关键字。在no_keywords标志下继续使用Qt的信号与槽,只要简单替换源代码中Qt的moc关键字为相对应的Qt宏Q_SIGNALS (Q_SIGNAL), Q_SLOTS (Q_SLOT) 和Q_EMIT。
例如:
原来: private slots:
现在 :private Q_SLOTS
- 1
- 2
4、屏蔽警告
CONFIG += warn_off
- 1
有时候我们需要屏蔽一些无用的警告,不过,还是建议把警告保留,方便调试。
5、设置软件版本号
在.pro
文件中加入以下代码设置版本号为1.0.0.0
VERSION = 1.0.0.0
- 1
6、跨平台代码
.pro
文件中,设置依赖文件: win32 { SOURCES += qextserialport_win.cpp }
unix { SOURCES += qextserialport_unix.cpp }.cpp
文件判断系统 #ifdef Q_OS_WIN//如果是windows系统
#ifdef Q_OS_LINUX//如果是Linux系统
7、屏蔽qDebug信息
平时代码测试会用到很多debug输出,当想屏蔽工程里面所有的debug输出时,
可以在pro文件中添加这么一行,
DEFINES+= QT_NO_DEBUG_OUTPUT
- 1
8、检测程序版本
检测程序是Debug版还是Release版
#ifdef QT_NO_DEBUG
qDebug() << "release mode";
#else
qDebug() << "debug mode";
#endif
- 1
- 2
- 3
- 4
- 5
9、提高Qt编译速度:
在.pro
文件中加入: QMAKE_CXXFLAGS += /MP
指定/MP
编译选项,编译器将使用并行编译,同时起多个编译进程并行编译不同的cpp文件
#msvc支持设置
msvc {
MSVC_CCFLAGS =
#this three pragma cause mingw errors
msvc:MSVC_CCFLAGS += /wd"4819" /wd"4244" /wd"4100"
#UTF8编码
DEFINES += __MSVC_UTF8_SUPPORT__
msvc:MSVC_CCFLAGS += /execution-charset:utf-8
msvc:MSVC_CCFLAGS += /source-charset:utf-8
#msvc:MSVC_CCFLAGS += /utf-8 #这一个是快捷方式,顶上边两个。
#指定/mp编译选项,编译器将使用并行编译,同时起多个编译进程并行编译不同的cpp
msvc:MSVC_CCFLAGS += /MP
#指出:这个FLAG只能用于MSVC
msvc:QMAKE_CFLAGS += $${MSVC_CCFLAGS}
msvc:QMAKE_CXXFLAGS += $${MSVC_CCFLAGS}
#指定stable.h这个头文件作为编译预处理文件,MFC里这个文件一般叫stdafx.h 然后在 stable.h里 包含你所用到的所有 Qt 头文件
#在.pro 文件中加入一行, 加在这里,加速编译。
#msvc:PRECOMPILED_HEADER = $${PWD}b-qt.h
#指出:precompiler header只能用于MSVC
#这个功能可用,可是编译问题比较多,不方便,所以默认不打开。
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
待续……