Qt相关知识(一)——学习笔记

4 篇文章 0 订阅

一、Qt简介

 1、Qt是什么
        Qt图形用户程序框架,是对底层应用编程接口API面向对象的封装。
        是一套基于C++语言的类库,专注但不局限于图形用户界面的开发,也可以进行系统调用、网络编程、数据库、2D/3D图形处理。
        特点:跨平台,支持Linux、Windows、MacOS、iOS、Android等操作系统。
    2、为什么选择Qt
        基于C++语言,简单、易用、面向对象(针对GTK)
        优良的跨平台特性(针对MFC),工控、嵌入式。

二、Qt环境与编译工具

 1、工具
        Qt助手:Qt参考文档,涉及了Qt中的每一个类和函数,是Qt开发的必备手册,在终端可以通过assistant命令启动。
        Qt构建器:他负责对源文件、头文件、界面文件进行解析生成编译脚本。
            qmake -project 工具当前目录里的文件,生成项目配置文件 xxx.pro
            qmake 根据xxx.pro文件生成Makefile脚本
        Qt设计师:对于带界面应用程序来说,最纯粹的方式就是通过C/C++代码来编写整个项目,但这种方式费时费力,所以我们一般不这样
 做界面, 而是采用一种画图的方式,自动生成对应的代码,所见即所得。
        Qt界面编译器:它负责把Qt设计师设计出的界面文件编译成C++代码。
            uic xxx.ui -o xxx.h 把界面文件编译成C++类。
        Qt创造器:Qt助手+Qt构建器+Qt设计师+Qt界面编译器+文本编辑器就等于Qt创建器,集成开发环境。
    2、头文件和库
        Qt安装好之后会在安装目录下创建一个/usr/include/qt4目录,我们所使用的头文件都在这个目录下。
        共享库安装在/usr/lib/i386-linux-gnu/qt4和/usr/lib/qt4目录下。
        静态库需要重新下载源手动编译。

三、第一个Qt程序

  1、Hello,Qt。
        编译源代码
        生成项目文件:qmake -project -> hello.pro
        生成编译脚本:qmake -> Makefile
        编译:make
        运行:./hello
    2、帮助手册
        Public Types:访问权限是 public 的成员。
        Properties:访问权限是 private 的,这一类的成员都有get/set函数。
        Public Functions:访问权限是 public 的成员函数。
        Public Slots:访问权限是 public 的槽函数,它可以像成员函数一样使用,但它可以与信号连接(与signal函数绑定一个信号与
函数一样),区别是Qt的信号可以自定义。
        Signals:信号,注意:不是函数,通过emit发送,会自动执行与它连接的槽函数。
        Static Public Members:静态公有成员函数,这类函数与对象无关,管理的是对象的公有资源。
        Protected Functions:访问权限是 protected 的成员函数
        Macros:与本类相关的宏定义
        Detailed Description:对本类的详细说明,使用方法,调用的上下文注意事项,有些类会有使用dome。

vi xxx.cpp 写入以下代码

#include <QApplication>
#include <QTextCodec>
#include <QLabel>

int main(int argc,char* argv[])
{
    // 创建一个字符编码对象
    QTextCodec* codec = QTextCodec::codecForName("utf-8");
    // 告诉Qt外部编码是utf-8
    QTextCodec::setCodecForTr(codec);
    // 把外部编码转换成内部编码
    QString str = QObject::tr("你好 Qt");

	// 创建一个App对象,它负责管理整个应用程序的资源,同时接受命令参数
	QApplication app(argc,argv);

	// 创建一个现实 “hello Qt” 的控件
    QLabel lab(str);
	
	// 显示控件
	lab.show();

    emit
	return app.exec();
}

在这里插入图片描述

四、中文处理

注意:在Qt4.8中默认不支持 utf-8 字符编码,因此使用中文时会出现乱码。
内部编码与外部编码:
Qt的应用程序的控件内部所使用的都是utf-16,这叫做应用程序的内部编码,而我们通过终端,控制输入的字符串叫外部编码。

