窗口部件及窗口类型

命令行:

  • qmake -projct
  • qmake
  • make

Log调试法:
在代码中加入一定的打印语句
打印程序状态和关键变量的值
断点调试法
在开发环境中的对应代码行加上断点
当程序运行到断点行时,程序暂停运行
需要时可加上条件断点,当条件满足时才暂停程序的运行

  • 图形用户界面由不同的窗口和窗口组件构成
  • < QtGui >头文件包含窗口组件,对应Qt中的GUI模块
  • Qt以组件对象的方式构建图形用户界面
  • 组件的类型:
    • 容器类(父组件):用于包含其它的界面组件
    • 功能类(子组件):用于实现特定的交互功能

Qt中没有父组件的顶级组件叫做窗口

这里写图片描述

这里写图片描述

QLabel用于显示一个提示性的字符串
QLabel是功能性组件,一般需要父组件作为容器

QWidget w;
QLabel l(&w);

l.setText("This is a Label control.");

坐标系统

图形界面程序在坐标系统中进行窗口和部件的定位
定位类型

  • 顶级窗口部件的定位
  • 窗口内部件的定位
  • 窗口部件的大小设置

Qt使用统一的坐标系统定位窗口部件的位置和大小
Qt部件类提供了成员函数在坐标系统中进行定位
QWidget类提供了窗口部件所需的坐标系统成员函数

QWidget类中的坐标系统成员函数

  • x() y() width() height()
  • geometry()
    • x() y() width() height()
  • frameGeometry()
    • x() y() width() height()

geometry()和frameGeometry()中的几何数据必须在show()调用后才有效

QPushButton用于接受用户点击事件
QPushButton能够显示提示性字符串
QPushButton是功能性组件,需要父组件作为容器
QPushButton能够在父组件中进行定位

QWidget w;
QPushButton b(&w);

b.setText("Button");
b.move(10,10);
b.resize(100,25);

Qt的几何坐标以左上角为原定
- 水平为x轴,从左向右为正向
- 垂直为y轴,从上到下为正向

消息处理

这里写图片描述

Qt中定义了与系统消息相关的概念
- 信号(Signal)
- 由操作系统产生的消息
- 槽(Slot)
- 程序中的消息处理函数
- 连接(Connect)
- 将系统消息绑定到消息处理函数

信号与槽连接必须发生在两个Qt类对象之间

这里写图片描述

这里写图片描述

自定义槽

  • 只有QObject的子类才能自定义槽
  • 定义槽的类必须在声明的最开始处使用Q_OBJECT
  • 类中声明槽时需要使用slots关键字
  • 槽与所处理的信号在函数签名上必须一致
  • SIGNAL和SLOT所指定的名称中:
    • 可以包含参数类型
    • 不能包含具体的参数名

Qt中的字符串类

  • 采用Unicode编码
  • 使用隐式共享技术来节省内存和不必要的数据拷贝
  • 跨平台使用,不必考虑字符串的平台兼容性

这里写图片描述

Qt对象间可以存在父子关系

  • 每一个对象保存有它所有子对象的指针
  • 每一个对象都有一个指向其父对象的指针

当Qt对象销毁时

  • 将自己从父对象的Children List移除
  • 将自己的Children List中的所有对象销毁

使用Qt开发时,不仅要时刻注意内存泄露的问题,还要时刻关注对象是否可能被多次销毁的问题

对话框及其类型

这里写图片描述

模态对话框(QDialog::exec())

  • 显示后无法与父窗口进行交互
  • 是一种阻塞式的对话框调用方式

非模态对话框(QDialog::show())

  • 显示后独立存在可以同时与父窗口进行交互
  • 是一种非阻塞式的对话框调用方式

小技巧:

  • 在栈上创建模态对话框是最简单常用的方式
  • 一般情况下非模态对话框需要在堆上创建
  • 通过QDialog::setModal函数可以创建混合特性的对话框
  • 非模态对话框需要制定Qt::WA_DeleteOnClose属性

对话框的返回值

  • 只有模态对话框才有返回值的概念
  • 模态对话框的返回值用于表示交互结果
  • QDialog::exec()的返回值为交互结果
    • void QDialog::done(int i)关闭对话框并将参数作为交互结果
    • QDialog::Accepted-用户操作成功
    • QDialog::Rejected-用户操作失败

登录对话框

登录对话框需求分析

  • 可复用软件部件
  • 获取用户名和密码

附加需求

  • 随机验证码

这里写图片描述

Qt中的标准对话框

这里写图片描述

Qt中的标准对话框遵循相同的使用方式

// 定义对话框对象

