Qt开发总结

Qt是一个图形用户界面应用程序框架。 优点:可以跨平台,编写一次代码,就几乎可以在市面上所有的操作系统上运行。支持C++

Qt组件

即开发Qt软件时可能需要用到的组件库,在安装时可以根据需要选择安装

.
├── Qt
│   ├── MSVC 2015 64 -bit                          
│   ├── ...
│   ├── MinGW 7.3.0 32-bit                          
│   ├── MinGW 7.3.0 64-bit
│   ├── UWP ARMv7(msvc2015)                        
│   ├── ...
│   ├── Android x86                                 
│   ├── ...
│   ├── Sources                                     
│   ├── Qt Charts                                   
│   ├── Qt Data Visualization
│   └── ...
├── Developer and Designer Tools
│   ├── Qt Creator 4.9.1
│   ├── Qt Creator 4.9.1 CDB Debugger Support
│   ├── MinGW 7.3.0 32-bit
│   ├── MinGW 7.3.0 64-bit
│   └── Strawberry pERL 5.22.1.13

MinGW *** 编译器模块。MinGW是Minimalist GNU for Windows的缩写,MinGW是Windows平台上使用的GNU工具集导入库的集合。是本教程使用MinGW编译,所以必须安装。

UWP *** UWP是Windows 10中Universal Windows Platform的简称,有不同编译器类型的UWP,属于MSVC编译器生成的Qt库。如果不是开发UWP应用程序,就不需要,直接忽略。

MSVC *** 针对Windows平台上的MSVC编译器的Qt组件,如 msvc2015 32-bit和msvc2015 64-bit等。安装该组件需要计算机上已经安装相应版本的Visual Studio。

Android *** 这是针对安卓应用开发的Qt库,如果读者有安卓开发这方面需求可以自己选择安装,一般情况下用不到。

Sources Qt的源代码包,除非你想阅读Qt的源码,否则不用安装。

Qt *** Qt的附加模块,大部分建议安装 Qt Charts是二维图表模块,用于绘制柱状图、饼图、曲线图等常用二维图表。 Qt Data Visualization是三维数据图表模块,用于数据的三维显示,如散点的三维空间分布、三维曲面等。 Qt Lottie Animation 动画库 Qt purchasing电购买API Qt virtual keyboard虚拟键盘 Qt Webengine,Web开发 Qt WebGL Qt Scritp(Deprecated)是脚本模块,已被抛弃,不建议安装。

Qt Creator 这是集成开发环境,强制安装的,以后所有的项目和代码都在Qt Creator里面新建和编辑。

Qt Creator CDB Debugger surpport用于和CDB调试工具对接,默认安装,一般用于调试VC编译的Qt程序。

Strawberry Perl 用于编译Qt源代码的Perl开发环境,不需要安装。如果读者以后用到,也可以另外手动安装。

.Pro文件

.pro 文件是 Qt 项目中的一种配置文件,用于定义和配置项目的构建过程。pro 文件的全称是 “project file”,它是 Qt 编译系统的一部分

一个项目中可能包含上百个源文件,Qt编译这些源文件的方法是:先由qmake工具根据pro文件记录的配置信息生成相应的makefile文件,然后执行make命令完成对整个项目的编译。也就是说,pro文件存储的配置信息是用来告知编译器如何编译当前项目的,所以一个 Qt项目要想完美运行,既要保证各个源文件中程序的正确性,还要保证 pro文件中配置信息的合理性。

# 项目类型:应用程序
TEMPLATE = app  

# 项目依赖的 Qt 模块
QT += core gui

# 源文件和头文件
SOURCES += main.cpp \
           mywidget.cpp

HEADERS += mywidget.h

# 资源文件
RESOURCES += resources.qrc

# 编译选项 在程序中新定义一个指定的宏,比如 DEFINES += xxx,如同在程序中添加了 #define xxx 语句。
DEFINES += MY_DEFINE

对于一个刚刚创建好的Qt项目,.pro文件并不是空的,而是包含一些基本的配置信息。实际开发中,Qt会自动修改pro文件的内容,但有时也需要我们手动修改,例如程序中用到某个第三方库时,就需要我们手动修改.pro文件。

.pro 文件可以存储上百条配置信息,每条配置信息由三部分构成: 前半部分是关键字,也称配置项,用来指明配置信息的含义; 中间用 +=、-=、= 等数学符号连接配置项和它对应的值; 后半部分是配置项对应的值,一个配置项可以对应多个值,每个值代表不同的含义。 配置项含义

大部分配置项不需要我们手动修改,比如 SOURCES、HEADERS、FORMS 等,当我们添加或者删除项目中的源文件时,Qt 会自动修改这些配置项