QTextCodec *codec = QTextCodec::codecForName("utf-8");
// 告诉Qt本地系统字符编码
QTextCodec::setCodecForLocale(codec);
// 告诉Qt程序中所使用的字符串的字符编码
QTextCodec::setCodecForCStrings(codec);
// 告诉Qt外部的字符编码
QTextCodec::setCodecForTr(codec);

五、信号和槽

1、信号
当用户或系统触发一个动作,导致某个窗口发送变化,该空间就会发射一个信号,信号就可以调用一个函数,必要时还可以附加参数。
如:QPushButton 控件中就有 clicked(void) 信号。
2、槽
槽就一个普通的类成员函数,它可以是公有的、私有的、保护的,可以被重载也可以被覆盖,其参数、返回值可以是任意类型,可以被直接调用。
与普通函数的区别就是它可以被信号触发,自动执行。
如:窗口控件QWidget中默认就有 close(void) 槽函数。
3、信号和槽的连接
bool connect ( 
    const QObject * sender, // 信号发送者 
    const char * signal,    // 信号签名字符串
    const QObject * receiver, // 信号的接收者
    const char * method);   // 槽函数签名字符串

    SIGNAL() 将信号函数签名转换成字符串
    SLOT() 将槽函数签名转换成字符串

六、窗口容器

 从心上案例中可以看出,一个控制就一个窗口,要把所有控件集合在同一个窗口中,需要把这些控件束缚在同一个容器中,这种容器就叫
窗口容器。
    1、QManWindows
    主窗口容器,通常由标题栏、菜单栏、工具条、状态栏以及中央显示区组成。
    2、QDialog
    对话框窗口容器,管理多个不同的交互式控件
    3、QWidget
    纯粹的窗口容器,它是QManWindow和QDialog父类。

    常用的设置有:
        resize(w,h) 设置窗口的大小
        move(x,y) 设置窗口的位置
    
    创建控件时把容器对象的地址给控件,就可以把控件放入到容器中。

七、Qt创造器的使用

   1、打开Qt创造器
        在终端执行:qtcreator,右键锁定到启动器。
    2、创建项目
        文件 -> 新建文件或工程 -> Qt控件项目 -> QtGUI应用 -> 填写项目名称(不要使用中文) -> 桌面 -> 选择窗口容器 -> 设置类名、
头文件名、源文件名 -> 选择是否创建界面(设置界面文件名)
    3、窗口类的构成:
        mainwindow.ui 文件会自动生成 ui_mainwindow.h(在Qt创造器中不可见)。
        ui_mainwindow.h 头文件中会自动生成 Ui_MainWindow类,该类中会包含所有mainwindow.ui文件中所画的控件。
        在ui_mainwindow.h头文件中会在Ui名字空间中自动创建MainWindow类,Ui_MainWindow会被MainWindow类继承。
        mainwindow.h头文件中会自动创建MainWindow类,默认继承QMainWindow,会有一个默认的成员Ui::MainWindow *ui,它里面有所有
界面文件中的控件。

八、Qt常用控件

 QLabel:标签控件,同来显示简单的文本,在界面上只读的
        setText 设置显示内容
        text 获取标签上的字符串,返回值是QString
    QPushButton:按钮控件
        同样具有setText、text
        重要的功能是 单击信号 clicked(),也有双击、悬停、按下、弹起信号。
    QRadioButton:单选按键,同窗口下只能有一个被选中
        重要功能是选中和取消选中信号
    QLineEdit:单行输入文本框
        常用操作时获取它的输入内容
    QTextEdit:多行输入文本框
        常用于输入大段文字,输入的内容可以换行,自带滚动条。
    QComboBox:下拉输入框
        它输入的内容只能通过下拉按键选择,是防止用户输入错误常用解决方法。
    QTextBrower:多行文本显示,支持富文本显示。
        在界面上只读,文字可以设置字号、字体、颜色、加粗、对齐等操作。
    QGroupBox:分组框,可以放入一个控制统一管理。
        最常用的是放入:QRadioButton按钮,一组的按钮只能有一个被选中。
    QxxxSilder:滑块
        有水平、垂直滑块,也可以当进度条使用。
    QSpinBox:数字滑块
        与Silder的用法基本一致,只不过它是以数字显示。
        Silder和SpinBox主要操作时:初值、最大值、进步值。
        即可以用来显示,也可以用来设置。

