Qt子项目找不到moc文件

时间:2017-10-01 16:23:22

标签: qt

我最近尝试为包含Q_OBJECT宏和自定义信号的类编写单元测试(使用googletest)。测试子项目将不会编译(即使在重建/删除所有内容之后),并出现以下链接器错误:

"error: undefined reference to `vtable for Class'"

"error: undefined reference to `vtable for Class::signal()'"

我的src子项目编译得很好。在研究了这个问题后,我想问题是编译器没有为测试子项目生成moc文件。另外,我还没有成功在测试中包含src子项目的moc文件。我该如何解决这个问题?

以下是我的.pro文件:

Project .pro文件

TEMPLATE = subdirs
CONFIG(debug, debug|release) {
    SUBDIRS += \
        src \
        test
    test.depends = src
} else {
    SUBDIRS += \
        src
    QMAKE_CXXFLAGS += -O2
}

src.pro

QT += core gui charts widgets
TARGET = Project name
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
HEADERS += \
    ...
SOURCES += \
    ...

test.pro

include(gtest_dependency.pri)
QT += core
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG += qt
INCLUDEPATH += $$PWD/../src
DEPENDPATH += $$PWD/../src
HEADERS += \
    ... (only test headers)
SOURCES += \
    ... (test and src source files)

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。确保Qt mocs src头也适用于测试项目似乎需要在测试项目.pro文件中提及它们。因此添加如下内容:

ActiveRecord::RecordInvalid in CoursesController#create
Validation failed: Listing must exist

如果测试需要所有src标头,则可以将它们提取到一个公共的.pri文件中。