C++ Qt——从入门到入土 (一)

目录

1.环境的配置

1.1 Qt的下载

1.2 在Vs中配置Qt

1.3 解决中文乱码的问题

?2.第一个窗口(搜索窗口)

2.1 构造一个Qt Widgets项目

2.2 Qt初体验——窗口基本属性设置&调整

2.2.1 构造析构函数

2.2.2 设置窗口标题和大小

2.2.3 窗口初始位置的移动

2.2.4 窗口背景颜色设置

*2.2.5 QstyleSheet详细

3.Qt常用控件

3.0 何为控件

3.1 按钮——QPushButton

3.2 信号与槽函数

3.2.1 概述

3.2.2 槽函数与连接

3.2.3 信号与发射

3.3 自定义信号的发射

3.4 文本、图片的“显示屏”——QLabel

3.4.0 概述

3.4.1 初始化与文本设置

3.4.2 点缀QLabel

3.4.3 部分文字效果变化

3.4.4 图片的判断存在、读取、加载

3.4.5?图片在QLabel上的展示

3.4.6 例子——应用QLabel为窗口添加背景

*3.4.7 关于QWidget背景图片的其他设置方法

3.4.8 进击!利用QLabel播放动图

3.4.9 以上的全部代码及图片资源连接

3.5 文本输入框——QLineEdit(从这里开始正式布局搜索窗口)

3.5.0 概述

3.5.1 初始化与默认提示文字的设置

3.5.2 实现当输入框内有文字输入时激活搜索按钮

3.5.3 获取并展示搜索内容

3.6 模式、对象的选择框——QCheckBox

3.6.0 概述

3.6.1 QCheckBox的初始化

3.6.2 QCheckBox选中状态的反馈

3.7 Qt中的“小浏览器”——QTextBrowser

3.7.0 概述

3.7.1 基于QTextBrowser自定义一个历史记录浏览框控件

3.7.2 Qt框架下读取txt文本内容

3.7.3 在窗口中添加和初始化自定义的历史浏览框

3.7.4 历史记录框的隐藏与失能


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);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值