2013-06-18 25 views
9

私は、ProjectName :: MainWindowのような独自の名前空間にUIクラスを持っていたいと思います。 Qt Creatorでこれを実現するには便利な方法がありますか?Qt Creator - UIクラスのカスタム名前空間

私はmainwindow.uiファイルを開き、 "MainWindow"から "ProjectName :: MainWindow"に変更してコンパイルして動作させることができます。しかし、UIデザイナーで何かを変更すると、間違ったクラス名でuiファイルが再び生成されます。

+0

あなたは自分のフォームクラス(デフォルトではデフォルトの名前空間にあり、そのソースはプロジェクトにあります)やQt生成のUIクラス(デフォルトでは 'Ui'名前空間にあり、その宣言はQtによって生成された 'ui_ClassName.h'ファイル)? –

+0

私の。しかし、生成されたクラスは、プロッパーの名前空間にもなければなりません。 ID est:ProjectName :: MainWindowは私自身で、ProjectName :: Uiは生成されたものです。 – eMko

答えて

15

新しいDesigner Form Classを作成するときに、クラス名をnamespaceで指定します。 ProjectName::MainWindow。 Qt Creatorは自動的に次のコードを生成します。

MainWindow.h

namespace ProjectName { 
    namespace Ui { 
    class MainWindow; 
    } 
    class MainWindow : public QWidget { 
    Q_OBJECT  
    public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow();  
    private: 
    Ui::MainWindow *ui; 
    }; 
} // namespace ProjectName 

MainWindow.ui

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>ProjectName::MainWindow</class> 
<widget class="QWidget" name="ProjectName::MainWindow"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>400</width> 
    <height>300</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Form</string> 
    </property> 
</widget> 
<resources/> 
<connections/> 
</ui> 

ご覧のとおり、MainWindowUi::MainWindow両方がProjectName名前空間になりました。

+1

addidtionでは、XML文書を編集する必要はありません。 QtDesigner内のnameプロパティを編集するだけです。 – RobbieE

+1

回答のトリック(Qt creator 2.7.0)は、プロジェクトを作成するときではなく、クラスを追加するときにのみ機能します。ウィザードはクラス名に無効な文字があると不平を言う。 QtDesignerでプロパティを編集することもできます。どうもありがとうございました! – eMko