Qt常见宏定义

Q_OBJECT:继承了QObject类的类,使其具有信号槽的能力。

  QObject 是Qt模块的核心。它的最主要特征是关于对象间无缝通信的机制:信号与槽。使用connect()建立信号到槽的连接,使用disconnect()销毁连接,使用blockSignals()暂时阻塞信号以避免无限通知循环,使用connectNotify()和disconnectNotify()追踪连接。
  使用信号槽,必须直接或间接继承QObject,都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。
示例:

1
2
3
4
5
6
7
8
9
#include <QObject>

class xxpublic QObject
{
Q_OBJECT
public:
xx(QObject* parent );
~xx()
}

常见系统宏定义

Q_OS_MAC:Mac系统宏定义
Q_OS_WIN:Windoows(x86/x64)系统宏定义
Q_OS_WIN32:Windoows(x86/x64)系统宏定义
Q_OS_WIN64:Windoows(x64)系统宏定义
Q_OS_ANDROID:Android系统宏定义
Q_OS_LINUX:liunx系统宏定义

示例:

1
2
3
4
5
6
7
#if defined(Q_OS_WIN32)
qDebug()<<"Q_OS_WIN32";
#elif defined(Q_OS_LINUX)
qDebug()<<"Q_OS_LINUX";
#else
qDebug()<<"Q_OS_other";
#endif

虚函数宏定义

Q_DECL_OVERRIDE:防止虚函数重写不正确

1
2
void paint(QPainter *painter,
const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;

取消警告

Q_UNUSED(index): 取消没有使用的变量警告

1
2
3
4
5
  void paint(int index ,int abc)
{
Q_UNUSED(index)
int c = abc;
}

国际化

Q_DECLARE_TR_FUNCTIONS(what) : 给非Qt类添加翻译支持

1
2
3
4
struct Tr
{
Q_DECLARE_TR_FUNCTIONS(Welcome)
};

QT_TR_NOOP() 和QT_TRANSLATE_NOOP() :翻译的文本在函数的外部

QT_TR_NOOP() 示例

1
2
3
4
5
6
7
8
QString FriendlyConversation::greeting(int type)
{
staticconst char *greeting_strings[]= {
QT_TR_NOOP("Hello"),
QT_TR_NOOP("Goodbye")
};
return tr(greeting_strings[type]);
}

QT_TRANSLATE_NOOP() 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
staticconst char *greeting_strings[]= {
QT_TRANSLATE_NOOP("FriendlyConversation","Hello"),
QT_TRANSLATE_NOOP("FriendlyConversation","Goodbye")
};

QString FriendlyConversation::greeting(int type)
{
return tr(greeting_strings[type]);
}

QString global_greeting(int type)
{
return qApp->translate("FriendlyConversation",
greeting_strings[type]);
}

PS:如果你用宏QT_NO_CAST_FROM_ASCII定义来编译软件禁止从const char * 到Qstring 的转换,你就可能捕获任何漏掉的字符串。