C++ Qt 03:MainWindow和Qt Gui编程

C++ Qt 03:MainWindow和Qt Gui编程

http://www.cnblogs.com/rophie/archive/2012/04/02/2429877.html

在上节中说道,Qt Creator自动为我们生成了四个文件,分别是:一个.pro文件,两个.cpp和一个.h  接下来我们就来分析一下这几个文件。

首先打开HelloWorld.pro文件

QT       += core gui

TARGET = HelloWorld
TEMPLATE = app

SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h
QT += core gui  QT缺省使用了core和gui库

变量TARGET描述了目标文件的名称,即生成的应用程序的名字,默认采用工程文件所在的文件夹名字。

变量TEMPLATE描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件,有以下5种模板:

    应用程序 app,为建立一个Qt应用程序创建模板Makefile文件

    库 lib,为建立应用程序库创建模板Makefile文件

    子工程 subdirs,为建立子目录下的目标文件创建模板Makefile文件,子目录通过变量subdirs指定(子目录下的工程文件也需要指出使用何种模板)

    VC应用程序vcapp,为Visual Studio 生成一个应用程序工程,仅仅用于Windos操作系统

    VC库vclib,为Visual Studio生成一个应用程序库工程,仅仅用语Windows操作系统

SOURCES - 应用程序中的所有源文件的列表。

HEADERS - 应用程序中的所有头文件的列表。

  接下来就是mainwindow.h

 

 1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QtGui/QMainWindow>
5
6 class MainWindow : public QMainWindow
7 {
8 Q_OBJECT
9
10 public:
11 MainWindow(QWidget *parent = 0);
12 ~MainWindow();
13 };
14
15 #endif // MAINWINDOW_H

第1、2两行,大家都是懂得C++的啊,所以什么#ifndef,#define和#endif的含义和用途就不再赘述了。

接着类MainWindow继承了QMainWindow类,QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。

 

标题栏下面一些是Menu Bar,用于显示菜单;再下面一点事Toolbars,用于显示工具条,注意,Qt的主窗口支持多个工具条显示,你可以把几个工具条并排显示在这里,就像Word2003一样;工具条下面是Dock Widgets,这是停靠窗口的显示区域,所谓停靠窗口就是像Photoshop的工具箱一样,可以在主窗口的四周显示;再向下是Status Bar,就是状态栏;中间最大的Central widget就是主要的工作区了。

 

下面是一个重要的东西:Q_OBJECT。这是一个宏,只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制,暂时先不深入研究。

接下来的就是MainWindow的构造函数和析构函数,mainwindow.cpp文件中具体实现。


    大致了解了之后,我们来新建一个工程,这次来勾选创建界面选项,完成之后我们会发现在项目视图中多了个界面文件mainwindow.ui,我们双击这个文件打开。

你发现了什么?对,可视化界面,直接编译运行会出现一个窗口。

    接下来我们从左边的工具箱中拖一个Label控件到窗口上并双击将它重命名为“Hello World”

 

编译运行,达到了上节我们用代码写出来的HelloWorld效果。

我们查看一下mainwindow.h中声明了一个UI文件: Ui::MainWindow*ui,并在MainWindow的构造函数中将此ui文件布局赋给了当前窗口:ui->setupUi(this);

我们接下来在MainWindow的构造函数中加入

ui->label->setText("Hello Qt");

就可以改变Label的当前的文字。

 

好了,这一节先说到这里,感觉自己写的很乱,呵呵,第一次写这种技术博客,语言组织的不太好,凑合着看吧,呵呵。


下节预告:《QT 的信号与槽机制》

原文地址:https://www.cnblogs.com/lexus/p/2430691.html