其他相关概念

本文介绍一些使用Qt的其他概念。

一、layout

布局是QT里面一项重要的概念,这是为了调整窗体时所有UI都可以有规律的变化,适用多分辨率的情况。

在控件窗体可以看到4中布局方式
不过不要从这里调整布局,会让问题复杂化
让我们先拖入一个lineedit,如下

同时选中两个控件
此时上方的几个按钮会变亮,从这里进行布局

选择水平布局,会有如下变化

第一个是控件在面板上显示变了,第二个是右方对象窗口变了
多了一个布局,布局里面是两个控件
这样就完成了

但是还需要进行一件事,即主窗体的布局,看到此时centralWidget上面显示没有布局标志
此时选中主窗体

可以选择布局了,同理
不过因为控件太少,所以会占据整个窗体
一般而言当我们把主要控件都放置好后,再最后选择主窗体布局即可

二、Qt自身的类

Qt提供的内置类可谓无所不包,几乎所有常见的开发需求都有对应Qt类帮你快速实现,具体可见https://doc.qt.io/qt-5/qtdesigner-manual.html。找到对应的类,阅读文档,使用,问题解决。

这里要格外提一句数据结构的事。QT产生于标准库容器类之前,所以有自己的一套数据结构。
但是一般而言,跟QT有关的使用QT的类,与std的就用标准库。
其中std::string太常见了所以有直接转换的函数。

直接使用toStdString()即可
运行试试
输入abc

点击按钮

从局部变量可以看出转换成功了
这是英文字母,没什么问题,如果是其他语言的呢?这就涉及到编码问题了。
首先阅读文档可知lineedit装载的是unicode,那么换成std::string是什么?

是utf-8格式,这个应该是最好的设计了
不需要进行过多的干预

三、两种使用Qt的套路

第一种使用Qt的套路是UI设计布局,然后增加slot,实现功能。这是最直接最简便的方式。
然后有的时候现有的slot不能满足需求,那么就要走第二种套路:继承。

所有Qt类都可以继承,然后派生出自己想要的行为。书写套路是

class MyClass : public QClass
{
    Q_OBJECT
    
    public:
    	explicit MyClass(QObject *parent = nullptr);
    	
    protected:
  	void mouseMoveEvent(QClassEvent *mouseEvent) override;
    	
    private:
};

注意那个Q_OBJECT是必须的,那是个宏,定义了Qt框架下的必要功能和接口。
然后根据自己需要override基类函数,实现自己的功能即可。
至于什么能够被override就看文档好了。