Перемещение кода Qt UI в отдельный класс - PullRequest
0 голосов
/ 02 ноября 2009

Я только начинаю с Qt. Несмотря на то, что я потратил некоторое время на это этим вечером, я изо всех сил пытаюсь переместить мой код установки пользовательского интерфейса из main в его собственный класс.

#include <QtGui>

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    QWidget *window = new QWidget;
    QLabel *hw = new QLabel(QObject::tr("Hello World!"));

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(hw);
    window->setLayout(layout);
    window->show();

    return app.exec();

}

Я пытался создать свой собственный класс и передать ему window, но столкнулся с ошибками компиляции.

main.cpp:

#include <QtGui>
#include "hworld.h"

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    QDialog *hWorld = new hWorld;
    hWorld->show();

    return app.exec();

}

hworld.h:

#ifndef HWORLD_H
#define HWORLD_H

#include <QtGui>

class hWorld : public QDialog {

    Q_OBJECT

public:
    hWorld(QWidget *parent = 0);
    ~hWorld();

private:
    void setup();

};

#endif // HWORLD_H

hworld.cpp:

#include <QtGui>
#include "hworld.h"

hWorld :: hWorld(QWidget *parent) : QDialog(parent) {

    setup();

}

hWorld :: ~hWorld() { }

void hWorld :: setup() {

    QLabel *hw = new QLabel(QObject::tr("Hello World!"));

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(hw);

    setLayout(layout);
    setWindowTitle("Test App");

}

Ошибки компиляции:

main.cpp: In function ‘int main(int, char**)’:
main.cpp:8: error: expected type-specifier before ‘hWorld’
main.cpp:8: error: cannot convert ‘int*’ to ‘QDialog*’ in initialization
main.cpp:8: error: expected ‘,’ or ‘;’ before ‘hWorld’
make: *** [main.o] Error 1

Изменение main, означает, что это компилируется, но я получаю пустое окно (потому что конструкторы не вызваны?):

QDialog hWorld;
hWorld.show();

1 Ответ

5 голосов
/ 02 ноября 2009

Разве вы не должны использовать другое имя для класса и инстанцированной переменной?

QDialog *hWorld = new hWorld;

довольно запутанно, и источник получаемой ошибки, вместо этого используйте HWorld для класса (например), поскольку обычно имя типа начинается с верхнего регистра (верхний верблюжий регистр). *

Кроме того, является ли намеренное изменение с QWidget на QDialog?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...