Qt 4 学习笔记(一)

来源:互联网 发布:大学生旅游 知乎 编辑:程序博客网 时间:2024/05/16 04:41

Chapter 1. Basic Qt

1.1 Hello QT

关键词:槽(slot),信号(signal),布局(layout),窗口部件(widget)。

(安装的方法,和过程此处省略)

使用命令行编译QT工程时:

  • 1 . 进入hello目录,qmake -project 生成一个与平台无关的项目文件hello.pro
  • 2 . qmake或者qmake hello.pro生成一个与平台无关的makefile文件
  • 3 . make构建该程序

1.2 Makeing Connections

QT的窗口部件通过发射(emit)信号(signal)来表明一个用户动作已经发生了或者是一个状态已经改变了。
信号有clicked(),pressed(),released(),toggled(bool)等等,信号可以与函数(槽,slot)相连接,以便在发射信号时,槽可以得到自动执行。对于每一个Qt类,都有一个与该类同名(且首字母大写)的头文件。

#include <QApplication>#include <QPushButton>int main(int argc, char *argv[]){    QApplication app(argc, argv);    QPushButton *button = new QPushButton("Quit");    QObject::connect(button, SIGNAL(clicked()),             &app, SLOT(quit()));    button->show();    return app.exec();}

1.3 Laying Out Widgets

Qt有三个主要的布局管理器(一个弄够对其所负责窗口部件的尺寸大小和位置进行设置的对象)。

  • QHBoxLayout lays out widgets horizontally from left to right
  • QVBoxLayout lays out widgets vertically from top to bottom
  • QGridLayout lays out widgets in a grid

1.4 Using the Reference Documentation

在UNIX下,在命令行终端使用assistant命令,windows下可以运行Qt Assistant(推荐)。
目前为止所见过的各类之间的关系:

Chapter 2. Creating Dialogs

2.1 Subclassing QDialog

关键词:伙伴(buddy),快捷键(&),发射(emit),对话框(dialog)。

对于所有定义了信号和槽的类,在定义开始处的Q_OBJECT都是必需的。parent参数指定了它的父窗口部件。
signals,slots关键字都是宏,可以展开成C++编译程序可以处理的一种结构形式。

Qt由数个模块构成,每个模块都有自己的类库,最重要的模块有Qtcore,QtGui,QtNetwork,QtOpenGL,QtScript,QtSql,QtSwg和QtXml等。其中头文件中为构成QtCore和QtGui组成部分的所有类进行了定义。

在字符串中使用了“&”来表示快捷键如“&Find”代表使用Alt+F快捷键激活。所谓伙伴(buddy)就是一个窗口部件,他可以在按下标签的快捷时接受焦点(focus)。

2.2 Signals and Slots in Depth

The connect() statement looks like this:

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

  • 一个信号可以连接多个槽:

    • connect(slider, SIGNAL(valueChanged(int)),
      spinBox, SLOT(setValue(int)));
    • connect(slider, SIGNAL(valueChanged(int)),
      this, SLOT(updateStatusBarIndicator(int)));
  • 多个信号可以连接同一个槽:

    • connect(lcd, SIGNAL(overflow()),
      this, SLOT(handleMathError()));
    • connect(calculator, SIGNAL(divisionByZero()),
      this, SLOT(handleMathError()));
  • 一个信号可以连接另外一个信号:

    • connect(lineEdit, SIGNAL(textChanged(const QString &)),
      this, SIGNAL(updateRecord(const QString &)));
  • 连接可以被移除:

    • disconnect(lcd, SIGNAL(overflow()),
      this, SLOT(handleMathError()));

2.3 Rapid Dialog Design

总结就是使用图形化界面工具设计,使用Qt designer进行设计。设计会被保存为一个名为“xxx.ui”的文件。
qmake工具会检测到该文件,并且生成适当的makefile规则来调用Qt的用户界面编译器(uic),uic工具会讲“xxx.ui”文件转换成C++并且转换结果存储在ui_gotocelldialog.h文件中(存储着窗体中的子窗口部件和布局,以及setupUi()函数)。其中开发时需要经常在一下四种模式切换:

  • Edit Tab Order
  • Edit Signal/Slots
  • Edit Widget
  • Edit Buddy

2.4 Shape-Changing Dialogs

常见的改变形状的对话框有两种:扩展对话框(extension dialog)和多页对话框(multi-page dialog)。

  • 扩展对话框:通常只显示简单的外观,需要通过一个切换按键(toggle button),如,MORE,Advanced等
  • 多页对话框:QTabWidget,QListWidget,QStackedWidget等。

2.5 Dynamic Dialogs

动态对话使不重新编译应用程序而可以改变窗体布局的做法成为可能。它可以在程序运行的时候使用QUiLoader类载入该文件。为了在Qt应用程序中使用QUiLoader,必须在这个应用程序的.pro文件中加入一行内容:CONFIG += uitools

原创粉丝点击