2012-03-14 11 views
5

TENGO se muestra una ventana simple con un botón de salida en el código de trabajo qt.The continuacióncómo usar el archivo ui para hacer un widget simple?

#include <QApplication> 
#include <QDialog> 
#include <QPushButton> 

class MyWidget : public QWidget 
{ 
public: 
    MyWidget(QWidget *parent = 0); 
}; 

MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent) 
{ 
    setFixedSize(200, 120); 

    QPushButton *btquit = new QPushButton(tr("Quit"), this); 
    btquit->setGeometry(62, 40, 75, 30); 
    btquit->setFont(QFont("Times", 18, QFont::Bold)); 

    connect(btquit, SIGNAL(clicked()), qApp, SLOT(quit())); 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MyWidget widget; 
    widget.show(); 
    return app.exec(); 
} 

ahora quiero codificar este programa utilizando qt designer.I creó un widget llamado "MyWindow" y un botón en el interior ese widget principal llamado "btquit" en el archivo ui usando qt designer. Cómo reescribir el código anterior con la interfaz de usuario Nombre de archivo file.The interfaz de usuario es mywindow.ui

Respuesta

3
#include <QApplication> 
#include <QDialog> 
#include <QPushButton> 
#include "ui_mywindow1.h" 

class MyWidget : public QWidget,private Ui::mywindow 
{ 
public: 
    MyWidget(QWidget *parent = 0); 
}; 

MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent) 
{ 
    setupUi(this); 


    connect(btquit, SIGNAL(clicked()), qApp, SLOT(quit())); 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MyWidget widget; 
    widget.show(); 
    return app.exec(); 
} 
2

Yo prefiero tener el ui como miembro privado en la clase del widget. Supongo que en el diseñador ha nombrado el widget como mywindow (el objectName de las propiedades).

// MyWindow.h 

#include <QWidget> 

// Forward declaration of your ui widget 
namespace Ui { 
    class mywindow; 
} 

class MyWidget : public QWidget 
{ 
public: 
    MyWidget(QWidget *parent = 0); 
    ~MyWidget(); 

private: 
    // private pointer to your ui 
    Ui::mywidget *ui; 
}; 

Y luego, en su .cpp que tiene que hacer lo siguiente:

#include "mywindow.h" 
//1. Include the auto generated h file from uic 
#include "ui_mywindow.h" 
#include <QPushButton> 

MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent), 
     //2. initialize the ui 
     ui(new Ui::mywindow) 
{ 
    //3. Setup the ui 
    ui->setupUi(this); 

    // your code follows 
    setFixedSize(200, 120); 

    QPushButton *btquit = new QPushButton(tr("Quit"), this); 
    btquit->setGeometry(62, 40, 75, 30); 
    btquit->setFont(QFont("Times", 18, QFont::Bold)); 

    connect(btquit, SIGNAL(clicked()), qApp, SLOT(quit())); 
} 

MyWidget::~Mywidget() 
{ 
    delete ui; 
} 
+0

yo personalmente prefiero de esta manera también, aunque recomiendo el uso de un puntero o restringidos al puntero único para la interfaz de usuario, de modo que es desasignado cuando la instancia de clase desaparece. –

+0

O elimínalo en el destructor ... Editado mi respuesta :) – pnezis

Cuestiones relacionadas