2013-06-18 2 views
9

Я хотел бы иметь класс пользовательского интерфейса в своем собственном пространстве имен, например ProjectName :: MainWindow. Есть ли какой-то удобный способ, как добиться этого в Qt Creator, пожалуйста?Qt Creator - пользовательское пространство имен для классов пользовательского интерфейса

Я могу открыть файл mainwindow.ui и сменить команду «MainWindow» на «ProjectName :: MainWindow», которая компилируется и работает. Но когда я что-то меняю в дизайнере пользовательского интерфейса, ui-файл снова генерируется ... с неправильным именем класса.

+0

Вы говорите о своем собственном классе формы (по умолчанию это пространство имен по умолчанию и его источник находится в проекте) или о Qt-сгенерированном пользовательском интерфейсе (по умолчанию он используется в пространстве имен 'Ui', а его объявление хранится в Qt-генерируемый файл 'ui_ClassName.h')? –

+0

Мой собственный. Но сгенерированный класс должен быть также в пространстве имен propper. Id est: ProjectName :: MainWindow для моего собственного и ProjectName :: Ui для сгенерированного. – eMko

ответ

15

При создании нового класса формы конструктора укажите имя класса с пространством имен, например. 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> 

Как вы видите, как MainWindow и Ui::MainWindow теперь в ProjectName пространстве имен.

+1

В дополнение, вам даже не нужно редактировать XML-документ. Вы можете просто изменить свойство имени внутри QtDesigner – RobbieE

+1

Трюк в ответе (Qt creator 2.7.0) работает только при добавлении класса, а не при создании проекта - мастер жалуется на недействительные символы в имени класса. Это озадачило меня ... Редактирование свойства в QtDesigner тоже работает. Большое спасибо! – eMko

Смежные вопросы