簡體   English   中英

Qt和Q_OBJECT

[英]Qt and Q_OBJECT

這是我的代碼:

工具

#include <QtCore/QObject>    
namespace Tinject
{
    class ProbeCreator : public QObject
    {
        Q_OBJECT

        public:
            explicit ProbeCreator();
            Q_INVOKABLE void createProbe();
            //void update();
    };
}

tools.cpp

#include <stdio.h>    
#include "tools.h"    
#include <QtCore/QCoreApplication>
#include <QtCore/QMetaObject>

using namespace std;
using namespace Tinject;

ProbeCreator::ProbeCreator() {
    moveToThread(QCoreApplication::instance()->thread());

    QMetaObject::invokeMethod(this, "createProbe", Qt::QueuedConnection);
}

void ProbeCreator::createProbe()
{
    printf("CREATE PROBE");
}

#include "tools.moc"

每次之前

g++ (g++ -fPIC -o hook.so -shared -I/path/Qt5.4.2/5.4/gcc_64/include -L/path/Qt5.4.2/5.4/gcc_64/lib -lQt5Core main.cpp) 

我跑步

moc tools.h -o tools.cpp

然后我嘗試注入這個庫掛鈎。 所以我正在使用LD_PRELOAD ,但出現以下錯誤:

hook.so:未定義的符號:_ZN12ProbeCreatorC1Ev

我的main.cpp是:

#include "tools.cpp" 
using namespace Tinject; 
extern "C" Q_DECL_EXPORT 
void qt_startup_hook() 
{ 
  new ProbeCreator(); 
}

這有什么問題?

代碼太多,需要額外的測試:)

看起來您的tools.cpp沒有包含在源代碼中或未編譯。

#include "tools.cpp"

這是錯誤的; 您需要包括標題:

#include "tools.h" 

此外,正如@StPiere指出的那樣,您需要將源文件tools.cpp 生成的moc_*.cpp文件包含到鏈接中。 如何通過自定義對g++調用來實現此目的,所以您將自己嘗試一下; 不過,我會建議使用qmake並成立了項目文件,這也將照顧moc ING和許多其他Qt的具體細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM