目录
3.5 文本输入框——QLineEdit(从这里开始正式布局搜索窗口)
3.7.1 基于QTextBrowser自定义一个历史记录浏览框控件
1.环境的配置
1.1 Qt的下载
Qt的下载链接如下:Index of /archive/qt/5.12/5.12.3
常见问题&解决:
我在下载时遇到了浏览器拦截,说无法安全下载此文件,解决的办法是在浏览器的设置选项中关闭智能拦截(关掉如图的选项即可)
注意:
Qt挺大的,占用大概20G的内存,所以要注意好安装的位置避免空间不够得重新安装
安装步骤:
参考:(18条消息) QT安装具体图解_流楚丶格念的博客-CSDN博客_qt安装
1.2 在Vs中配置Qt
**第一步:**添加系统环境变量
首先找到桌面的我的电脑图标,右键点击选择属性,然后依次点击高级系统设置和环境变量
找到自己安装的Qt的路径,进入后找到如下几个bin的位置并依次添加到系统环境变量的path中去:
**第二步:**下载Qt tools
在Vs的扩展->管理扩展中搜索Qt找到要下载的扩展工具(下载好之后需要重新打开 Vs)
划重点!!!
下载好之后记得关闭Qt Tools的自动更新(如下图),否则整个项目都会出现奇奇怪怪的错误。
此后进行Vs的环境配置:
如图依次点击:扩展->Qt Vs Tools->Options
再按照下图进行版本添加
至此,环境已配置完成!
1.3 解决中文乱码的问题
在新建的Qt项目中(新建Qt项目详见2.1),按照下图顺序进行编码设置
2.第一个窗口(搜索窗口)
2.1 构造一个Qt Widgets项目
首先,依次按照下图建立一个新的Qt项目,一般都继承自QWidget,因为这貌似是Qt所有窗口类的基类。
搞定后点击Finish就得到了一个带一个继承自QWidget类的窗口的Qt项目
2.2 Qt初体验——窗口基本属性设置&调整
2.2.1 构造析构函数
在这之前我们先干一件事——写好析构函数以避免内存外溢。
通过如上方式构造的一个窗口类中,一开始就有一个私有成员
Ui::FinddialogClass ui;
乍一看貌似没有指针成员析构与否并不影响,但是在之后添加控件时我们往往以指针的形式来定义它们,这时候挨个析构过去相当麻烦,所以Qt的这个ui变量如果写成指针的形式,然后再在析构中释放ui指针的内存即可自动释放掉该Qt类下的所有指针成员的内存。
将上述代码修改为:
Ui::FinddialogClass *ui;
紧接着构造析构函数:
头文件中:
class Finddialog : public QWidget
{
Q_OBJECT
public:
Finddialog(QWidget *parent = Q_NULLPTR);
//析构防止内存溢出
~Finddialog();
private:
Ui::FinddialogClass *ui;
};
源文件中:
//析构防止内存溢出
Finddialog::~Finddialog()
{
delete ui;
}
2.2.2 设置窗口标题和大小
接下来我们在类的初始构造函数中设置窗口标题和其大小
Finddialog::Finddialog(QWidget *parent)
: QWidget(parent)
{
ui->setupUi(this);
//设置窗口标题
setWindowTitle(tr("查询系统"));
//重设窗口大小
resize(1080, 720);
};
效果如下:
让我们看看函数原型来了解一下参数:
标题设置函数:setWindowTitle(const QString &);
可见其参数类型为一个QString对象,而QString类是整个Qt对字符串处理使用的类。
因此在自己直接写入字符串时最好以tr()包裹,这时一个好习惯(参考自C++ Gui Qt4编程一书)
所以显然下述程序是错误的:
#include "finddialog.h"
#include <string>
using namespace std;
string my_title = "查询系统";
Finddialog::Finddialog(QWidget *parent)
: QDialog(parent)
{
ui->setupUi(this);
//设置窗口标题
setWindowTitle(my_title);
//重设窗口大小
resize(1080, 720);
};
要解决这个问题就涉及到了String类与QString类之间的转换:
从String转换为QString:
利用函数QString::fromStdString(String &);
将QString转换为String:
xx.toStdString()
其中xx为一个QString对象
即上述例子应该修改为:
#include "finddialog.h"
#include <string>
using namespace std;
string my_title = "查询系统";
Finddialog::Finddialog(QWidget *parent)
: QWidget(parent)
{
ui->setupUi(this);
//设置标题与大小
setWindowTitle(QString::fromStdString(my_title));
setFixedSize(1080, 720);
}
//析构
Finddialog::~Finddialog()
{
delete ui;
}
大小设置函数:setFixedSize(const QSize &);
其中QSize为Qt框架下的尺寸类型,即(宽,高)两个整数
当然Qt还提供了设置宽和高(横向和纵向)的两个函数:
setFixedHeight(int h);
setFixedWidth(int w);
2.2.3 窗口初始位置的移动
窗口初始生成位置的移动依托于下面的函数
move(const QPoint &);
其中QPoint表示Qt坐标系下的一个点,这里就要说说Qt坐标系,我们假设QPoint的坐标构成为(x,y),则坐标系可如下图所示:
可以看出QPoint的第一个坐标值也就是x越大则该点在屏幕上越靠右,y值越大则越靠下
而这里的move函数实际上是以窗口的左上角为基准,通过将左上角的点放到指定的QPoint处来实现窗口初始位置的变化。
可以在窗口初始化时添加move代码:
Finddialog::Finddialog(QWidget *parent)
: QWidget(parent)
{
ui->setupUi(this);
//设置标题与大小
setWindowTitle(QString::fromStdString(my_title));
setFixedSize(1080, 720);
//窗口生成位置移动
move(500, 200);
}
效果如下:
2.2.4 窗口背景颜色设置
函数原型:
setStyleSheet(const QString &styleSheet);