控件

  1. 排版布局:水平布局、垂直布局、网格布局、分裂水平垂直布局、在布局中布局,
  2. 填充:放在控件或者布局周围,拉伸等窗体变化过程中保证控件大小基本不变
  3. 按钮类:点击触发消息
    PushButton,单次点击
    ToolButton,可以设置图片和文字的PushButton
    RedioButton,选择条件,多个一组使用,互斥选择。
    CheckBox,勾选按钮,单一条件是否选择
    CommandLineButton,有提示内容的Putton,下一条内容
    Dialog Box Button,将OK、Cancel绑在一起使用
  4. 数据结构类:结构化展示各类数据,根据数据特点选择相应结构。数据编辑增删改等操作
    ListView,单列多行视图
    TableView,表格视图
    TreeView,树形结构视图,根节点,分支,叶子节点
    ColumnView,多列关联视图,同树形结构是视图,右侧列是左侧一行的所有
    自节点。
    UndoView,undo堆栈视图,继承ListView
    ListWidget,List部件,显示形式同ListView
    TableWidget,Table部件,显示形式同TableView
    TreeWidget,Tree部件,显示形式同TreeView
    QTableWidget void setCellWidget(int row, int column, QWidget *widget);
    Item可以显示图片文本保存用户数据。设置check。
  5. 编辑框等,文本数值等输入输出(主动set、get设置值、使能等,还有值发生变化等一些信号)
    ComboBox,下拉列表框
    FontComboBox,字体选择下拉列表框
    LineEdit,单行编辑框,主要用于单行信息的输入及显示。
    TextEdit,文本编辑框,主要用于大量文本显示操作。
    PlainTextEdit,多行文本编辑框
    SpinBox,循环int类型单选框,滚动选择,固定好数值顺序、范围。
    DoubleSpinBox,循环double类型单选框
    TimeEdit,时间控件
    DateEdit,日期控件
    DateTimeEdit,日期时间控件
    Dial,拨号控件
    Horizontal ScrollBar,水平滚动条
    Vertical ScrollBar,垂直滚动条
    Horizontal Slider,水平滑动条
    Vertical Slider,垂直滑动条
    KeySequenceEdit,快捷键设置框
    Label,标签标记
    TextBrowser,文本浏览控件。扩展了QTextEdit只读模式
    GraphicsView,绘图框架
    CalendarWidget,日历小部件
    LCDNumber,LCD计数器
    ProgressBar,进度条
    Horizontal Line,水平分隔线
    Vertical Line,垂直分隔线
    OpenGLWidget,OpenGL图形渲染窗口
    QQuickWidget,qml加载控件
  6. 容器类
    GroupBox,管理一组控件,比如RedioBox
    ScrollArea,滚动调的容器
    ToolBox,列表显示容器。
    TabWidget,多个tab的容器
    StackedWidget,滚动容器
    Frame,同MainWindow窗体
    Widget,Widget容器
    MDIArea,可包含很多个子窗口
    DockWidget,可拖拽出单独窗口
    QAxWidget,支持ActiveX,窗口控件对象,word、excle、powerpoint、pdf、flash等

信号与槽机制

信号与槽机制是Qt的核心特性之一,它提供了对象之间松散耦合的通信机制。

它触发产生信号,或者emit产生信号,对象槽函数响应并执行。

一个信号可以关联多个槽,信号可以关联信号(不建议这么用,容易混乱)

要使用信号槽,必须继承QObject或者其子类。系统提供的大部类都继承自QObject,开发人员创建的类需要添加Q_OBJECT宏。

class DiagManager: public QThread
{
    // 要添加的宏
    Q_OBJECT 
public:

}
// 信号关联
connect(button, &QPushButton::clicked, this, &MyWindow::onButtonClick);

多线程

Qt 提供了两种常用方式来创建线程,一是继承 QThread,二是将 QObject 移动到 QThread 上运行。

  1. 继承QThread,重写Run函数,创建对象后调用start启动线程。Run函数流程清晰
    class DiagManager: public QThread
    {
     void run();
    }
    
  2. moveToThread方式,继承QObject类型,实现槽函数,由创线程对象来执行。信号触发方式,随机。(不实现run,只有信号、槽函数)
    worker->moveToThread(thread);
    thread->start();
    

线程间交互:数据共享数据——锁(读写函数都要使用,防止多个锁的死锁情况(优先级相同的锁))

QMutex stopMutex; 
stopMutex.lock(); 
stopMutex.unlock();//显示调用
QMutexLocker stopMutexLocker(&stopMutex);// 局部变量,只在函数内有效,调用时创建、结束后自动释放。防止显示调用多种场景有不能释放情况。

网络通信

待补充,没有具体操作过

文件读写

Qfile直接进行读取

QDataStream,与QFile结合用流的方式读写,进行数据解析。

数据库

Qt中的Qt SQL模块提供了对数据库的支持,模块中类可分为三层:驱动层,sql接口层,用户层。

驱动层:(QSqlDriver,QSqlDriverCreator,QSqlDriverCreatorBase,QSqlDriverPlugin)为具体的数据库和SQL接口层之间提供了底层的桥梁;

SQL接口层:(QSqlDatabase,QSqlQuery,QSqlError,QSqlRecord)提供了对数据库的访问,其中QSqlDatabase类用来创建连接,QSqlQuery类可以使用SQL语句来实现与数据库交互;

用户接口层:(QSqlTableModel,QSqlQueryModel,QSqlRelationalTableModel)实现了将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,它们是更高层次的抽象;

常见问题&解决办法

QT创建动态库

在创建项目时选择 “C++ Library” 模板即可

QT打包exe程序

打包后的程序,在系统任何位置都能运行

  1. 首先需要在本地环境中找到 Qt 5.14.2 (MinGW 7.3.0 64-bit)黑窗口可执行程序,版本直接可能有所出入,直接Ctrl+s 搜索qt就可以查找本地环境下相关应用

  2. cd 进入exe的目录
    d:                              # 切换磁盘
    cd workspace\tset               # 进入exe的目录
    
  3. windeployqt xxx.exe 执行打包命令

  4. 所有需要的dll都被拷贝到exe目录,将整个目录拷贝到其它地方可以运行。

参考资料

results matching ""

    No results matching ""