Qt控件大致介绍以及Qt的窗口提示集合

控件

在这简单介绍几个常用的控件,初步了解(肥肠的重要),深入请跟着我一起往后看。

1.1 按钮组(Buttons)

按钮组包括的按钮有:

  • Push Button: 按钮

  • Tool Button: 工具按钮

  • Radio Button: 单选按钮

  • Check Box: 复选框

  • Command Link Button: 命令链接按钮

  • Dialog Button Box: 对话框按钮盒

下面以QPushButton举例介绍一下按钮的用法。

    #include
    //主要代码 后续 会将源码上传的 目前还在整理
    setMinimumSize(200,120);
    setMaximumSize(200,120);
    QPushButton *quit = new QPushButton("Quit",this);
    quit->setGeometry(62,40,75,30);
    quit->setFont(QFont("Times",18,QFont::Bold));
    connect(quit,SIGNAL(clicked()),this,SLOT(close()));

如图

Qt控件大致介绍以及Qt的窗口提示集合_第1张图片

点击按钮会关闭此窗口

1.2 输入部件组(Input Widgets)

输入部件组有很多,名称依次如下:

  • 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: 按键序列编辑框

下面简单介绍一下日期时间定时相关的部件类

1.2.1 QDateTime类

Date/Time Edit 对应的是 QDateTime类,在Qt5中可以获取系统的时间,通过QDateTime::currentDateTime()可以获取本地系统的时间和日期,可以分别通过date()、time()来返回日期或者时间部分。演示如下:

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

1.2.2 QTimer类

定时器使用起来肥肠滴简单,只需要几个步骤就可以完成其应用了

  1. 新建一个定时器

    QTimer *time_clock = new QTimer(parent);

  2. 连接这个定时器的信号与槽,利用定时器的timeout()函数

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

  3. 开启定时器并且设置定时周期即可

    定时器有两种方式,start(int time)和setSingleShot()。其中start(int time)表示每隔time秒就会重启定时器,可以重复触发定时器,利用stop()可以关闭定时器,和setSingleShot()则仅启动定时器一次。我们常用的是第一种
    比如

    time_clock->start(2000);
    

    如图显示:

image.png

可以获取到当天的日期和星期几

1.3 显示部件组(Display Widgets)

显示部件组各个控件的名称解释如下:

  • Label: 标签
  • Text Browser: 文本浏览器
  • Graphics View: 图形视图
  • Calendar Widget: 日历
  • LCD Number: 液晶数字
  • Progress Bar: 进度条
  • Horizontal Line: 水平线
  • Vertical Line: 垂直线
  • OpenGL Widget: 开放式图形库工具
  • QQuick Widget: 嵌入QML工具

下面介绍几个控件(很简单的介绍,后去等我看到详细用法会更的)

1.3.1 Graphics View

Graphics View对应的是QGraphicsView类,提供了Qt5的图形视图框架,作用后续我们慢慢来学。

1.3.2 Text Browser

Text Browser对应的是QTextBrowser类,QTextBrowser类继承QTextEdit,而且仅是只读的,对里面的内容并不能进行修改,但是相对于QTextEdit,他还具有链接文本的作用,他的属性有以下几点:

    modified : const bool  
    openExternalLinks : bool
    openLinks : bool
    readOnly : bool
    searchPaths : bool
    source : QUrl
    undoRedoEnabled : const bool

通过上面的属性设置,可以设定它是否允许外部链接,是否是只读,外部链接的位置以及连接的内容,是否可以进行撤销等操作。

QTextBrowser还提供了几种比较有用的槽函数(SLOTS)

    virtual void backward()
    virtual void forward()
    virtual void home()

可以通过这个槽来达到“翻页”的效果

1.3.3 QQuickWidget

传统的QWidget程序可以使用这个部件来嵌入QML代码,为开发者提供了方便,但是目前QML中不能嵌入其他非QML窗口,因为QML和QWidget的渲染机制是不同的。

1.4 空间间隔组 (Spacers)

这一组中只有两个空间,名称如下

  • Horizontal Spacer: 水平间隔
  • Vertical Spacer: 垂直间隔

使用方法后面会写一个小例子。

1.5 布局管理组(Layouts)

布局管理组中各个控件的名称解释如下:

  • Vertical Layout: 垂直布局
  • Horizontal Layout: 横向(水平)布局
  • Grid Layout: 网格布局
  • Form Layout: 表单布局

后续使用就好了 这个没什么说的。

1.6 容器组(Containers)

1.7 项目视图组(Item Views)

1.8 项目控件组(Item Widgets)

