2013-07-17 78 views
0

我在Visual Studio中的以前的項目(我們稱之爲項目1)中創建了一個QT窗體,現在另一個項目的UI屬性和設計與之前的幾乎相同項目,因此我正在考慮在Visual Studio中創建一個QT表單項目(項目2),並且從之前的QT表單繼承而不是重寫代碼。例如,對於項目1:如何從Visual Studio C++中的QT窗體繼承

class GUIBase : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    GUIBase (QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~GUIBase(); 

public slots: 
    //some slot definitions 
}; 

而在項目2中,衍生自:

class GUIDerived: public GUIBase 
{ 
    Q_OBJECT 
public: 
    GUIDerived (QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~GUIDerived(); 
}; 

當編譯項目2,它有一個問題,當MOC-ING在項目1 GUIBase(因爲頭GUIBase文件位於不同的文件夾中)。所以我的主要問題是,我如何設置moc過程?我是否僅僅需要GUIBase或是否需要同時使用GUIBase和GUIDerived?我還需要一個GUIDerived的.ui文件嗎?

對不起,如果問題不太清楚,那是因爲我自己並不完全確定這個過程。

+0

如果要將UI複製到其他項目,可以重複使用.ui文件,將其與第一個項目中的相同方式包含到項目中。 MainWindow類只是UI的容器,UI的佈局和控件存儲在.ui文件中。如果您想重用您在GUIBase中編寫的方法,您需要複製GUIBase頭文件和cpp文件以及.ui文件在新項目 – WoJo

+0

中感謝您的評論。我想到了這一點,但我試圖看看是否有可能將基礎文件放在一箇中央位置,並從那裏使用它們。我需要使用相同的UI設計和格式來開發另外兩個項目。 – mikevil14rin

回答

0

製作一個庫項目(.dll)並將UI放入其中(UI的.ui文件和源代碼)。在您需要的所有項目中使用該庫。

庫(頭):

#ifndef GUI_BASE_H 
#define GUI_BASE_H 

#ifdef UILIB 
#define DLL __declspec(dllexport) 
#else 
#define DLL __declspec(dllimport) 
#endif 

class DLL GUIBase : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    GUIBase (QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~GUIBase(); 

public slots: 
    //some slot definitions 
}; 

#endif //GUI_BASE_H 

預處理器的lib項目定義:

UILIB 

的lib的頭文件,並導致的.lib文件必須在所有項目中可用。將.lib文件添加到Visual Studio中「項目屬性」的「鏈接器/輸入」部分中的「其他依賴項」(並確保VS知道lib的路徑,可以在鏈接器/常規/中添加lib路徑)庫目錄「部分)