九、Qt创造器常用快捷键及操作

可以自定义。工具 -> 选项 -> 环境 -> 键盘

  快捷键:
        Alt+0:显示/隐藏侧边栏
        Ctrl+e 松开后按0:删除所有的分割窗口
        Ctrl+e 松开后按1:删除多余的分割窗口
        Ctrl+e 松开后按2:水平分割窗口
        Ctrl+e 松开后按3:垂直分割窗口
        Ctrl+B+S:保存所有文件并编译执行
        Ctrl+B:编译执行
        Ctrl+R:运行项目
        Ctrl+/:注释/取消注释
        Ctrl+I:自动缩进选中的代码
        Ctrl+Shift+R:批量修改变量名
        Ctrl+F:搜索、替换
        Ctrl+单击:跳转到定义位置
        Shift+F2:声明与定义之间进行切换
        Alt+Shift+u:小写转换成大写
        Alt+u:大写转换成小写
        F1:光标定位在类或对象上,打开其帮助手册
        F4:头文件与源文件之间快速切换

相关应用:
Qt实现抽奖(滚动数)小程序:传送门
Qt实现签到小程序:传送门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QT5串口编程可以用于编写简单的上位机,通过串口与下位机进行通信。下面是一个简单的上位机编写示例: 首先,要在QT项目加入串口模块,可以通过在.pro文件加入以下代码实现: ``` QT += serialport ``` 接下来,创建一个新的类,命名为SerialPort,继承自QObject,并添加以下代码: ```cpp #include "serialport.h" SerialPort::SerialPort(QObject *parent) : QObject(parent) { serial = new QSerialPort(this); connect(serial, &QSerialPort::readyRead, this, &SerialPort::readData); } void SerialPort::openPort(QString portName, qint32 baudRate) { serial->setPortName(portName); serial->setBaudRate(baudRate); if(serial->open(QIODevice::ReadWrite)) { qDebug() << "Serial port is open"; } else { qDebug() << "Serial port failed to open"; } } void SerialPort::closePort() { if(serial->isOpen()) { serial->close(); qDebug() << "Serial port is closed"; } } void SerialPort::readData() { QByteArray data = serial->readAll(); qDebug() << "Received data: " << data; // 在这里可以对接收到的数据进行处理 } void SerialPort::writeData(QByteArray data) { if(serial->isOpen()) { serial->write(data); qDebug() << "Sent data: " << data; } else { qDebug() << "Serial port is not open"; } } ``` 在主窗口,可以使用SerialPort类的实例来控制串口的打开、关闭和数据的读写,可以通过按钮来触发相应的操作。下面是一个简单的主窗口实现: ```cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); serialPort = new SerialPort(this); connect(ui->openButton, &QPushButton::clicked, this, &MainWindow::openPort); connect(ui->closeButton, &QPushButton::clicked, this, &MainWindow::closePort); connect(ui->sendButton, &QPushButton::clicked, this, &MainWindow::sendData); } MainWindow::~MainWindow() { delete ui; } void MainWindow::openPort() { QString portName = ui->portComboBox->currentText(); qint32 baudRate = ui->baudRateComboBox->currentText().toInt(); serialPort->openPort(portName, baudRate); } void MainWindow::closePort() { serialPort->closePort(); } void MainWindow::sendData() { QString data = ui->sendLineEdit->text(); serialPort->writeData(data.toUtf8()); ui->sendLineEdit->clear(); } ``` 在QT设计器,可以创建一个MainWindow窗口,包含一个QComboBox用于选择串口号,一个QComboBox用于选择波特率,一个QLineEdit用于输入发送的数据,以及几个QPushButton用于触发相应的操作。 以上就是一个简单的QT5串口编程的上位机实现,你可以根据具体的需求进行进一步的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love丶伊卡洛斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值