C++ qt预处理器

C++ qt预处理器,c++,qt,signals,C++,Qt,Signals,在QT中编译的顺序是什么?据我所知,写作是不可能的 #define BEGIN_SIGNALS signals: 是仅使用 #ifdef QT signals: #endif 只是测试了一下 #define BEGIN_SIGNALS signals: 由于moc也进行预处理,因此实际工作与预期相符。 QObject类MyQObject的编译顺序为- start moc for MyQObject.h moc run the C preprocessor moc prod

在QT中编译的顺序是什么?据我所知,写作是不可能的

 
#define BEGIN_SIGNALS signals:
是仅使用


#ifdef QT
signals:
#endif
只是测试了一下

#define BEGIN_SIGNALS signals:
由于moc也进行预处理,因此实际工作与预期相符。
QObject
MyQObject
的编译顺序为-

start moc for MyQObject.h
   moc run the C preprocessor
   moc produces the moc_MyObject.cpp file
moc_MyObject.cpp is compiled by the native compiler
MyQObject.cpp
在此之前或之后由本机编译器编译

请注意,当使用本机编译器时,
这个词本身就是一个宏,可以转换为
protected
。所以我不知道你为什么要定义这样的东西
BEGIN\u SIGNALS

  • 对自定义关键字使用宏有什么意义
  • 元对象编译器调用C++预处理器,所以你很好地使用宏来处理这些关键字。
  • 如果不是Qt,那么对于事件机制,您希望依赖什么其他工具包?在我看来,使用重叠的工具包进行开发是没有意义的,除非您希望保留依赖于Qt的特定功能,这些功能可以在编译时配置(在构建设置中)。在这种情况下,最好使用工具链中的语义(automake、cmake,无论您使用什么)

  • 你可以反过来做

    若不是QT,那个么将“信号”定义为“受保护”——QT无论如何都会这样做,这样编译器就不会出错。您还需要定义Q_对象、emit()和connect()以不执行任何操作


    你有时确实需要这样做,我有一个低级别的库,它不依赖于Qt,但它可以在事件发生时发送Qt信号。如果没有Qt,它可以发送windows事件或回调函数。

    谢谢,我只想在Qt信号/插槽周围写一些包装。它允许我使用其他平台上的其他库来提供此功能。但顺序不是你写的。首先moc处理所有信号并在moc文件中生成它们的代码,然后在它们上面启动预处理器。也许是这样。预处理器不可能生成信号名。他们被带到moc文件,因为你是对的。moc实际上没有运行预处理器。。。如果您将取消标记为已回答,我将删除答案。是否让您的类成为QObject取决于某些ifdef的声音。它如何为非Qt情况下的信号/插槽机制实现等效功能?我想用它上两节课。现在我说不出它行不行。但我想要的是替换QObject::connect的直接调用和信号/插槽的声明。我只想让我的代码在不使用qt的VisualStudio中编译,在qt中编译。)在VisualStudio中,我使用FastDelegate库。为什么我要这样做,因为我只有两个参数的委托。