Как использовать UI файл для создания простого виджета? - PullRequest
6 голосов
/ 14 марта 2012

У меня есть простое окно с кнопкой выхода в qt. Рабочий код показан ниже

 #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();
}

Теперь я хочу закодировать эту программу, используя qt designer.I создал виджет с именем "mywindow" икнопка внутри этого основного виджета с именем "btquit" в файле пользовательского интерфейса с использованием qt designer.Как переписать приведенный выше код с помощью файла пользовательского интерфейса. Имя файла пользовательского интерфейса - mywindow.ui

Ответы [ 2 ]

3 голосов
/ 14 марта 2012
#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 голосов
/ 14 марта 2012

Я предпочитаю иметь ui в качестве частного члена в классе виджета.Я предполагаю, что в конструкторе вы назвали виджет как mywindow (objectName из свойств).

// 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;
};

А затем в вашем .cpp вы должны сделать следующее:

#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;
} 
...