
Qt 5.9 C++开发指南
文章平均质量分 90
本栏目主要分享后期根据Qt 5.9 C++开发指南学习的总结
十月旧城
winter is coming
展开
-
16-4_Qt 5.9 C++开发指南_Qt 应用程序的发布
静态链接(Static linking)是指用 Qt 编译应用程序时,将 Qt 的运行库等所需的支持文件全部静态编译到应用程序里,生成一个独立的可执行文件,应用程序发布只需很少的几个文件。这样,当Qt 的运行库更新时可以单独更新Qt 运行库,应用程序如果使用了插件(插件是以共享库形式存在的),也可以单独更新插件,这为应用程序更新提供了方便。如果要使用静态链接发布应用程序,还需要将 Qt 以静态方式重新编译生成静态版本的 Qt,然后用静态版本的 Qt 编译和链接应用程序,才可以生成静态链接的应用程序。原创 2023-08-07 21:41:47 · 773 阅读 · 0 评论 -
16-3_Qt 5.9 C++开发指南_使用QStyle 设置界面外观_实现不同系统下的界面效果的匹配
这些样式是 QtGUI 模块自带的,在不同的平台上编译运行的程序具有缺省的样式,QApplication::style()可以返回应用程序缺省的样式。使用 Qt内置的样式,可以通过 QStyleFactory:keys()获取运行平台支持的样式列表,然后用QStyleFactory::create()创建样式,再用 QApplication::setStyle0)设置样式即可。“应用样式表”按钮的代码为界面上的几个显示组件类设置了样式表,在设置样式表后,即使修改窗口样式,这些样式表定义的显示效果依然存在。原创 2023-08-07 21:40:30 · 966 阅读 · 0 评论 -
16-2_Qt 5.9 C++开发指南_使用样式表Qss自定义界面
这两条法则都可以应用于ObiectName 为 btnSave 的QPushButton 组件,都定义了其前景色,这就会出现冲突。这时,选择器的明确性 (specificity) 决定组件适用的样式法则,即法则应用于更明确的组件。在上面的例子中QPushButton#btSave 被认为是比QPushButton 更明确的选择器因为它指向一个对象,而不是 QPushButton 的所有实例。所以,如果是在一个窗口上应用以上两条法则,则 btnSave 按钮的前景色为 gray,而其他按钮的前景色为red。原创 2023-08-07 21:37:07 · 778 阅读 · 0 评论 -
16-1_Qt 5.9 C++开发指南_多语言界面
有些软件需要开发多语言界面版本,如中文版和英文版,并且在软件里可以方便地切换界面语言。Qt 为多语言界面提供了很好的支持,使用 Qt 的一些规则和工具,可以很方便地为应用程序开发提供多语言界面支持。用 Qt 开发多语言界面应用程序,主要包括以下几个步骤。(1)在程序设计阶段,程序代码中每一个用户可见的字符串都用 tr()函数封装,以便 Qt 提取界面字符串用于生成翻译资源文件。用 UI设计器可视化设计窗体时统一用一种语言,如汉语。原创 2023-08-04 22:20:41 · 1154 阅读 · 0 评论 -
15-1_Qt 5.9 C++开发指南_Qt多媒体模块概述
访问原始音频设备进行输入或输出;低延迟播放音效文件,如 WAV 文件;使用播放列表播放压缩的音频和视频文件,如mp3、wmv 等;录制声音并且压制文件;使用摄像头进行预览、拍照和视频录制:音频文件解码到内存进行处理;录制音频或视频时,访问其视频帧或音频缓冲区;数字广播调谐和收听。如果在项目中使用视频播放功能,还需要加入下面的一行,以使用 QVideoWidget 或QGraphicsVideoItem 进行视频播放。原创 2023-08-11 20:15:37 · 743 阅读 · 0 评论 -
14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序
然后用 QDesktopServices:openUrl()函数调用缺省的应用软件打开下载的文件,例如,如果下载的是一个 PDF 文件,会自动用相关联的 PDF 阅读器软件打开此文件。QNetworkReply 类表示网络请求的响应。在 URL 地址编辑框里输入一个网络文件 URL 地址,设置下载文件保存路径后,单击“下载按钮就可以开始下载文件到设置的目录下。要下载文件,先在窗口上的 URL编辑框里输入下载地址(可以使用 Ctrl+V 组合键粘贴URL地址),再设置下载文件保存的目录。原创 2023-08-04 22:16:58 · 2149 阅读 · 0 评论 -
14-4_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP组播
永久多播组保持不变的是它的 IP 地址,组中的成员构成可以发生变化。QUdpSocket 支持 UDP 组播,joinMulticastGroup()函数使主机加入一个多播组,leaveMulticastGroup()函数使主机离开一个多播组,UDP 组播的特点是使用组播地址,其他的端口绑定、数据报收发等功能的实现与单播 UDP 完全相同。的通信模式,当多个客户端加入由一个组播地址定义的多播组之后,客户端向组播地址和端口发送的 UDP 数据报,组内成员都可以接收到,其功能类似于 QQ 群。原创 2023-08-04 22:14:53 · 1322 阅读 · 0 评论 -
14-3_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP 单播和广播
UDP(User Datagram Protocol,用户数据报协议)是轻量的、不可靠的、面向数据报 (datagram)、无连接的协议,它可以用于对可靠性要求不高的场合。与 TCP 通信不同,两个程序之间进行 UDP 通信无需预先建立持久的 socket 连接,UDP 每次发送数据报都需要指定目标地址和端口(如图14-6 所示)。QUdpSocket 类用于实现 UDP 通信,它从 QAbstractSocket 类继承,因而与 QTcpSocket 共享大部分的接口函数。原创 2023-08-04 22:12:21 · 1674 阅读 · 0 评论 -
14-2_Qt 5.9 C++开发指南_TCP通信(TCP & Socket 相关知识点;Socket连接过程分为三个步骤: 服务器监听,客户端请求,连接确认)
TCP 通信必须先建立 TCP 连接,通信端分为客户端和服务器端(如图 14-2 所示)。Qt 提供QTcpSocket 类和 QTcpServer 类用于建立 TCP 通信应用程序。服务器端程序必须使用 QTcpServer 用于端口监听,建立服务器;QTcpSocket 用于建立连接后使用套接字(Socket)进行通信。QTcpServer 是从QObject 继承的类,它主要用于服务器端建立网络监听,创建网络 Socket 连接。原创 2023-08-03 21:00:18 · 1101 阅读 · 1 评论 -
14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo
Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类,如用于 TCP 通信的QTcpSocket 和 QTcpServer,用于 UDP 通信的 QUdpSocket,还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest,QNetworkReply 和QNetworkAccessManager。Qt 网络模块还提供用于网络代理、网络承载管理的类,提供基于安全套接字层 (Secure Sockets Layer,SSL)协议的安全网络通信的类。原创 2023-08-02 21:15:34 · 810 阅读 · 0 评论 -
13-5_Qt 5.9 C++开发指南_基于信号量的线程同步_Semaphore
信号量通常用来保护一定数量的相同的资源,如数据采集时的双缓冲区,适用于Producer/Consumer 模型。在实例 samp13_5中,创建类似于 Producer/Consumer 模型的两个线程类 QThreadDAQ 和QThreadShow。原创 2023-08-02 21:10:12 · 857 阅读 · 0 评论 -
13-4_Qt 5.9 C++开发指南_基于QWaitCondition 的线程同步_Wait
在多线程的程序中,多个线程之间的同步实际上就是它们之间的协调问题。例如上一小节讲到的3个线程的例子中,假设 threadDAQ 写满一个缓冲区之后,threadShow 和 threadSaveFile 才能对缓冲区进行读操作。前面采用的互斥量和基于 OReadWriteLock 的方法都是对资源的锁定和解锁,避免同时访问资源时发生冲突。在一个线程解锁资源后,不能及时通知其他线程。原创 2023-08-01 20:39:39 · 350 阅读 · 0 评论 -
13-3_Qt 5.9 C++开发指南_基于QReadWriteLock 的线程同步
数据缓冲区 buffer 和瓦斥量 mutex 都是全局变量,线程 threadDAO 将数据写到 buffer,线程threadShow 和 threadSaveFile 只是读取 buffer,但是因为使用互斥量,这3个线程任何时候都只能有一个线程可以访问 buffer。QReadWriteLock 以读或写锁定的同步方法允许以读或写的方式保护一段代码,它可以允许多个线程以只读方式同步访问资源,但是只要有一个线程在以写方式访问资源时,其他线程就必须等待直到写操作结束。转载 2023-08-01 20:36:32 · 520 阅读 · 0 评论 -
13-2_Qt 5.9 C++开发指南_线程同步_QMutex+QMutexLocker(目前较为常用)
原理上,对于两个或多个线程可能会同时读或写的变量应该使用互斥量进行保护,例如QDiceThread 中的变量 m_stop 和 m_paused,在 run()函数中读取这两个变量,要在 diceBegin()、diceEnd()和 stopThread()函数里修改这些值,但是这 3 个函数都只有一条赋值语句,可以认为是原子操作,所以,可以不用锁定保护(这种说法应该放到汇编语言的角度去看)。执行这两条语句时不希望被主线程调用的diceValue()函数中断,如果中断,则主线程得到的可能是错误的值。原创 2023-08-01 20:34:46 · 659 阅读 · 0 评论 -
13-1_Qt 5.9 C++开发指南_多线程及QThread 创建多线程程序_ThreadSignal
QThread会起一个子线程,并可以通过信号槽将变量传递到主线程中。QThread 类提供不依赖于平台的管理线程的方法。一个 QThread 类的对象管理一个线程,一般从QThread 继承一个自定义类,并重定义虚函数run(),在run()函数里实现线程需要完成的任务。将应用程序的线程称为主线程,额外创建的线程称为工作线程。一般在主线程里创建工作线程,并调用 start()开始执行工作线程的任务。start()会在内部调用 run()函数,进入工作线程的事件循环。原创 2023-08-01 20:29:50 · 628 阅读 · 0 评论 -
12-4_Qt 5.9 C++开发指南_创建和使用共享库
除了静态库,Qt 还可以创建共享库,。动态链接库项目编译后生成 DLL 文件,DLL 文件在 windows 平台上应用广泛。DLL 文件是在应用程序运行时加载的,不像静态库那样在编译期间就连编到应用程序里。若更新了 DLL 文件版本,只要接口未变,应用程序依然可以调用。创建共享库项目,单击Qt Creator 的“File”->“New File or Project”菜单项,在 New File orProject 对话框中选择 Projects 组里的 Library,在右侧的具体类别中再选择 C++原创 2023-07-31 22:03:33 · 994 阅读 · 0 评论 -
12-3_Qt 5.9 C++开发指南_创建和使用静态链接库
第12章中的静态链接库和动态链接库介绍,都是以UI操作的方式进行,真正在实践中,可以参考UI操作产生的代码来实现同样的功能。原创 2023-07-31 21:57:18 · 988 阅读 · 0 评论 -
12-2_Qt 5.9 C++开发指南_自定义Qt Designer 插件(UI 设计器自定义界面组件的 Widget 插件,直接安装到 UI设计器组件面板里,如同 Qt 自带的界面设计组件一样)
qwbattery.h 里的内容是对组件类QwBattery 的类定义,其功能与12.1节中的QmyBattery 类完全一样。这两个类的名称之所以不同,是为了在编译两个实例时不产生冲突。QwBattery 类的定义与QmyBattery 的定义基本一样,只是在声明类的时候需要加一个宏ODESIGNER_WIDGET_EXPORT,并且用Q_PROPERTY宏定义了一个属性 powerLevel。原创 2023-07-28 21:27:58 · 2426 阅读 · 0 评论 -
12-1_Qt 5.9 C++开发指南_自定义插件和库-自定义Widget组件(提升法(promotion)创建自定义定制化组件)
Qt的 UI 设计器提供了很多 GUI 设计的界面组件,可以满足常见的界面设计需求。但是某些时候需要设计特殊的界面组件,而在 UI设计器的组件面板里根本没有合适的组件,这时就需要设计自定义的界面组件。所有界面组件的基类是QWidget,要设计自定义的界面组件,可以从QWidget继承一个自定义的类,重定义其painEvent()事件,利用Qt的绘图功能会追组件外观,并实现所需的其他功能。原创 2023-07-28 21:20:10 · 1081 阅读 · 0 评论 -
11-4_Qt 5.9 C++开发指南_QSqlRelationalTableModel的使用(可处理关系数据表,所谓关系数据表,是指将主表里某些字段存储为代码行变量,而代码具体意义在另一个数据表里)
主窗口类定义如下,定义了一个QSqIRelationalTableModel 类型的变量 tabModel 作为数据模型。//数据库连接 QSqlRelationalTableModel * tabModel;//数据模型 QItemSelectionModel * theSelection;//选择模型 void openTable();//打开数据表 // void getFieldNames();原创 2023-07-27 21:09:15 · 291 阅读 · 0 评论 -
11-3_Qt 5.9 C++开发指南_QSqlQuery的使用(QSqlQuery 是能执行任意 SQL 语句的类)
插入记录”和“编辑记录都会打开一个对话框,编辑一条记录的所有字段数据,确认插入后用 QSqlQuery 执行一条INSERT语句插入一条记录,确认编辑时用 QSqlQuery 执行一个UPDATE 语句更新一条记录。遍历 qryEmpList 的所有记录,QSqlQuery 有 first()、previous()、next()、last()等函数记录移动,若到了最后一条记录后再执行 next(),将返回 false,以此判断是否遍历完所有记录。原创 2023-07-27 20:56:47 · 2341 阅读 · 0 评论 -
11-2_Qt 5.9 C++开发指南_QSqlQueryModel的使用(QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据)
从下图中可以看到,QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel封装了执行 SELECT 语句从数据库查询数据的功能,但是 QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据。QSqlQueryModel 类的主要接口函数见表 11-10(省略了函数中的 const 关键字和缺省参数)。使用QSqlQueryModel作为数据模型从数据库里查询数据,只需使用 setQuery()函数设置一个SELECT 查询语句即可。原创 2023-07-27 20:51:41 · 820 阅读 · 0 评论 -
11-1_Qt 5.9 C++开发指南_数据库(Qt中数据库模块介绍;SQLite数据库;QSqITableModel直接设置一数据表名称,可获取数据表全部记录,其结果是可编辑,与对应View配合)
Qt += sql这样会将 Qt SOL 模块中的所有类都包含进去,如果只使用其中的某些类,为避免冗余可以单独包含某个类。原创 2023-07-26 21:54:11 · 277 阅读 · 0 评论 -
10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示
Data Visualization 的三维显示功能主要由 3种三维图形类来实现,分别是三维柱状图类Q3DBars,三维空间散点类Q3DScatter,三维曲面类Q3DSurface。这3 个类的父类是 QAbstract3DGraph,是从QWindow 继承而来的,继承关系如图10-1 所示。Data Visualization与 Qt Charts 类似,都基于 Qt 的图形视图结构,所以一个三维图形也是由图表、序列、坐标轴等元素组成的。原创 2023-08-11 20:13:44 · 1235 阅读 · 0 评论 -
09-1_Qt 5.9 C++开发指南_Qchart概述
Qt Charts 可以很方便地绘制常见的折线图、柱状图、饼图等图表,不用自己耗费时间和精力开发绘图组件或使用第三方组件了。本章首先介绍 Qt Charts 的基本特点和功能,以画折线图为例详细说明 Qt Charts 各主要部件的操作方法,再介绍各种常用图表的绘图方法,最后介绍鼠标操作图形缩放等功能的实现。原创 2023-08-11 20:11:37 · 1106 阅读 · 0 评论 -
08-3_Qt 5.9 C++开发指南_Graphics View绘图架构
具体实例介绍见对应章节。原创 2023-08-11 20:08:35 · 649 阅读 · 0 评论 -
08-2_Qt 5.9 C++开发指南_坐标系统和坐标变换
现在要取其中间的一个正方形区域作为视口,灰色的正方形就是视口,绘图设备的物理坐标中,视口的左上角坐标为(50,0),右下角坐标为(250,200)。常用的坐标变换是平移、旋转和缩放,使用世界坐标变换矩阵也可以实现这些变换功能,但是需要单独定义一个QTransform 类的变量,对于QPainter 来说,简单的坐标变换使用QPainter自有的坐标变换函数就足够了。视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标的一个矩形区域用于绘图。为了实现更方便的坐标,QPainter 还提供了。原创 2023-08-11 20:05:41 · 273 阅读 · 0 评论 -
08-1_Qt 5.9 C++开发指南_QPainter绘图
本章所介绍内容基本在《QT从入门到实战x篇》中对应有介绍,本专栏主要做简要功能介绍,到实际需要使用的时候再做详究。原创 2023-08-11 20:03:44 · 742 阅读 · 0 评论 -
07-3_Qt 5.9 C++开发指南_文件目录操作
实例 samp7_3 演示前述各种目录与文件操作类的主要功能,图 7-3 是实例运行时的窗口。窗口左侧是一个QToolBox 组件,分为6组,每一组是一个或两个类的功能演示,在每个组里放置些QPushButton 按钮,每个按钮主要调用类的某个函数,按钮的标题就是使用的函数的名称。窗口右侧是显示区,可以选择一个目录、一个文件,然后左侧的功能基本上都是对选择的目录或文件进行操作,右下方是一个 QPlainTextEdit 组件,用于显示信息。原创 2023-08-10 22:59:42 · 988 阅读 · 0 评论 -
07-2_Qt 5.9 C++开发指南_二进制文件读写(stm和dat格式)
除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。例如地球物理中常用的 SEG-Y 格式文件,必须按照其标准格式要求写入数据才符合这种文件的格式规范,读取数据时也需要按照格式定义来读出。Qt 使用 QFile 和QDataStream 进行二进制数据文件的读写。QFile 负责文件的10 设备接口,即与文件的物理交互,QDataStream 以数据流的方式读取文件内容或写入文件内容。原创 2023-08-10 22:53:10 · 977 阅读 · 0 评论 -
07-1_Qt 5.9 C++开发指南_文件系统及文件读写_文本文件读写(使用 QTextStream 进行文件读写更为方便)
文本文件是指以纯文本格式存储的文件,例如用 Qt Creator 编写的 C++程序的头文件 (.h 文件)和源程序文件 (.cpp 文件)。HTML 和 XML 文件也是纯文本文件,只是其读取之后需要对内容进行解析之后再显示。Qt 提供了两种读写纯文本文件的基本方法,一种是用 QFile 类的 IODevice 读写功能直接进行读写,另一种是利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。原创 2023-08-10 22:49:17 · 1173 阅读 · 0 评论 -
06-5_Qt 5.9 C++开发指南_Splash 与登录窗口(MouseEvent鼠标事件;注册表;加密)
一般的大型应用程序在启动时会显示一个启动画面,即 Splash 窗口。Splash 窗口是一个无边对话框,一般显示一个图片,展示软件的信息。Splash 窗口显示时,程序在后台做一些比较耗时的启动准备工作,Splash 窗口显示一段时间后自动关闭,然后软件的主窗口显示出来。Qt有一个QSplashScreen 类可以实现 Splash 窗口的功能,它提供了载入图片,自动设置窗口无边框效果等功能。有的应用程序还有软件登录界面,要求用户输入用户名和密码才可以进入软件。原创 2023-08-09 22:31:45 · 539 阅读 · 0 评论 -
06-4_Qt 5.9 C++开发指南_MDI应用程序设计
传统的应用程序设计中有多文档界面(Multi-document Interface,MDI) 应用程序,Qt为设计MDI应用程序提供了支持。本节的实例 samp6_4 是一个MDI应用程序,程序运行效果如图 6-14 所示。MDI应用程序就是在主窗口里创建多个同类型的 MDI 子窗口,这些 MDI 子窗口在主窗口里显示,并共享主窗口上的工具栏和菜单等操作功能,主窗口上的操作都针对当前活动的 MDI子窗口进行。设计 MDI 应用程序需要在主窗口工作区放置一个QMdiArea 作为子窗体的容器。原创 2023-08-09 22:27:18 · 696 阅读 · 0 评论 -
06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)
然后使用QTabWidget 的 addTab()函数,为主窗口上的 tabWidget 新建一个页面,作为 formDoc 的父窗体组件,formDoc 就在新建的页面里显示,我们称这种窗体显示方式为“嵌入式”。所以,即使是从QMainWindow 继承的窗口类,也是可以在其他界面组件里嵌入式显示的。图6-12 是嵌入式和独立的 QFormDoc 窗体的显示效果,在创建独立的显示窗口时,还可以尝试使用 setWindowFlag()函数设置不同的属性,观察这些属性的控制效果。原创 2023-08-09 22:19:41 · 818 阅读 · 0 评论 -
06-2_Qt 5.9 C++开发指南_自定义对话框及其调用
设置表头标题的对话框类是 QWDialogHeaders,它也是从 QDialog 继承的可视对话框类。其界面显示使用 QListView 组件,用 QStringListModel 变量管理字符串列表数据,构成 Model/View结构。对话框上同样有“确定”和“取消”两个按钮,设置与对话框的 accept()和 reject()槽关联。delete ui;对话框和主窗口之间互相操作的关键是要有对方对象的指针,然后才能传递参数并调用对方的函数。原创 2023-08-08 21:02:33 · 1206 阅读 · 0 评论 -
06-1_Qt 5.9 C++开发指南_对话框与多窗体设计_标准对话框
*Qt为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,用户无需再自己设计这些常用的对话框,这样可以减少程序设计工作量。**在前面几章的实例中,或多或少地用到了其中的一些对话框。Qt 预定义的各标准对话框的类,及其主要静态函数的功能见表 6-1(由于输入参数一般较多,省略了函数的输入参数,只列出了函数的返回值类型)。实例 samp6_1 演示使用这些对话框,程序运行界面如图6-1 所示。原创 2023-08-08 20:57:35 · 640 阅读 · 2 评论 -
05-2_Qt 5.9 C++开发指南_Model/View结构实例(QFileSystemModel、QStringListModel、QStandardItemModel;编程实例)
QStringListModel 用于处理字符串列表的数据模型,它可以作为 QListView 的数据模型,在界面上显示和编辑字符串列表。QStringListModel 的 setStringList()函数可以初始化数据模型的字符串列表的内容,stringList()函数返回数据模型内的字符串列表,在关联的 ListView 组件里编辑修改数据后,数据都会及时更新到数据模型内的字符串列表里。原创 2023-07-21 21:29:22 · 398 阅读 · 0 评论 -
05-1_Qt 5.9 C++开发指南_Model/View结构基础(基本原理;数据模型;试图组件;代理)
Model/View 结构的典型应用是在数据库应用程序中,例如数据库中的一个数据表可以在一个 OTableView 组件中显示和编辑。主要的视图组件有 QListView、QTreeView 和 QTableView,第 4 章介绍的 QListWidget、QTreeWidget 和 QTableWidget 分别是这 3 个类的便利类,它们不使用数据模型,而是将数据直接存储在组件的每个项里。原创 2023-07-18 20:59:09 · 1040 阅读 · 0 评论 -
04-8_Qt 5.9 C++开发指南_QTableWidget的使用
QTableWidget是Qt中的表格组件类。在窗体上放置一个QTableWidget 组件后,可以在 PropertyEditor 里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其 Colum、Row 和 Item 进行编辑。一个QTableWidget 组件的界面基本结构如图4-17 所示,这个表格设置为6行5列。表格的第1行称为行表头,用于设置每一列的标题,第1列称为列表头,可以设置其标题,但一般使用缺省的标题,即为行号。行表头和列表头一般是不可编辑的。原创 2023-08-08 20:42:56 · 433 阅读 · 0 评论 -
04-7_Qt 5.9 C++开发指南_QTreeWidget和QDockWidget
实例使用一个 QTreeWidget 组件管理照片目录,可以添加、删除节点,每个节点设置一个自定义类型,另外,还设置了一个自定义数据,图片节点存储完整文件名,以便单击节点时显示该图片。本节介绍 QTreeWidget、QDockWidget 的使用,以及用 QLabel 显示图片的方法。实例 samp4_8以QTreeWidget 为主要组件,创建一个照片管理器,实例运行时的界面如图 4-14 所示。QTreeWidget、QDockWidget和QLabel组件详细的使用方法,请见源码或书籍。原创 2023-08-08 20:40:51 · 316 阅读 · 0 评论