Qt4是用于开发GUI的工具,开始使用的时候自然是希望很快的建立一个窗口。
到现在为止,一共使用过3种方法建立自己的窗口:
1 利用Qt designer : 直接在终端模式或MingGW的窗口中输入designer,就可以启动Qt的窗口设计工具designer了。使用方法很多书上都有详细的说明。
2 直接在已有的工程中添加窗口 : 在打开的工程中增加一个新的窗口,其实就是在Qt Creator中调用了designer。
3 直接用代码实现窗口的构建 : 感觉比较有“艺术”性的一种方法。
其实3种方法的实质都是一样的,通过继承Qt GUI模块中的各种窗体控件,达到拼凑窗口的目的。只不过使用designer的话,计算机会自动生成大部分的构建代码,比较省事。而且“窗口布局管理器”感觉还是在界面状态下比较好操作。
不论用什么方法,随后都会得到一系列的代码。机器自动生成的代码比较有规律一些。以一个命名为"mainwindow”的窗口为例吧。当使用designer创建并生成代码后,我们可以在目录下得到两个重要的文件。"ui_mainwindow.h"和"mainwindow.ui"。
先说说"ui_mainwindow.h".
仔细观察后可以发现个文件的大概结构为:
#include.... //头文件-构建窗口使用到的各种窗体控件头文件
class MainWindow : QWidget { //类声明-声明构建的窗口类
setupUi函数//该函数包括了所有构建窗口所需要的代码,包括窗体控件的构建和设置。
};
namespace Ui{};//建立了class的命名空间
其中最重要的就是class和setupUi了,当需要创建mainwindow的时候就要依靠这两个部分。
然后是mainwindow.ui。这个文件是designer生成的窗口文件。听说可以直接利用Qt的类直接加载这个文件而达到创立窗口的目的。现在还没有研究到,先不记录了。
最后给个用Qt4-designer建立的窗口例子:
对应的'ui_designerND2868.h' (直接由Qt4-designer生成)
/********************************************************************************
** Form generated from reading ui file 'designerND2868.ui'
**
** Created: Wed Nov 25 09:53:41 2009
** by: Qt User Interface Compiler version 4.5.3
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
#ifndef DESIGNERND2868_H
#define DESIGNERND2868_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QTextEdit>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QAction *actionOpen;
QAction *actionSave;
QAction *actionSave_as;
QAction *actionClose;
QWidget *centralwidget;
QWidget *horizontalLayoutWidget;
QHBoxLayout *horizontalLayout;
QTextEdit *textEdit;
QVBoxLayout *verticalLayout;
QPushButton *pushButton_2;
QPushButton *pushButton_3;
QPushButton *pushButton_5;
QPushButton *pushButton_4;
QPushButton *pushButton;
QMenuBar *menubar;
QMenu *menuFile;
QMenu *menuOption;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(338, 227);
actionOpen = new QAction(MainWindow);
actionOpen->setObjectName(QString::fromUtf8("actionOpen"));
actionSave = new QAction(MainWindow);
actionSave->setObjectName(QString::fromUtf8("actionSave"));
actionSave_as = new QAction(MainWindow);
actionSave_as->setObjectName(QString::fromUtf8("actionSave_as"));
actionClose = new QAction(MainWindow);
actionClose->setObjectName(QString::fromUtf8("actionClose"));
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
horizontalLayoutWidget = new QWidget(centralwidget);
horizontalLayoutWidget->setObjectName(QString::fromUtf8("horizontalLayoutWidget"));
horizontalLayoutWidget->setGeometry(QRect(8, 3, 321, 181));
horizontalLayout = new QHBoxLayout(horizontalLayoutWidget);
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
horizontalLayout->setContentsMargins(0, 0, 0, 0);
textEdit = new QTextEdit(horizontalLayoutWidget);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
horizontalLayout->addWidget(textEdit);
verticalLayout = new QVBoxLayout();
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
pushButton_2 = new QPushButton(horizontalLayoutWidget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
verticalLayout->addWidget(pushButton_2);
pushButton_3 = new QPushButton(horizontalLayoutWidget);
pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
verticalLayout->addWidget(pushButton_3);
pushButton_5 = new QPushButton(horizontalLayoutWidget);
pushButton_5->setObjectName(QString::fromUtf8("pushButton_5"));
verticalLayout->addWidget(pushButton_5);
pushButton_4 = new QPushButton(horizontalLayoutWidget);
pushButton_4->setObjectName(QString::fromUtf8("pushButton_4"));
verticalLayout->addWidget(pushButton_4);
pushButton = new QPushButton(horizontalLayoutWidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
verticalLayout->addWidget(pushButton);
horizontalLayout->addLayout(verticalLayout);
MainWindow->setCentralWidget(centralwidget);
horizontalLayoutWidget->raise();
textEdit->raise();
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 338, 20));
menuFile = new QMenu(menubar);
menuFile->setObjectName(QString::fromUtf8("menuFile"));
menuOption = new QMenu(menubar);
menuOption->setObjectName(QString::fromUtf8("menuOption"));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
MainWindow->setStatusBar(statusbar);
menubar->addAction(menuFile->menuAction());
menubar->addAction(menuOption->menuAction());
menuFile->addAction(actionOpen);
menuFile->addAction(actionSave);
menuFile->addAction(actionSave_as);
menuFile->addAction(actionClose);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "/344/270/273/347/252/227/345/217/243/344/276/213/345/255/220", 0, QApplication::UnicodeUTF8));
actionOpen->setText(QApplication::translate("MainWindow", "open", 0, QApplication::UnicodeUTF8));
actionSave->setText(QApplication::translate("MainWindow", "save", 0, QApplication::UnicodeUTF8));
actionSave_as->setText(QApplication::translate("MainWindow", "save as...", 0, QApplication::UnicodeUTF8));
actionClose->setText(QApplication::translate("MainWindow", "close", 0, QApplication::UnicodeUTF8));
pushButton_2->setText(QApplication::translate("MainWindow", "/347/274/226/350/276/221", 0, QApplication::UnicodeUTF8));
pushButton_3->setText(QApplication::translate("MainWindow", "/345/244/215/345/210/266", 0, QApplication::UnicodeUTF8));
pushButton_5->setText(QApplication::translate("MainWindow", "/347/262/230/350/264/264", 0, QApplication::UnicodeUTF8));
pushButton_4->setText(QApplication::translate("MainWindow", "/345/211/252/345/210/207", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "/345/210/240/351/231/244", 0, QApplication::UnicodeUTF8));
menuFile->setTitle(QApplication::translate("MainWindow", "File", 0, QApplication::UnicodeUTF8));
menuOption->setTitle(QApplication::translate("MainWindow", "Option", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // DESIGNERND2868_H