上面三块会单独拿出一个文章去讲,涉及到的只是比较多并且很重要,也会有一段相对较长的代码

1.9 综合例子

简单来说就是将上面提到的几个控件综合起来使用

首先新建一个Qt Widgets Application项目,基类选择QDialog(这个不会就搜一搜,帖子多的烂掉了),选择创建界面,也就是自动带有ui文件。

在左边资源文件中点击.ui文件即可进入设计模式,我们此时拖拽一些我们需要的控件, 一个label 一个Line Eidt,一个Horizontal Spacer以及两个Push Button。
不需要对这些空间的位置进行编排,一会可以使用布局进行编排。
如图:

Qt控件大致介绍以及Qt的窗口提示集合_第2张图片

设计界面

Qt控件大致介绍以及Qt的窗口提示集合_第3张图片

拖拽控件

对Widget属性的一些设置:

选择label 将其text命名为&Cell Location。

Qt控件大致介绍以及Qt的窗口提示集合_第4张图片

选择第一个按钮,修改属性值为okBtn enabled属性不勾选,并且将text改为OK,default属性设置true

Qt控件大致介绍以及Qt的窗口提示集合_第5张图片

将第二个按钮属性值修改为cancelBtn,text改为cancel

表单背景 也就是窗体的名称 window Title 改为 Go To Cell

控件绑定

可以看到目前label名称前面会显示&,使用Edit Buddies(设计模式上面一排的其中一个)模式下,设定伙伴,选中label并拖拽至lineEdit然后松开可以看到下图一样的红色箭头,就表示成功了。标签的前面会有一个横,但是没有&了 我们再点击Edit Widgets就可以回到原来的编辑模式了,具体可以看图。

Qt控件大致介绍以及Qt的窗口提示集合_第6张图片

Qt控件大致介绍以及Qt的窗口提示集合_第7张图片

布局

使用 Ctrl键可以一次选取多个控件,首选选取label和lineEdit, 点击上方工具栏中的水平布局(如图),同样的 我们将其他三个控件也进行水平布局,最后我们选择整个form,选择垂直布局,最后我们点击工具栏中最后一个,窗口会自动调整为合适的大小。

Qt控件大致介绍以及Qt的窗口提示集合_第8张图片

Qt控件大致介绍以及Qt的窗口提示集合_第9张图片

Qt控件大致介绍以及Qt的窗口提示集合_第10张图片

Qt控件大致介绍以及Qt的窗口提示集合_第11张图片

Qt控件大致介绍以及Qt的窗口提示集合_第12张图片

Tab顺序

话不多说 直接上图。

Qt控件大致介绍以及Qt的窗口提示集合_第13张图片
接下来我们搞搞代码

  1. 首先我们在dialog.h头文件中添加一个slots函数:
private slots:
void on_lineEdit_textChanged();
  1. 再dialog.cpp中填写代码如下
    ui->setupUi(this);                        //可以自动建立signal-slot链接
    QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");//正则表达式限制输入字元的范围
    ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));//QRegExpValidator 搭配正则使用,不要忘记头文件
    connect(ui->okBtn,SIGNAL(clicked()),this,SLOT(accept()));//点击槽 链接 accept()函数
    connect(ui->cancelBtn,SIGNAL(clicked()),this,SLOT(reject()));

accept和reject都会关闭这个视窗,但是前者返回值1,后者则是0,借此判断是按下了哪个按钮

  1. 实现槽函数on_lineEdit_textChanged
void mytest_dialog::on_lineEdit_textChanged()
{
    ui->okBtn->setEnabled(ui->lineEdit->hasAcceptableInput());
}

最终实现如图:

Qt控件大致介绍以及Qt的窗口提示集合_第14张图片

Qt控件大致介绍以及Qt的窗口提示集合_第15张图片

如果输入不符合正则是无法输入的。

扩展知识

2.1 字符串类QString:概念解析

隐式共享

概念: 隐式共享又称为回写复制,当两个对象共享同一份数据时(通过浅拷贝实现数据块的共享),如果数据不改变,则不进行数据的复制,而当某个对象需要改变数据时,则执行新拷贝。

浅拷贝:简单来说就是两个人用同一个东西。

深拷贝:复制出来一个一摸一样的,两个人一人一个。

QString就是采用了隐式共享技术,结合了深拷贝和浅拷贝,提高效率。

Qt中还支持隐式共享的类还有:

  • 所有的容器类
  • QByteArray、QBrush、QPen、QPalette、QBitmap、QImage、QPixmap、QCursor、QDir、QFont、QVariant等等。

内存分配策略

