2013-06-18 14 views
9

Mi piacerebbe avere una classe UI nel proprio spazio dei nomi, come ProjectName :: MainWindow. C'è un modo conveniente per ottenere ciò in Qt Creator, per favore?Qt Creator - spazio dei nomi personalizzato per le classi dell'interfaccia utente

Posso aprire il file mainwindow.ui e cambiare da "MainWindow" a "ProjectName :: MainWindow", che compila e funziona. Ma quando cambio qualcosa nel progettista dell'interfaccia utente, il file ui viene generato di nuovo ... con il nome della classe sbagliato.

+0

Stai parlando della tua classe del form (è predefinita nello spazio dei nomi predefinito e la sua origine è nel progetto) o della classe dell'interfaccia utente generata da Qt (è di default nello spazio dei nomi 'Ui' e la sua dichiarazione è memorizzata in File 'ui_ClassName.h' generato da Qt)? –

+0

Il mio. Ma la classe generata dovrebbe essere anche nello spazio dei nomi di propper. Id est: ProjectName :: MainWindow per il mio e ProjectName :: Ui per quello generato. – eMko

risposta

15

Quando si crea una nuova classe Form Designer, specificare il nome della classe con spazio dei nomi, ad es. ProjectName::MainWindow. Qt Creator genererà automaticamente il seguente codice.

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> 

Come si vede, sia MainWindow e Ui::MainWindow sono ora in ProjectName namespace.

+1

In aggiunta, non è nemmeno necessario modificare il documento XML. Puoi semplicemente modificare la proprietà del nome all'interno di QtDesigner – RobbieE

+1

Il trucco nella risposta (Qt creatore 2.7.0) funziona solo quando si aggiunge una classe, non quando si crea un progetto - la procedura guidata si lamenta di caratteri non validi nel nome della classe. Questo mi ha confuso ... Anche la modifica della proprietà in QtDesigner funziona. Grazie mille! – eMko

Problemi correlati