一、前言

  作为第三篇的最后一部分,我们来看一下Qt的控件,谈到控件,就会让人想到界面的美观性和易操作性,进而想到开发的便捷性。作为windows界面开发的MFC曾经是盛行了多少年,但是其弊端也随着其他界面库的面世而不断的被放大,对于一个刚学会C或者C++转而学习windows界面开发的新手来说,MFC的控件和界面设计抽象而且复杂,也许现在你还记得MFC控件重绘比其他界面库多花费的时间,走过的弯路,调过的bug。因此,我们现在来看看Qt会不会带给我们不一样的体验,Let‘s go。

二、控件介绍

2.1 按钮组(Buttons)

  对于按钮的展示和操作,我们直接通过图片和代码的方式来展示。

Push Button:按钮

Tool Button:工具按钮

Radio Button:单选按钮

Check Box:复选框

Command Link Button:命令连接按钮

Dialog Button Box:窗口按钮盒

2.1.1 按钮实例

 #include "mywidegt.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidegt w;
/*设置主窗体的位置和初始大小*/
w.setGeometry(,,,);
w.show();
return a.exec();
}

main.cpp

 #ifndef MYWIDEGT_H
#define MYWIDEGT_H #include <QWidget> class MyWidegt : public QWidget
{
Q_OBJECT public:
MyWidegt(QWidget *parent = );
~MyWidegt();
}; #endif // MYWIDEGT_H

mywidegt.h

 #include "mywidegt.h"
#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h> MyWidegt::MyWidegt(QWidget *parent)
: QWidget(parent)
{
/*设置对话框的最小显示尺寸*/
setMinimumSize(,);
/*设置对话框的最大显示尺寸*/
setMaximumSize(,);
/*PushButton的构造函数
QPushButton::QPushButton(const QString & text, QWidget * parent = 0)
*/
QPushButton *quit=new QPushButton("Quit",this);
/*setGeometry(int x, int y, int w, int h)从坐标(x,y)开始显示一个w*h大小的界面,范围不能超过上面设置的尺寸*/
quit->setGeometry(,,,);
/*设置字体 void setFont(const QFont &)*/
quit->setFont(QFont("Times",,QFont::Bold)); connect(quit,SIGNAL(clicked()),qApp,SLOT(quit())); } MyWidegt::~MyWidegt()
{ }

mywidegt.cpp

2.2 输入控件组(Input Widegets)

输入控件组(Input Widegets)包含的各个控件的名称依次如图所示

Combo Box: 组合框

     Font Combo Box: 字体组合框

     Line Edit: 行编辑

     Text Edit: 文本编辑

     Plain Text Edit:文本编辑

     Spin Box: 数字显示框(自旋盒)

     Double Spin Box: 双自旋盒

     Time  Edit: 时间编辑

     Date Edit: 日期编辑

     Date/Time Edit: 日期/时间编辑

     Dial:拨号

     Horizontal Scroll Bar: 横向滚动条

     Vertical Scroll Bar:垂直滚动条

                  Horizontal Slider: 横向滑块

                  Vertical Slider:垂直滑块

                  Key Sequence Edit:快捷键编辑

2.2.1 控件类介绍

1、QDateTime类

  在Qt5中,可以使用QDateTime类类获取系统的时间。通过QdateTime::currentDateTime()来获取本地系统的时间和日期吸纳好。可以通过date()和time()来返回datetime中的日期和时间部分,代码如下。

 Qlabel *datalabel = new Qlabel();
QdateTime *datatime=new QdateTime(QdateTime::currentDateTime());
datalabel->setText(datatime->date().toString());
datalabel->show();

2、Qtimer类

  定时器(Qtimer)的使用很简单,只需要以下几个步骤就可以完成定时器的应用。

  (1)新建一个定时器

QTimer *time_clock=new Qtimer(parent);

  (2)连接这个定时器的信号和槽,利用定时器的timeout()。

connect(time_clock,SIGNAL(timeout()),this,SLOT(slottimedone()));

  定时时间一到就会发送timeout()信号,从而出发slottimedone()槽去完成某件事情。

  (3)开启定时器,并设定定时周期

  开启定时器有两种方式,start(int time)和setSingelShot(true)。其中,第一种表示每隔“time”秒就会重启定时器,可以重复出发定时,利用stop()将定时器关闭;而setSingleShot(true)则是仅启动定时器一次。工程中常用的是前者,比如 time_clock->start(2000);

2.3 显示控件组(Display Widegts)

        Lbael:标签

        Text Browser:文本浏览器

        Graphics View:图形视图

        Calendar: 日历

        LCD Number:液晶数字

Progress Bar:进度条

Horizontal Line:水平线

 Vertical Line:垂直线

QDeclarativeView:向QML暴露数据视图

        QQuickWidegt:快速布局

QWebView:web视图

2.3.1 控件类介绍

(1)Graphics View对应于QGraphicsView类

(2)Text Browser对应于QTextBrowser类。QTextBrowser类继承自QTextEdit,而且近视只读的,对立面的内容并不能进行更改,但是相对于QTextEdit来讲,它还具有链接文本的作用。

2.4 空间间隔组(Spacers)

    Horizontal Spacer:水平间隔

Vertical Spacer:垂直间隔

2.5  布局管理组(Layouts)

    Vertical Layout: 垂直布局

Horizontal Layout:横向(水平)布局

Grid Layout:网格布局

Form Layout: 表格布局

