2013-04-08 72 views
2

我想使用QApplication類創建一個獨立的靜態庫,其中包含Qt如何使用QApplication創建獨立靜態庫?

所以這樣做,我使用PIMPL,因爲我不希望公開任何的Qt類。

我的私人實現看起來如此簡單:

class Implementation : public QApplication { 
public: 
    Implementation(int argc, char *argv[]) : 
     QApplication(argc, argv) 
    { 

    } 
}; 

但每當我試圖從我的測試應用程序啓動庫我得到的所有有錯誤:

undefined reference to `QApplication::metaObject() const' 

是的!它確實有道理。我得到那些,因爲測試應用程序沒有任何參考QtQApplication類。

所以我怎麼使用Qt的特別是QApplication類在我的圖書館,並仍然能夠在平原C++項目使用它?

回答

4

您的班級定義缺少Q_OBJECT宏和/或您的編譯系統未在您的文件上運行moc

此外,願意使用QApplication類的不是典型的設計模式。是什麼讓你在這裏選擇QApplication

+0

我想用QWidgets和QPainter創建一個簡單的圖形庫。我不知道它是否與這個問題相關,但我仍然得到一個'未定義的對_imp ___ ZN12QApplicationC2ERiPPci1'的引用,還有另一個'對SimpleOpenDrawerImplementation的vtable的未定義引用。你能提供解決這個問題的建議嗎? – 2013-04-08 15:43:20

+1

確保你[調用了''moc''](http://qt-project.org/doc/qt-4.8/moc.html#moc)並且鏈接到了生成的目標文件。這是鏈接器錯誤的原因。 從庫與QApplication一樣,一個典型的方法是委託實例化QApplication給庫用戶。每個進程只能有一個QApplication實例。 – 2013-04-08 15:52:28

+0

我在文件末尾添加了#include「implementation.moc」。現在我得到了很多新的'未定義引用'錯誤,包括'未定義引用'非虛擬thunk到...' – 2013-04-08 18:23:06