QString在一个连续的内存块中存储数据,如果我们不断的增大他的长度,他就需要重新分配空间,他的分配策略如下:

  • 每次分配4个字符空间,直到大小为20
  • 在20-4084之间,QString分配的内存块大小是以两倍的速度增长的
  • 从4084开始,每次以2048个字符大小的步长增长(4kb)。

2.2 Qt5 控件:概念解析

Qt::WindowFlags枚举类型

函数:setWindowFlag()/setWindowFlags();

Qt::WindowFlags枚举类型有以下几种形式:

  • Qt::Widget: QWidget构造函数的默认值,如果新的窗口部件没有父窗口部件,则他是 一个独立的窗口,否则就是一个子窗口部件。
  • Qt::Window: 无论是否有父窗口部件,新窗口不见都是一个窗口,通常有一个窗口边框和标题栏。
  • Qt::Dialog: 新窗口部件是一个对话框,他是QDialog构造函数的默认值。
  • Qt::Sheet: 新窗口部件是一个Macintosh表单(sheet)
  • Qt::Drawer: 新窗口部件是一个Macintosh抽屉(drawer)
  • Qt::Popup: 新窗口部件是一个弹出式顶层窗口。
  • Qt::Tool: 新窗口是一个工具窗口,它通常是一个用于显示工具按钮的小窗口。如果一个工具窗口有父窗口部件,则它将显示在父窗口部件的上面,否则相当于使用了Qt::WindowStaysOnTopHint提示。
  • Qt::ToolTip:新窗口部件是一个提示窗口,没有标题栏和窗口边框。
  • Qt::SplashScreen: 新窗口部件是一个欢迎窗口,他是QSplashScreen构造函数的默认值。
  • Qt::Desktop: 新窗口部件是桌面,他是QDsektopWidget构造函数的默认值
  • Qt::SubWindow: 新窗口部件是一个子窗口,而无论该窗口部件是否有父窗口部件。此外,Qt还定义了一些控制窗口外观的窗口提示(这些窗口提示仅对顶层窗口有效)。
  • Qt::MSWindowsFiredSizeDialogHint: 为Windows系统上的窗口装饰一个窄的对话框边框,通常这个提示用于固定大小的对话框。
  • Qt::MSWindowsOwnDC:为Windows系统上的窗口添加自身的显示上下文(display context)菜单。
  • Qt::X11BypassWindowManagerHint: 完全忽视窗口管理器,它的作用是一个根本不被管理的无窗口边框的窗口(此时,用户无法使用键盘进行输入,除非手动调用QWidget::activateWindow()函数)。
  • Qt::FramelessWindowHint:产生一个五窗口边框的窗口,此时用户无法移动改窗口和改变他的大小。
  • Qt::CustomizeWindowHint: 关闭默认的窗口标题提示。
  • Qt::WindowTitleHint: 为窗口装饰一个标题栏。
  • Qt::WindowSystemMenuHint: 为窗口添加一个窗口系统菜单,并尽可能地添加一个关闭按钮。
  • Qt::WindowMinimizeButtonHint: 为窗口添加一个最小化按钮。
  • Qt::WindowMaximizeButtonHint: 为窗口添加一个最大化按钮。
  • Qt::WindowMinMaxButtonsHint: 为窗口添加一个最大化、和一个最小化的按钮。
  • Qt::WindowContextHelpButtonHint: 为窗口添加一个“上下文帮助”按钮。
  • Qt::WindowStaysOnTopHint: 告知窗口系统,该窗口应该停留在所有其他窗口的上面。
  • Qt::WindowType_Mask: 一个用于提取窗口标识中的窗口类型部分的掩码。

窗口提示可以进行位或操作:

Qt::WindowContextHelpButtonHint | Qt::WindowMaximizeButtonHint

如果Qt::WindowFlags的窗口提示为0时,窗口提示不起作用,当有一个窗口提示被应用时,若想要其他窗口提示起作用,则必须使用位或操作,比如:

Qt::WindowFlags flags = Qt::Window;
widget->setWindowFlags(flags);

此代码表示widget是一个窗口,他和一般的窗口外观一直,最大化、最小化、关闭、标题栏等等,此时窗口提示是不起作用的例如:

flags |= Qt::WindowTitleHint;
widget->setWindowFlags(flags);

上述代码的执行,将会使窗口提示发挥作用,但是要对应操作系统,比如windows中存在标题栏,但是X11窗口管理器忽略了窗口提示Qt::WindowTitleHint,比如在红旗linux工作站和suse系统上,上面的代码就是没有作用的。

你可能感兴趣的:(读书笔记,qt,开发语言)