2.6 容器组(Containers)

        Group Box:组框

     Scroll Area:滚动区域

     Tool   Box:工具箱

     Tab Widget:标签小部件

    Stacked Widegt:堆叠部件

    Frame :帧

    Widget:小部件

    MdiArea:MDI区域

      Dock Widget:停靠窗口部件

      QAxWidget:封装Flash的ActiveX控件

2.7 项目视图组(Item Views)

   List View:清单视图

Tree View:树视图

Tabel View:表视图

Column View:列视图

2.8项目控件组(Item Widgets)

    List Widegt:清单控件

Tree Widegt:树形控件

Tabel Widegt:表控件

三、 综合样例

 #ifndef DIALOG_H
#define DIALOG_H #include <QDialog> namespace Ui {
class Dialog;
} class Dialog : public QDialog
{
Q_OBJECT public:
explicit Dialog(QWidget *parent = );
~Dialog(); private:
Ui::Dialog *ui;
private slots:
void on_lineEdit_textChanged();
}; #endif // DIALOG_H
 #include "dialog.h"
#include "ui_dialog.h" Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
/*只允许第一个字元输入大小写英文字母,后面接一位非0的数字,再接0~2位可为0的数字*/
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
//设置验证器,即只能输入正则要求的类型的输入
ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));
connect(ui->okButton,SIGNAL(clicked()),this,SLOT(accept()));
connect(ui->cancelButton,SIGNAL(clicked()),this,SLOT(reject())); } Dialog::~Dialog()
{
delete ui;
} void Dialog::on_lineEdit_textChanged()
{
//当编辑框检测到有输入时,将ok按钮设置为可用
ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());
}

四、 小结

  好了,到了这里关于模板库、工具类和控件的内容就基本说完了,详细的内容和重点会在以后的学习中相应的有所提及,最后希望自己能够学得深入,也希望读者能够读完有所收获。

我的QT5学习之路(三)——模板库、工具类和控件(下)的更多相关文章

  1. Chapter2:Qt5模板库,工具类及控件

    2.1 字符串类 QString类保存16位Unicode值,提供了丰富的操作,查询和转换等函数.  (1):QString提供了一个二元的"+"操作符用于组合两个字符串  (2) ...

  2. Android开发学习之路-Palette颜色提取工具类使用

    视频(要FQ):https://www.youtube.com/watch?v=5u0dtzXL3PQ Palette是一个在support-v7包中的一个颜色提取工具类,用法比较简单,而且是谷歌官方 ...

  3. 我的QT5学习之路(目录)

    说明:本目录内容为自己学习的心得和记录,参考资料来源于网络,学习过程中多方汲取,如有错误,欢迎指正和批评. Qt开发相关文章目录 一.我的Qt学习之路系列 1.[笔记]我的Qt学习之路(一)——浅谈Q ...

  4. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  5. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  6. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  7. 我的QT5学习之路(一)——浅谈QT的安装和配置

    一.前言 说到Qt,不能不说到C++,这门伟大的语言.因为其面向对象的编程思想和陡峭的学习曲线,一开始学习起来很是吃力.Qt从QT4开始基本封装了很多C++的工具库和界面库,而且支持跨平台,这是它最大 ...

  8. 我的QT5学习之路(二)——第一个程序

    一.前言 “工欲善其事,必先利其器”,上一节,我介绍了Qt的安装和配置方法,搭建了基本的开发平台.这一节,来通过一个简单的例子来了解Qt的编程样式和规范,开始喽~~~ 二.第一个程序——Hello W ...

  9. 我的QT5学习之路(四)——信号槽

    一.前言 前面说了Qt最基本的实例创建.控件以及工具集的介绍,相当于对于Qt有了一个初次的认识,这次我们开始认识Qt信号通信的重点之一——信号槽. 二.信号槽 信号槽是 Qt 框架引以为豪的机制之一. ...

随机推荐

  1. MySQL安装再折腾--编码的设置

    一.MySQL的安装 从官网(https://dev.mysql.com/downloads/mysql/)中下载Mac OS X 10.12 (x86, 64-bit), DMG Archive(m ...

  2. 在js里面比较大小必须先转换成number

    利用js里面的Number函数从对象转换成数值

  3. [JSOI2008]最大数 线段树解法

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  4. Node.js 优雅地自动审核团队的代码

    Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. 简介 在团队开发中,无论是写前端(js,css,htm ...

  5. MySQL 备份恢复(导入导出)单个 innodb表

    MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程 在实际环境中,时不时需要备份恢复单个或多个表(注 ...

  6. c++开源日志log4cplus使用开发文档

    下载地址:http://files.cnblogs.com/files/lizhigang/LOG4CPLUS%E5%BC%80%E5%8F%91%E4%B8%8E%E4%BD%BF%E7%94%A8 ...

  7. 下载 github 项目文件到本地方法

    下载 github 项目文件到本地方法 本篇终极,收集 3 种方法 最厉害 666 的方法 直接访问网站: 操作如下: 本地工具版下载方法 首先需要下载 git 客户端 我就不转载了,上面有客户端的使 ...

  8. 解决linux-mysql 登录时,报异常:Access denied for user 'root'@'localhost'

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/hhj724/article/details/73277506 解决linux-mysql 登录时,报 ...

  9. mysql错误:Statement violates GTID consistency

    在MYSQL中,执行建表语句时CREATE TABLE  aaaa  AS SELECT * FROM menu;  报: 错误代码: 1786Statement violates GTID cons ...

  10. leetcode Ch4-Binary Tree & BFS & Divide/Conquer

    一. 1. Lowest Common Ancestor class Solution { public: TreeNode *lowestCommonAncestor(TreeNode *root, ...