Qt,从控件的一个综合性例子开始

前言

在安装好Qt的开发环境后,开始学习Qt的字符串(QString)、容器类(QList,QLinkedList,QVector,QMap,QHash…)、各类控件。具体的使用属于基础知识,本文通过一个综合性的例子对其中比较重要和有趣的部分进行探讨,另外还有一个QString的隐式共享问题。
源码@github:https://github.com/LeeHDsniper/LearnQt/tree/master/CH210

程序运行效果

知识点

界面确实很简单,但是其中所涉及到的知识点都比较重要:
1. 使用Qt Creater的designer进行布局
2. 伙伴模式
3. 水平布局、垂直布局
4. 按钮的几个特性

Qt Creater 的designer

图形话的界面编辑器确实带给了我们许多方便,在C#的开发中,一直不会脱离图形界面的设计模式,但是有一个好处是在图形界面的所有编辑操作,最后都会转换为代码形式,也就是说可以在代码上看到做出的改变。但是QtCreater的designer模式下,所做的改变不会出现再代码上,只会对ui的XML文件进行改写。所以还是尽量使用手写代码的模式进行开发比较好。

这个实例中用到了上图界面上方的第三个按钮(伙伴模式)和第六个按钮(水平布局)。
Designer的其他使用方法和大部分图形界面设计器一样,处理伙伴模式和布局等不同点,至于各类控件的属性修改、事件“注册”都相同。

布局

Qt提供了水平排列布局、垂直排列布局和网格排列布局。
垂直排列布局:
| Lable1 |
| Button1 |
| Button2 |
上述三个控件就是水平布局
水平排列布局:
| Lable1 | Button2 | Button3 |
上述三个控件就是垂直布局
三种布局的使用将在后面详细解释。

按钮的几个特性


  1. default
    default是QPushButton的属性之一,如果default设为 true,那么当用户按下enter键,对应的就相当于按下default设为true的键,这个属性的使用有一些限制。

This property holds whether the push button is the default button.
Default and autodefault buttons decide what happens when the user presses enter in a dialog.
——[Qt官方文档]
2.enable
设置按钮是否可以按下(触发click信号)

隐式共享

隐式共享又称为回写复制(copy on write),当两个对象共享一份数据时(通过浅拷贝实现数据块的共享),如果数据不改变,则不进行数据的复制;而当某个对象需要需要改变数据时,则执行深拷贝。
浅拷贝:复制对象的一个引用
深拷贝:生成对象的一个完整复制品
隐式共享会维护一个指向对象的指针,以及在对象中维护一个引用计数器。
例如:

QString str1="hello";
QString str2=str1;

那么在str1中的引用计数器就会置为2,而且str2实际上只是str1的一个引用。
再例如:

......
str2[0]='e';

那么str2就会成为str1的一个完成复制,str1和str2的引用计数器都会置为1。

下一节将讲述Qt5的布局管理之分割窗口

你可能感兴趣的:(C++,图形界面,qt,控件,qt5)