在我的应用程序中,我有以下类层次结构:
class Word
{
...
}
template <typename T> class Dictionary
{
...
};
class WordDictionary : public Dictionary<Word>
{
Q_OBJECT
...
}
WordDictionary 类解析需要很长时间的字典。我在一个单独的线程中运行解析函数,我希望它能够不时向 GUI 线程发出信号,以根据当前正在解析的行号提供进度更新。这就是为什么我希望它是一个 Q_OBJECT。我试图将基类 Dictionary 设为 Q_OBJECT,但收到一条消息,指出不支持 Q_OBJECT 模板。当我删除宏,只留下 WordDictionary 作为 Q_OBJECT 时,我收到一堆一般形式的错误消息:
.\GeneratedFiles\Release\moc_dictionary.cpp(44) : error C2039: 'staticMetaObject' : is not a member of 'Dictionary'
with
[
T=Word
]
除了对其中的模板函数进行硬编码,产生大量样板代码之外,我还能做些什么来使我的模板派生 WordDictionary 类成为 Q_OBJECT?
编辑:将模板声明更改为:
template <typename T> class Dictionary : public QObject
使代码编译。不过,我不确定我是否没有做一些愚蠢的事情,以及这是否能正常工作。