Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对带有信号和插槽的类强制使用Q_对象宏_C++_Qt_Visual C++ - Fatal编程技术网

C++ 如何对带有信号和插槽的类强制使用Q_对象宏

C++ 如何对带有信号和插槽的类强制使用Q_对象宏,c++,qt,visual-c++,C++,Qt,Visual C++,我有一堆定义了Q_OBJECT宏的基类和没有它的派生类: class Base : public QObject { Q_OBJECT public: // signals and slots }; class Derived : public Base { // notice no `Q_OBJECT` macro public: // signals and slots }; 这很好,但根据: Q_对象宏必须出现在类的私有部分中 声明自己的信号和插槽或使用

我有一堆定义了
Q_OBJECT
宏的基类和没有它的派生类:

class Base : public QObject
{
    Q_OBJECT
public:
    // signals and slots
};

class Derived : public Base
{
    // notice no `Q_OBJECT` macro
public:
    // signals and slots
};
这很好,但根据:

Q_对象宏必须出现在类的私有部分中 声明自己的信号和插槽或使用其他 Qt的元对象系统提供的服务

对于使用Qt元系统的类,当缺少
Q\u对象
宏时,有没有办法停止编译?


PS:我正在使用MSVC编译器

你确定你有信号并且它们工作吗?如果使用新的(在Qt5中)连接方法(使用函数指针的方法),插槽可以在没有宏的情况下工作。尽管如此,仍然建议在派生中使用宏,因为Qt还有其他依赖于该宏的功能,例如元对象系统(qobject_cast等)。据我所知,没有Q_对象宏是编译时错误(在所有情况下,如果宏丢失,在某些情况下会出现链接器错误)。是否需要宏完全由程序员决定。@Zlatomir是的,它们确实有效,我使用的是现代风格的连接。这看起来很奇怪,我无法确保它的存在(我在谷歌上搜索)。因此我在这里问了一个问题:)如果你在类定义中声明了任何信号/插槽等,那么你需要在代码上运行
moc
,那么得到一个编译器警告就太棒了,我可以很容易地将其视为编译过程中的错误
moc
应该(据我记忆所及)抱怨缺少
Q_对象
宏。@G.M.AFAIK
moc
检查的不是宏,而是它生成的代码。他发现这是因为基类生成了所有必要的方法,所以
moc
不会抱怨。问题是,我希望为派生类扩展宏,并覆盖基类的扩展