将Qt UI代码移到单独的类中

时间:2009-11-01 23:24:46

标签: c++ user-interface qt qt4

我刚刚开始使用Qt。尽管今天晚上花了一些时间,我仍然很难将我的UI设置代码从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 个答案:

答案 0 :(得分:5)

您不应该为类和实例化变量使用不同的名称吗?

QDialog *hWorld = new hWorld;

非常令人困惑,并且你得到错误的来源,而不是使用HWorld代替类(例如),因为通常使用大写字母(上部驼峰套管)来启动类型名称。

此外,是否故意从QWidget更改为QDialog