DialogType dlg(this);

// 设置对话框属性

dlg.setPropertyXXX(value);

if(dlg.exec() == DialogType::Value)
(
    获取对话框数据 
    Type v = dlg.getDialogValue();
    处理对话框数据 
)

消息对话框是应用程序中最常见的界面元素
消息对话框主要用于

  • 为用户提示重要信息
  • 强制用户进行操作选择

文件对话框常用于

  • Open Mode

    • 应用程序中需要用户打开一个外部的文件
  • Save Mode

    • 应用程序中需要将当前内容存储于用户指定的外部文件中

文件类型过滤器

  • 在文件对话框中可以通过文件后缀定义过滤器
  • 过滤定义规则:
    • 显示名(.后缀1 .后缀2 … *.后缀N)
    • 例如:”Image(.png .xpm *.jpg)”
    • “Text(*.txt)”

颜色对话框

  • Qt中提供了预定义的颜色对话框QColorDialog类
  • QColorDialog类用于提供指定颜色的对话框部件

这里写图片描述

输入对话框

  • Qt中提供了预定义的输入对话框QInputDialog类
  • QInputDialog类用于需要临时进行数据输入的场合

布局管理器

QFormLayout

QBoxLayout

  • QVBoxLayout
  • QHBoxLayout

QGridLayout

QStackedLayout:栈式布局管理器

  • 所有组件垂直于屏幕的方向上被管理
  • 每次只有一个组件会显示在屏幕上
  • 只有最顶层的组件会被最终显示

计时器是工程开发中非常重要的角色
计时器用于每隔一定的时间触发一个消息
计时器消息最终会被转化为函数调用
宏观上,计时器在每个时间间隔会调用指定的函数

计时器(QTimer)的使用方法

  • 编写计时器消息处理函数
  • 在程序中创建计时器对象
  • 连接计时器消息和消息处理函数
  • 设置计时器时间间隔并启动计时

应用程序中的主窗口

  • 主窗口是与用户进行长时间交互的顶层窗口
  • 程序的绝大多数功能直接由主窗口提供
  • 主窗口通常是应用程序启动后显示的第一个窗口
  • 整个程序由一个主窗口和多个对话框组成

QMainWindow是Qt中主窗口的基类
QMainWindow继承于QWidget是一种容器类的组件

这里写图片描述

QMainWindow中封装的秘密

  • 菜单栏
  • 工具栏
  • 中心组件
  • 停靠组件
  • 状态栏

这里写图片描述

在Qt中提供与菜单相关的类组件

  • 菜单栏(QMenuBar)
  • 下拉菜单组(QMenu)
  • 菜单项(QAction)

这里写图片描述

在Qt主窗口中创建菜单

QmenuBar* mb = menuBar();
QMenu* menu = new QMenu("File(&F)");
QAction* action = new QAction("New", NULL);


menu->addAction(action);
mb->addMenu(menu);

主窗口的概念和意义

  • 应用程序中集成各种功能实现快捷使用的一个区域
  • 工具栏并不是应用程序中必须存在的组件
  • 工具栏中的元素可以是各种窗口组件
  • 工具栏的元素通常以图标按钮的方式存在

在Qt中提供与工具栏相关的类组件

  • 工具栏(QToolBar)
  • 快捷项(QAction)

这里写图片描述

在Qt主窗口中创建工具栏

QToolBar* tb = addToolBar("Tool Bar");
QAction* action = new QAction("", NULL);

action->setToolTip("Open");
action->setIcon(QIcon(":/Res/open.png"));

tb->addAction(action);

QToolBar的关键成员函数

  • void setFloatable(bool floatable)
  • void setMovable(bool movable)
  • void setIconSize(const QSize& iconSize)

主窗口中的状态栏

  • 应用程序中输出简要信息的区域
  • 一般位于主窗口的最底部

这里写图片描述

在Qt主窗口创建状态栏

QStatusBar* sb = statusBar();

QLabel* l = new QLabel("Label");
QLineEdit* e = new QLineEdit();

sb->addPermanentWidget(l);
sb->addPermanentWidget(e);

sb->showMessage("D.T.Software");

Qt状态栏的设计原则

  • 左边的区域用于输出实时消息
  • 右边的区域用于设置永久消息
  • addWidget在状态栏左半部分添加组件
  • addPermanentWidget在状态栏右半部分添加组件

Qt中的文本编辑组件

这里写图片描述

  • QLineEdit
    • 单行文本编辑组件
  • QTextEdit
    • 多行富文本编辑组件
  • QPlainTextEdit
    • 多行普通文件编辑组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值