
cpp-零基础学QT
ByteFlys
这个作者很懒,什么都没留下…
展开
-
【零基础学QT】【052】CLion完美搭建Qt开发环境
什么是CLionCLion是JetBrain公司开发的一款C语言开发环境,JetBrain比较出名的有:开发Java的Idea,开发网页的WebStorm,开发Android的AndroidStudio,JetBrain系列是当之无愧的宇宙最优秀IDECLion在纯粹的WIndows开发上,可能功能没有Visual Studio那么完善强大,毕竟Visual Studio是微软自己的,有着强大...原创 2020-02-09 20:38:46 · 19902 阅读 · 8 评论 -
【零基础学QT】【051】专栏完结篇
由于本专栏定位是Qt基础教程,内容到此已经足够了,基本涵盖了全部的基础知识点,还顺带讲解了一些关键性的原理和思想当然,后面如果发现一些比较实用的功能,还是会继续添加到此专栏,但是不会像现在这么更新频繁了这个专栏从2019年8月底开始写,共50篇博客,内容涵盖了全部的C++和Qt基础知识今天是2020年2月初,总共花了五个月时间多点,因为写这个专栏的时候,我也是刚开始学习C++,所以必须看书,...原创 2020-02-07 17:00:47 · 299 阅读 · 0 评论 -
【零基础学QT】【050】Qt Quick主题样式
内置主题样式使用内置样式定制Imagine Style自定义Window原创 2020-02-07 16:56:28 · 1300 阅读 · 0 评论 -
【零基础学QT】【049】Model-View-Delegate界面设计模式
Model-View-Delegate是Qt中复合控件的一种设计模式如ListView,TableView,ComboBox等控件,都会用到这种设计模式设计原理【Model-View-Delegate】翻译成中文就是【模型-视图-代理】,它的思想是这样的: 用一个model对线来存储数据源,一般是一个数组或List View只绘制控件的基础部分,比如ComboBox,它只负责文本标签和...原创 2020-02-06 22:36:01 · 502 阅读 · 0 评论 -
【零基础学QT】【048】Qml与C++互相调用
为了节省代码,把精力放在技术本身上,我们直接复用上篇博客中的main.qml来演示Qml代码 //main.qml import QtQuick 2.13 import QtQuick.Window 2.13 //窗口节点 Window { id: root visible: true width: 640 height: 480 ...原创 2020-02-05 21:07:16 · 521 阅读 · 0 评论 -
【零基础学QT】【047】Qml自定义控件
Qml自定义控件其实比较容易,简单来说,只需将自定义控件的界面布局写在qml文件里面,在其它地方,直接用这个qml的文件名作为类名,就可以使用这个自定义控件了这里我们主要讲解一些自定义控件细节和可维护性方面的东西下面我们以一个带图标的按钮控件为例,来讲解自定义控件的完整过程新建Qml文件ui.qml文件和qml文件的关系可以看到,Qt Creator为我们创建了两个qml文件,一个...原创 2020-02-04 20:15:57 · 2031 阅读 · 0 评论 -
【零基础学QT】【046】Qml布局
基本布局 绝对定位:通过x,y属性来确定位置 相对定位:通过anchors来确定相对于其它控件的位置定位器(Positioner)定位器可以让若干Item按照一定规则来摆放,如横向排列,竖向排列,网格状排列,流式排列布局管理器(LayoutManager)布局管理器是从Qt5开始引入的功能,它的功能比定位器更强大,适合比较复杂的情景传统的定位器,当窗口或控件发生变化时,控件大小并不能自动适应窗口变化,而布局管理器则可以实现自适应原创 2020-02-03 18:51:51 · 1300 阅读 · 0 评论 -
【零基础学QT】【045】Qml基本用法
本篇博客通过一个详细的UI例子来逐个点介绍Qt Quick的基本用法,尽量通过简单例子来覆盖全部主要知识点,阅读时请对照代码来逐个理解各个知识点Qt Quick基本用法Demo源码原创 2020-02-03 16:53:57 · 596 阅读 · 0 评论 -
【零基础学QT】【044】Qt Quick和Qml
什么是Qt Quick和Qml Qt Quick是从Qt4开始引入的一套新的UI开发框架,并在Qt5时得到较大完善,成为首选的UI开发方式 Qt Quick使用类似于CSS的方式进行界面开发 Qt Quick最早设计出来是为了开发手机应用界面的,性能比Qt Widget要差很多,但随着Qt Quick的不断发展,现在在性能上的差距已经很小了,而且Qt Quick也不再仅局限于手机应用,此外...原创 2020-01-30 03:17:14 · 564 阅读 · 0 评论 -
【零基础学QT】【043】Qt界面样式定制:QStyle和QSS
使用QStyle设置控件样式QStyle封装了一套主题,只要Application或Widget使用了这个主题,就可以获得主题中所定义的样式 QApplication* application = nullptr; QPushButton* button = nullptr; QStyle* style = nullptr; application->se...原创 2020-01-14 09:41:48 · 2294 阅读 · 0 评论 -
【零基础学QT】【042】Qt网络框架
上传FTP文件下载FTP文件发送只有文本参数的Http请求发送带文件的Http请求下载Http文件发送RAW格式的Http请求发送Binary格式的Http请求使用TcpSocket使用UdpSocket使用Https原创 2020-01-07 10:20:39 · 747 阅读 · 0 评论 -
【零基础学QT】【041】Qt操作数据库
使用ODBC表结构设计打开数据库查询数据插入数据修改数据删除数据事务管理使用QSqlTableModel进行增删改查TableView绑定SqlTableModel利用SqlRelationalTableModel和DataWidgetMapper实现控件和数据库复杂关联原创 2019-12-24 17:43:35 · 593 阅读 · 2 评论 -
【零基础学QT】【040】Qt读写Json
C++和Java在JSON解析上的区别c++由于没有java的反射机制,所以是不可能通过代码自动获取类字段的因此不可能完全像java那样,只要一行代码,就可以实现任意json字符串和任意类对象之间的转换不管使用什么c++ json解析库,我们都需要手动去指定字段名,字段值,字段类型我们能做的,是尽量让解析代码更清晰,不要让繁琐的解析代码和业务代码混到一起,影响可读性这里我们只介绍Qt自带...原创 2019-12-19 16:49:53 · 343 阅读 · 0 评论 -
【零基础学QT】【039】Qt读写Xml
QXmlStreamReader读取XMLQXmlStreamReader按标签逐行读取XML文件,解析效率高,内存占用小QXmlStreamReader在SAX解析的基础上,进行了接口简化但是Qt仍然保留了SAX解析接口,因为SAX解析和DOM解析是两种公认的标准,方便用户从其它语言进行代码迁移 //xml文件 <doc date="2019-12-30"> ...原创 2019-12-18 16:12:41 · 456 阅读 · 0 评论 -
【零基础学QT】【038】Qt多线程框架和C++11多线程框架
使用QThread实现多线程 #include "qlib.h" class PrintThread : public QThread { private: //通过bool来控制运行条件 bool running = true; public: PrintThread() {} //在析构函数中自动结束线程 //很重要,...原创 2019-12-17 15:52:25 · 1164 阅读 · 0 评论 -
【零基础学QT】【037】C++中char,wchar,string,wstring
char和wchar_t char是C++基本类型,占一个字节(8位),可用来存储单个字符的Unicode码,由于正好8位,也可用来存储字节 wchar_t是C++扩展类型,占两个字节,可以用来存储Unicode/UTF16双字节字符。它实质上是unsigned short的一个别名,由于unsigned short占两个字节(16位),正好可以用来模拟双字节字符类型。 typedef...原创 2019-12-13 10:25:43 · 1034 阅读 · 0 评论 -
【零基础学QT】【036】Qt进程调用
执行命令行 //执行命令行 //关闭所有记事本进程 QString command = "taskkill /im notepad.exe /f"; int ret = QProcess::execute(command); qdebug << "return: " << ret;启动其它进程:关联式 QMainWi...原创 2019-12-09 11:10:26 · 427 阅读 · 0 评论 -
【零基础学QT】【034】Qt文件读写
将Qt对象写入文件 QImage image("C:/1.png"); QMap<int, int> map; map.insert(1, 'R'); map.insert(2, 'G'); map.insert(3, 'B'); quint32 uint = 0x11; QFile file("C:/1.dat"); bool rst = file.op...原创 2019-12-06 22:57:41 · 520 阅读 · 0 评论 -
【零基础学QT】【035】Qt中文读写和打印乱码处理
为什么Qt和很多软件都会有乱码问题 首先,字符串不管是存储到文件还是内存里面,它都只是字节而已,字符字形只是经过转换显示给人看的。同样的字节,在不同的编码下,就代表不同的字符。因此,写入字符串和读取字符串时,编码必须一致 代码编辑器和文本编辑器也是一种软件,代码也是一种文本文件,即便是正确的代码,生成的是正确的文件,如果编辑器以错误的编码格式打卡,也会出现乱码问题 有些编辑器显示代码和保存...原创 2019-12-06 15:27:32 · 1121 阅读 · 0 评论 -
【零基础学QT】【033】Qt容器类
Qt容器对比STL容器的优点 跨平台性,在不同平台上的表现是完全一致的 高效性,Qt容器使用了隐含共享策略,如果两个Qt对象的初始值是一样的,默认不进行深拷贝,直到其中一个直改变时,才会做深拷贝,这也对于只读不写的Qt对象来说,效率就大幅提升了 易用性,Qt容器简化了迭代操作,使用更简单 QString s1 = "AXY"; QString s2 = s1; //不做深拷贝,内部...原创 2019-12-05 16:58:36 · 453 阅读 · 0 评论 -
【零基础学QT】【032】Qt文件拖放功能
//dragwindow.h class DragWindow : public QMainWindow { private: QLineEdit *lineEdit; public: DragWindow(); void dragEnterEvent(QDragEnterEvent *event); void dropEvent(...原创 2019-12-03 11:43:03 · 266 阅读 · 0 评论 -
【零基础学QT】【031】C++中的union联合体和Qt中的QVariant
//自定义类型 class User { public: int id; string name; }; //注册User和User*为元类型 Q_DECLARE_METATYPE(User) Q_DECLARE_METATYPE(User *) int main(int argc, char *argv[]) { QVariant va...原创 2019-11-28 23:48:42 · 3405 阅读 · 0 评论 -
【零基础学QT】【030】原生C++代码模拟Qt类型识别系统
Qt内置类型识别系统的使用方法 QObject *obj = new QPushButton("OK"); //判断obj是否是QPushButton类 bool isPushButton = obj->metaObject()->className() == QStringLiteral("QPushButton"); cout << isPush...原创 2019-11-27 23:07:55 · 392 阅读 · 0 评论 -
【零基础学QT】【029】Qt元对象机制
什么是元对象机制元对象机制不是Qt独创的术语,而是一个编程语言领域的通用概念。元对象机制(Meta Object Facility)最早起源于建模语言UML,是一套用来定义和描述对象结构和行为的机制。元数据(Metadata)即用来描述其它数据特征和属性的数据Qt的元对象机制,同样也是为了实现这样的功能,记录类名,类继承关系,定义常用的Qt类操作,实现Qt的信号槽事件机制怎么使用元对象机...原创 2019-11-26 00:44:18 · 531 阅读 · 0 评论 -
【零基础学QT】【032】利用Clang-Format来排版C++代码
Clang-Format是一个通用的代码排版插件,可用于多种语言,多种IDEClang-Format完整样式说明可查看官方文档:ClangFormatStyleOptionsClang-Format常用样式如下 #基于的样式模版: Google,Microsoft BasedOnStyle: Google #最大保留的空行数: Number MaxEmptyLinesToK...原创 2019-11-15 20:50:27 · 979 阅读 · 0 评论 -
【零基础学QT】【027】Qt常用控件和布局
Qt控件众多,还有很多第三方的控件,不需要全部掌握只需了解一般控件和布局的调用方式,需要某个控件的时候再详细学习即可控件类本质上也就是一组设置属性的API,死记硬背意义不大,理解即可下面我们来列举一些常用控件和布局的使用方法???? QLabel:文本标签 //窗口 QMainWindow window; window.setGeometry(100, 100, 800...原创 2019-11-12 21:14:13 · 1303 阅读 · 0 评论 -
【零基础学QT】【028】Qt中的信号与槽机制
???? 信号与槽机制信号与槽机制(Signal & Slot)是QT独创的事件响应与消息处理机制它允许一个对象在触发事件时,发出信号,其它对象收到信号时,调用相应的槽函数进行响应处理信号与槽是一种形象的比喻,一个信号发射出信号,其它对象通过槽来接收信号???? 信号槽机制的使用方法 #include <QApplication> #include <QPushButt...原创 2019-10-30 14:55:45 · 281 阅读 · 0 评论 -
【零基础学QT】【026】QWidget,QWindow,UI指针
???? QWidget QWidget是所有QT控件的基类,包括按钮,窗口,对话框等,全部继承自QWidget QWidget类包含一个parent指针,这个指针也是QWidget类型,表示QWidget的上级界面对象。当parent为空时,QWidget即是顶级窗口,会显示窗口标题,按钮和边框。当parent非空时,QWidget则会成为parent中的控件,或是对话框,子窗口。 当pare...原创 2019-10-28 22:35:17 · 1466 阅读 · 1 评论 -
【零基础学QT】【025】Qt Creator添加和使用资源文件
Qt Creator很多地方不支持中文,初学者为了避免麻烦,可以尽量使用纯英文路径原创 2019-10-14 00:02:48 · 305 阅读 · 0 评论 -
【零基础学QT】【024】Qt Creator创建Qt Widget应用
Qt Widget是最基本的Qt界面创建方式???? 创建一个Qt Widget项目???? 项目结构???? 项目结构说明main.cpp整个应用程序的启动入口可以在main方法里面处理启动后的工作mainwindow.cpp主窗口对应的程序文件MainWindow类包含了一个名为ui的指针变量,通过它可以控制界面控件mainwindow.ui主窗口对应的界面设计文件双击这个...原创 2019-10-13 22:04:37 · 490 阅读 · 0 评论 -
【零基础学QT】【023】C++中的Lambda表达式
什么是Lambda表达式Lambda表达式语法规则Lambda表达式使用示例原创 2019-10-06 20:00:24 · 251 阅读 · 0 评论 -
【零基础学QT】【022】C++中的异常处理
???? C++异常处理机制 在默认情况下,代码发生异常会导致程序崩溃 C++允许我们通过try-catch代码块来捕获并处理异常,而不是直接让程序崩溃 try用来指定捕获异常的代码范围,catch用来指定如何处理异常 当try代码块中触发异常时,代码会中止执行,直接跳到catch块中,执行异常处理代码 我们还可以通过throw关键字,手动创建并抛出一个异常 C++可以用任何对象来表示异常...原创 2019-10-06 16:14:20 · 834 阅读 · 0 评论 -
【零基础学QT】【021】C++中的模版
???? 模板的用途有些时候,我们可能希望类结构保持不变,但类成员的数据类型是可变的比如像节点,链表,二叉树这些类结构,他们存储的元素可以是任意类型的,但是结构完全一致C++的模板便提供了这样的一个功能,通过声明一个符号,来代替一个可变的数据类型???? 模板的使用 //声明一个可变类型T template <class T> class Node { private: ...原创 2019-10-06 04:34:13 · 204 阅读 · 0 评论 -
【零基础学QT】【020】C++中的函数指针
???? 函数指针顾名思义,函数指针是指向函数的指针,通过指针便可以调用函数函数指针可以指向具有相同参数列表和返回值的同类函数,这种设计,使得我们可以根据情况,调用不同的函数去处理相同的数据???? 定义和使用函数指针 void showSum(int a, int b){ cout << a + b << endl; } void showProduct(...原创 2019-10-06 02:46:11 · 380 阅读 · 0 评论 -
【零基础学QT】【019】C++中的extern关键字
???? extern关键字的作用 用在源文件中,表示变量或函数对外开放,可以被其它文件使用 用在头文件中,对外声明变量或函数是extern的 用于源文件的文件引用,表示引用的变量或函数来自其它文件,可以取代include使用 static与extern意义正好相反,表示变量或函数不能被其它文件使用,注意这里的static用于文件而不是类,不要和静态成员函数弄混淆 用于不同语言之间混编,ex...原创 2019-10-05 22:04:46 · 739 阅读 · 0 评论 -
【零基础学QT】【018】C++中的友元类和友元函数
???? 声明友元关系在类定义中可以通过friend关键字,将其它的类和函数声明为友元类和友元函数,这样他们就可以访问自己的私有变量,友元关系不具备继承性和相互性???? 将普通函数声明为自己的友元函数 class Value { private: int value = 100; friend void show(Value* value); }; void show(...原创 2019-10-05 00:31:48 · 2193 阅读 · 0 评论 -
【零基础学QT】【017】C++中的静态成员变量,静态成员函数,使用类对象作为成员变量
???? 静态成员变量静态成员变量是类共享变量,所有类对象都可以访问,不属于某个特定对象,访问时通过类作用域来访问 class Code { public: static int value; }; //静态成员变量必须在类声明块之外初始化 int Code::value = 0; int main() { Code c1; c1.value++;...原创 2019-10-04 23:03:33 · 539 阅读 · 0 评论 -
【零基础学QT】【016】C++中的多态和虚函数
多态虚函数虚析构函数虚构造函数纯虚函数和抽象数据类型虚函数的实现原理指针转换原创 2019-09-26 00:15:04 · 1494 阅读 · 0 评论 -
【零基础学QT】【015】C++中的类继承
???? 类继承 一个类保留另一个类的全部字段和函数,并再此基础上扩展自己的功能,我们把这种关系叫做类继承 被继承的类叫做基类(父类),在基类基础上扩展出新功能的类叫做派生类(子类)???? 继承关系实现代码 class Animal { public: string name = "no-name"; Animal() = default; Animal...原创 2019-09-23 23:10:37 · 754 阅读 · 0 评论 -
【零基础学QT】【014】C++中的函数重载和运算符重载
???? 函数重载函数重载是指,同一个类中,存在多个名称相同,但参数列表不同的成员函数 class Math { public: int sum(int a, int b){ return a + b; } int sum(int a, int b, int c){ return a + b +c; } }; ...原创 2019-09-23 00:29:16 · 1714 阅读 · 0 评论