
Qt
文章平均质量分 73
阳光开朗男孩
躺平才是王道
展开
-
Qt4_使用Qt样式表
使用Qt样式表Qt的样式表主要是受到了CSS的启发,但同时也适用于窗口部件。样式表由影响窗口部件给制的样式规则组成。这些规则是普通文本。由于在运行时会解析样式表,所以可以通过制定样式表的方式来尝试设计不同的Qt应用程序:使用-stylesheet file.qss命令行参数、使用Qt设计师的样式表编辑器,或者在开发应用程序时嵌入一个QTextEdit。样式表作用于上层的当前激活的QStyle上(例如,QWindowsVistaStyle或者QPlastiqueStyle)。因为创建样式表不引入任何子类,原创 2021-06-28 17:26:39 · 1453 阅读 · 0 评论 -
Qt4_自定义外观
自定义外观在某些情况下,我们可能需要修改Qt内置窗口部件的外观。可能只希望稍微做一此美学方面的优化,或者希望实现一种全新的风格,以便可以为应用程序或者一批应用程序实现统一的、与众不同的外观。无论是哪种情况,都可以使用三种方法来重新定义Qt内置窗口部件的外观:● 子类化个别的窗口部件类并且重新实现它的绘制和鼠标事件处理器。这给我们以完全的可控性,但需要付出大量的工作。这意味着必须遍历所有的代码和Qt设计师的窗体,把Qt所有相关的类都改成子类。● 子类化QStyle或者一个预定义的风格,例如QWindow原创 2021-06-28 14:10:44 · 164 阅读 · 0 评论 -
Qt4_写入XML
写入XML能读取XML文件的大多数应用程序也需要写人XML文件。一般来说,主要有三种由Qt应用程序生成XML文件的方法:● 使用QXmIStreamWriter● 构建DOM树并对它调用save()● 手动生成XML实际上,这三种方法的选取通常与是否使用QXmlStreamWriter、DOM或SAX来读取XML文档并无关系,尽管数据保留在DOM树中时直接保存这个DOM树是完全说得通的。利用QXmlStreamWrite类来写入XML文件非常容易,因为它将时刻为我们关注那些特殊的转义字符。如果想原创 2021-06-28 11:36:09 · 557 阅读 · 0 评论 -
Qt4_使用SAX读取XML
使用SAX读取XMLSAX 事实上是公共领域中一种用于读取 XML 文挡的标准应用程序编程接口。Qt 的 SAX 类是对基于 SAX2 的 Java 实现的模拟,只是在命名上有些不太符合Qt的惯例。与 DOM 相比, SAX 更加底层但通常也更加快速。然而,由于在本章前面部分曾介绍过的 QXmlSimpleReader 类提供了一个更接近Qt风格的应用程序编程接口,且比 SAX 解析器更加快速,因此 SAX 解析器的主要用途就是将使用SAX应用程序编程接口的代码导入Qt中。有关SAX更详细的信息,请参看原创 2021-06-28 11:14:45 · 387 阅读 · 1 评论 -
Qt4_用DOM读取XML
用DOM读取XMLDOM 是一种解析由万维网协会(W3C) 所开发的 XML 文档的标准应用程序编程接口。 Qt 提供一套用于读取、操作和编写 XML 文挡的非验证型二级 DOM 实现。DOM 把 XML 文件表示成内存中的一棵树。我们可以按需要遍历这个 DOM 树,也可以修改这个树并把它作为 XML 文件保存到磁盘中。让我们考虑如下这个,XML 文档:<doc> <quote>Scio me nihil scire</quote> <tra原创 2021-06-28 10:41:59 · 326 阅读 · 0 评论 -
Qt4_使用QXmlStreamReader读取XML
使用QXmlStreamReader读取XML使用 QXmlStreamReader,是在 Qt 中读取 XML 文档的最快且最简单的方式。因为解析器的工作能力是逐渐递增的,所以它尤其适用于诸如查找 XML 文档中一个给定的标记符出现的次数、读取内存容纳不了的特大文件、组装定制的数据结构以反映 XML 文档的内容等。QXmlStreamReader 解析器根据图 16.1 中所列出的记号(token) 工作。每次只要调用 readNext()函数,下一个记号就会被读取并变成当前的记号。当前记号的属性取决原创 2021-06-28 10:10:03 · 2857 阅读 · 1 评论 -
Qt4_XML
XMLXML(eXtensible Markup Ianguage,可扩展标记语言)是普遍用于数据交换和数据存储的一种多用途文本文件格式。XML首先是由万维网协会(World WideWeb Consortium,W3C)作为SGML的一个替代品来开发的。它的语法规则与HTML相似,不过XML是一种用于语言分析的语言,它并没有要求专门的标记符属性或者条目。HIML的XML兼容版称为XHIML。对于比较流行的SVG(可标量化矢量图形)XML格式QtSvg模块提供了可用于载入并呈现 SVG图像的类。对于使用原创 2021-06-25 15:28:54 · 250 阅读 · 0 评论 -
Qt4_发送和接收UDP数据报
发送和接收UDP数据报QUdpSocket类可以用来发送和接收UDP数据报(datagram)。UDP是一种不可靠的,面向数据报的协议。一些应用层的协议使用UDP,因为它比TCP更加小巧轻便。采用UDP,数据是以包(数据报)的形式从一个主机发送到另一个主机的。这里并没有连接的概念,而且如果UDP包没有被成功投递,它不会向发送者报告任何错误。我们将会通过Weather Balloon和Weather Station 这两个实例来看看在Qt应用程序中是如何使用UDP的。Weather Balloon应用程原创 2021-06-16 09:44:36 · 3233 阅读 · 2 评论 -
Qt4_写TCP客户/服务器应用程序
写TCP客户/服务器应用程序QTcpSocket和QTcpServer类可以用来实现TCP客户端和服务器。TCP是一个传输协议,它构成了包括FTP和HTTP等很多应用程序层的因特网协议基础,它也可以用于定制用户自己的协议。TCP是一个基于流的协议。对于应用程序,数据表现为一个长长的流,而不是一个大的平面文件。在TCP之上建立的高层协议通常是基于行的或者基于块的。● 基于行的协议把数据作为一行文本进行传输,每一数据行都以一个换行符结尾。●基于块的协议把数据作为二进制块进行传输。每一数据块都是 由一个大原创 2021-06-16 09:44:20 · 690 阅读 · 0 评论 -
Qt4_写HTTP客户端
写HTTP客户端QHttp类在Qt中实现了HTTP协议的客户端程序。它提供了各种各样的函数来执行绝大多数普通HTTP操作,包括get()和post(),并且还提供了一个发送任意HTTP请求指令的方式。会发现QFtp和QHttp之间存在很多相似之处。QHttp类是异步工作的。当调用一个像get()或者post( )这样的函数时,它会立即返回,并且当控制权回到Qt事件循环时才会开始传输数据。这样就确保了在处理HTTP请求时,应用程序的用户界面可以始终保持响应。我们将查看一个名为httpget 的控制台应用原创 2021-06-16 09:44:06 · 734 阅读 · 0 评论 -
Qt4_写FTP客户端
写FTP客户端QFtp类在Qt中实现了FTP协议的客户端程序,它提供了非常多的函数来执行多数常见的FTP操作,同时还可以执行任意的FTP指令。QFtp类是异步工作的。若调用一个像get()或者put()这样的函数,它会立即返回并且仅在控制权回到Qt的事件循环时才发生数据传输。这样就确保了在执行FTP指令时,用户界面可以保持响应。我们将从如何使用get()函数获取一个单一文件的例子 开始讲起。该例子是一个名为ftpget的控制台应用程序,它可以下载指定命令行上的远程文件。首先看看main()主函数:i原创 2021-06-16 09:43:48 · 1355 阅读 · 0 评论 -
Qt_4网络
Qt提供了QFtp 和QHtp两个类与FTP和HTTP协议配合使用。这些协议的使用让文件的下载和上传变得更加容易。另外,HTTP协议也使向网站服务器发送请求并重新找回结果的过程变得简单易行。Qt还提供了较低级的QTcpSocket和QUdpSocket类,它们将实现TCP和UDP传输协议。TCP是一个可靠的面向连接的协议,它按照网络节点间传输的数据流形式进行操作;UDP是一个不可靠的无连接协议,它主要基于网络节点间离散信息包的传输。这两个协议都可以用于创建网络客户端和服务器应用程序。若要创建服务器应用原创 2021-06-16 09:43:32 · 153 阅读 · 0 评论 -
Qt4_在次线程中使用Qt的类
在次线程中使用Qt的类当函数可以同时被不同的线程安全地调用时,就称其为“线程安全的”(thread-safe)。如果在不同的线程中对某一共享数据同时调用两个线程安全的函数,那么结果将总是可以确定的。若将这个概念推广,当一个类的所有函数都可以同时被不同的线程调用,并且它们之间互不干涉,即使是在操作同一个对象的时候也互不妨碍,我们就把这个类称为是线程安全的。Qt中,线程安全的类有QMutex、QMutexLocker、QReadWniteLock、QReadLocker、QWriteLocker、QSe原创 2021-06-16 09:43:13 · 218 阅读 · 0 评论 -
Qt4_同步线程
同步线程对于多线程应用程序,一个最基本要求就是能实现几个线程的同步执行。 Qt 提供了以下这几个用于同步的类:QMutex、QReadWriteLock、QSemaphore、QWaitCondition。QMutex 类提供了一种保护一个变量或者一段代码的方法,这样就可以每次只让一个线程读取它。这个类提供了一个lock()函数来锁住互斥量 (mutex)。如果互斥量是解锁的 (unlock),那么当前线程就立即占用并锁定(lock) 它;否则,当前线程就会被阻塞,直到掌握这个互斥量的线程对它解锁为止。原创 2021-06-13 12:18:16 · 206 阅读 · 1 评论 -
Qt4_创建线程
创建线程在Qt应用程序中提供多钱程是非常简单的:只需要子类化QThread 并且重新实现它的 run()函数就可以了。为了显示这一过程是如何进行的,我们将从介绍一个非常简单的QThread子类的代码开始,它是一个可以在控制台上重复打印给定字符串的子类。应用程序的用户接口界面如:Thread.h#ifndef THREAD_H#define THREAD_H#include <QThread>class Thread : public QThread{ Q_OBJECT原创 2021-06-13 12:17:51 · 363 阅读 · 0 评论 -
Qt4_多线程
多线程.在多线程应用程序中,图形用户界面运行于它自己的线程中,而另外的事件处理过程则会发生在一个或多个其他线程中。这样做之后,即使在处理那些数据密集的事件时,应用程序也能对图形用户界面保持响应。当在一个单处理器上运行时,多线程应用程序可能会比实现同样功能的单线程应用程序运行得更慢一些,无法体现出其优势。但在目前多处理器系统越来越普及的情况下,多线程应用程序可以在不同的处理器中同时执行多个线程,从而获得更好的总体性能。...原创 2021-06-13 12:17:19 · 271 阅读 · 0 评论 -
Qt4_与主线程通信
与主线程通信当Qt应用程序开始执行时,只有主线程是在运行的。主线程是唯一允许创建QAplication 或者QCoreApplication对象,并且可以对创建的对象调用exec()的线程。在调用exec()之后,这个线程 或者等待一个事件,或者处理一个事件。通过创建一些QThread子类的对象,主线程可以开始一些新的线程,就像上一节中所做的那样。如果这些新的线程需要在它们之间进行通信,则可以使用含有互斥量、读-写锁、信号或者等待条件的共享变量。但在这些技术中,没有任何一个可以用来与主线程进行通信,因为原创 2021-06-16 09:44:51 · 295 阅读 · 0 评论 -
Qt4_在表中显示数据
在表中显示数据在许多情况下,以表格式的视图为用户显示数据集是最简单的方法。本节给出 Staff Manager应用程序的主窗体,它由两个呈主一从关系的 QTableView 组成(窗体如图 13.4所示)。主视图是一个单位部门的列表,从视图则为当前部门中的雇员列表。两个视图都使用了 QSqlRelationalTableModels,因为它们呈现出的两个数据库表都有外键字段。我们依然使用 enum 枚举类型变量为表的列索引号给出有具体含义的命名:enum { Department_Id =原创 2021-06-25 14:15:21 · 1364 阅读 · 1 评论 -
Qt4_使用窗体编辑记录
使用窗体编辑记录我们将看到如何创建一次只显示一条记录的对话窗体。这个对话框可以用于增加、编辑、删除单独的记录,也可以遍历表中所有的记录。我们将通过Staff Manager应用程序来阐明这些概念。该应用程序记录了雇员所属的部门、部门所处的位置以及诸如雇员内部电话分机号等一些基本信息。应用程序使用了如下三个表:CREATE TABLE location( id INTEGER PRIMARY KEY AUTOINCREMENT, name VACHAR(40) NOT NULL));原创 2021-06-25 10:40:50 · 346 阅读 · 0 评论 -
Qt4_查看表
查看表如图的Scooters应用程序,给出了踏板车(scooter)的型号表。该实例基于单一的scooter表,其定义如下:CREATE TABLE scooter{ id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(40) NOT NULL, maxspeed INTEGER NOT NULL, maxrange INTEGER NOT NULL, weight INTEGER NOT NULL, de原创 2021-06-24 17:22:49 · 223 阅读 · 0 评论 -
Qt4_连接与查询
连接与查询为了执行 SQL 查询,首先必须建立与数据库的连接。通常情况下,是在应用程序开始时所调用的一个单独的函数中建立数据库连接。例如:bool createConnection(){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("mozart.konkordia.edu"); db.setDatabaseName("musicdb"); db.setPassword("T原创 2021-06-22 09:54:56 · 357 阅读 · 0 评论 -
Qt4_数据库
数据库QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口。这个接口由利用Qt的模型/视图结构将数据库与用户界面集成的一套类来支持。QSqlDatabase 对象表征了数据库的关联。Qt使用驱动程序与各种数据库的应用编程接口进行通信。Qt的桌面版(Desktop Edition)包括如下一些驱动程序:由于授权许可的限制,Qt的开源版本无法提供所有的驱动程序。当配置Qt时,既可以选择本身就包含的SQL驱动程序,也可以以插件的形式建立驱动程序。公共领域中不断发展的SQLite数据库将向Q原创 2021-06-21 15:01:27 · 370 阅读 · 0 评论 -
Qt4_进程间通信
进程间通信QProcess类允许我们执行外部程序并且和它们进行交互。这个类是异步工作的,且它在后台完成它的工作这样用户界面就可以始终保持响应。当外部进程得到数据或者已经完成时,QProcess 会发出信号通知我们。我们将查看一个小应用程序的代码,它为一个外部图片转换程序提供用户界面。对于这个实例,我们使用ImageMagick中的conver程序,它对于所有主要平台都可以免费得到。用户界面如图12.2所示。用户界面在Qt设计师中创建的。ui文件就在本书的网站上中。这里,我们将主要看由uic生成的Ui原创 2021-06-21 14:27:02 · 434 阅读 · 0 评论 -
Qt4_嵌入资源
嵌入资源到目前为止,本章已经讨论了如何在外部设备中存取数据,然而利用Qt还可以在应用程序的可执行文件中嵌入二进制数据或者文本。这可以通过使用Qt资源系统来实现。在其他的章节中,将使用资源文件将图片嵌入到可执行文件中,当然也可以嵌入其他种类的文件。与文件系统中的普通文件一样嵌人的文件也可以通过OFile读取。通过 Qt 资源编译器 rcc,可以将资源转换为 C++代码。还可以通过把下面一行代码加到.pro 文件中来告诉qmake包括专门的规则以运行roc:RESOURCES = myresourcefi原创 2021-06-21 09:58:21 · 203 阅读 · 0 评论 -
Qt4_遍历目录
遍历目录QDir 类提供了一种与平台无关的遍历目录并获得有关文件信息的方法。为了看看 QDir 是如何使用的,我们将编写一个小的控制台应用程序,它会计算一个特定、目录以及这个目录下任意深度的子目录中所有图片所占用的空间。应用程序的核心是由imageSpace() 函数,它递归计算出给定目录中所有图片累加的大小总和:qlonglong imageSpace(const QString &path){ QDir dir(path); qlonglong size = 0;原创 2021-06-21 09:49:39 · 243 阅读 · 1 评论 -
Qt4_读取和写入文本
虽然二进制文件格式比通常基于文本的格式更加紧凑,但是它们是机器语言,无法人工阅读或者编辑。在二进制文件格式无法适用的场合,可以使用文本格式来代替。 Qt 提供了 QTextStream类读写纯文本文件以及如 HTML XML 和源代码等其他文本格式的文件。QTextStream考虑了Unicode 编码与系统的本地编码或其他任意编码之间的转换问题,并且明确地处理了因使用不同操作系统而导致不同的行尾符之间的转换(在 Windows 操作系统上行尾符是"\r\n",即UNIX Mac X 操作系统上是"\n"原创 2021-06-21 09:18:42 · 979 阅读 · 3 评论 -
Qt4_读取和写入二进制数据
读取和写入二进制数据Qt中载入和保存二进制数据的最简单方式是通过实例化一个 QFile 打开文件,然后通过QDataStream对象存取它。QDataStream 提供了一种与运行平台元关的存储格式,它不仅支持 List<T>和 QMap<K, T>等Qt容器类,还支持整型和双精度型等基本的 C++类,以及其他许多种 Qt数据类型,诸如 QByteArray、QFont、QImage、 QPìxmap、QString、QVariant。下面是如何在一个名为 facts.dat 的原创 2021-05-20 12:03:44 · 3084 阅读 · 0 评论 -
Qt4_字符串、字节数组和变量
字符串我们将从 QString开始。每一个图形用户界面(GUI) 程序都会用到字符串,不仅仅是为用户界面,更多的是为数据结构所用。 C++ 本身提供两种宇符串:传统的 C语言型的,以" \0",结尾的字符数组和 std::string类。与这两种字符串不同, QString 支持 16 位 Unicode 值。Unicode码以 ASCII 码和 Latin-1码为子集,具有它们常用的数字值。但由于 QString是 16位的;它可以表示数千种其他字符以表达世界上绝大多数的语言。当使用 QString时原创 2021-05-17 14:23:01 · 1639 阅读 · 0 评论 -
Qt4_通用算法
通用算法<QtAlgorithms>的头文件声明了在容器类上实现基本算法的一套全局模板函数。这些函数中的大部分都是在STL风格上的迭代器上工作的。STL 的<algorithm> 头文件提供了一套更为完整的通用算法。这些算法既可以在STL容器类上使用,也可以在 Qt 容器类上使用。如果STL的实现代码在所有平台上都可以得到,那么在没有对应的STL算法时,就没有理由不使用 STL 算法。这里将引入最重要的 Qt 算法。qFind()算法在容器类中查找一个特定的值。它接受一个"be原创 2021-05-11 17:28:57 · 293 阅读 · 0 评论 -
Qt4_关联容器
关联容器关联容器可以保存任意多个具有相同类型的项,且它们由一个键索引。 Qt 提供两个主要的关联容器类:QMap<K, T> 和 QHash<K, T>。QMap<K, T>是一个以升序键顺序存储键值对的数据结构,如图所示。这种排列使它可以提供良好的查找和插入性能以及键序的迭代。在内部,QMap<K, T>是作为一个跳越列表(skip-list)来实现执行的。在映射中插入项的一种简单方式是调用 insert():QMap<QString, in原创 2021-04-26 17:57:46 · 226 阅读 · 0 评论 -
Qt4_连续容器
连续容器QVector<T>是一个与数组相似的数据结构,它可以把项存储到内存中相临近的位置。向量与普通C++数组的区别在于:向量知道自己的大小并且可以被重新定义大小。在向量末尾添加额外的项是非常快速的,在向量前面或者中间插入则是耗时的。如果能预先知道需要使用多少项,则在定义向量时,就可以初始化向量的大小,并使用[ ]操作符为它的项赋值;否则,可以稍后重新定义向量的大小,或者在向量的末端增加项。指定向量初始大小QVector<double> vect(3);vect[0]原创 2021-04-23 16:22:16 · 360 阅读 · 0 评论 -
Qt4_容器类
容器类容器类通常是用于在内存中存储给定类型的许多项的模板类。 C++ 已经提供了很多容器,作为标准模板库(STL) 的一部分,它们都包含在标准的 C++ 库中。Qt 提供了属于自己的容器类,所以在编写Qt程序时,既可以使用。容器也可以使用Qt容器。 Qt 容器的主要优点是它们在所有的平台上在运行时都表现得一致,并且它们都是隐含共享的。隐含共享(implicit sharing),或者称为"写时复制",是一个能够把整个容器作为不需要太多运行成本的值来传递的最优化过程。Qt容器的另一个主要特征就是易于使用的原创 2021-04-23 11:35:54 · 179 阅读 · 0 评论 -
Qt4_实现自定义委托
实现自定义委托委托(delegate) 用来渲染和编辑视图中不同的项。在大多数情况下,视图中默认的委托已经足够了。如果想更好地控制有关项的显示,通常可以通过使用自定义模型很简单地实现我们所想要的:在 data() 重新实现中,我们可以处理Qt::FontRole、Qt:: TextAlignmentRole、Qt::TextColorRole、Qt::BackgroundColorRole,并且它们会被默认的委托使用。例如,在之前所显示的城市和汇率例子中,我们已经为了得到向右对齐的数字的效果处理了Qt:原创 2021-04-23 11:20:04 · 624 阅读 · 0 评论 -
Qt4_实现自定义模型
实现自定义模型Qt的预定义模型为数据的处理和查看提供了很好的方法。但是,有些数据源不能有效地和预定义模型一起工作,这时就需要创建自定义模型,以方便对底层数据源进行优化。在介绍如何创建自定义模型之前,让我们先看看在Qt模型/视图架构中的一些重点概念。在模型中,每一个数据元素都有一个模型索引和一套属性(attribute) ,称为角色 (role) ,这些角色可以保存任意值。前面部分中已看到过最常用的角色Qt::DisplayRole 和 Qt::EditRole。其他角色都是用来补充说明数据的(例如,Qt原创 2021-04-22 22:29:43 · 459 阅读 · 0 评论 -
Qt4_使用预定义模型
使用预定义模型Qt提供了几种可以在视图类中使用的预定义模型,见下表。Team Leaders我们从一个简单的对话框开始,用户可以使用它添加、删除和编辑一个 QStringList,其中每个字符串都代表一个团队领导。TeamLeadersDialog.h#ifndef TEAMLEADERSDIALOG_H#define TEAMLEADERSDIALOG_H#include <QDialog>class QDialogButtonBox;class QListView;原创 2021-04-22 15:02:56 · 268 阅读 · 0 评论 -
Qt4_使用项视图的简便类
使用项视图的简便类使用。的项视图中那些方便的子类通常要比定义一个自定义模型简单得多,并且姐果我们不需要由区分模型和视图所带来的好处时,这种方法也是比较合适的。Flowchart Symbol Picker演示了一个只读的QListWidget。先从一个允许用户在列表中选择流程图符号的简单对话框开始。每个项都由一个图标、一段文本和一个唯一的ID组成。FlowChartSymbolPicker.h#ifndef FLOWCHARTSYMBOLPICKER_H#define FLOWCHARTSYM原创 2021-04-22 14:22:39 · 220 阅读 · 0 评论 -
Qt4_项视图类
项视图类许多应用程序允许用户搜索、查看和编辑属于某个数据集中的一些个别项。这些数据可能保存在文件中、数据库中或者网络服务器上。处理像这样的数据集的标准方式是使用。的项视图。在早期的 Qt 版本中,项视图窗口部件总是由一个数据集的所有内容组装而成的。用户在这个窗口部件的数据上进行所有的查询和编辑操作,并且在某些情况下,对数据的改变还会被重新回写到数据源中。尽管这种方式很容易理解和使用,但是在使用非常大的数据集的时候,这种方式就不能很好地工作了,并且如果我们想在两个或者更多的窗口部件中显示同一个数据集的时候原创 2021-04-19 15:53:04 · 225 阅读 · 1 评论 -
Qt4_拖放
拖放拖放是在一个应用程序内或者多个应用程序之间传递信息的一种直观的现代操作方式。除了为剪贴板提供支持外,通常它还提供数据移动和复制的功能。使拖放生效拖放操作包括两个截然不同的动作:拖动和放下。Qt窗口部件可以作为拖动点(darg site) 、放下点(drop site) 或者同时作为拖动点和放下点。Text EditorText Editor 介绍了如何让一个Qt应用程序接受由另一个应用程序执行的一个拖动操作。该Qt应用程序是一个以 QTextEdit 作为中央窗口部件的主窗口程序。当用户从桌面原创 2021-04-19 14:26:03 · 260 阅读 · 0 评论 -
Qt4_有注解的地图程序
有注解的地图程序Cityscape应用程序显示了城市中的建筑物、街区和公园的虚拟地图,最为重要的那些建筑会用它们的名字加以标注。它可以让用户通过鼠标和键盘来移动和缩放地图。首先介绍Cityscape类,它提供了应用程序的主窗口。Cityscape.h#ifndef CITYSCAPE_H#define CITYSCAPE_H#include <QMainWindow>class QGraphicsScene;class CityView;class Cityscape :原创 2021-04-15 15:17:44 · 285 阅读 · 0 评论 -
Qt4_多文档界面
多文档界面在主窗口的中央区域能够提供多个文档的那些应用程序就称为多文档界面 (Multiple Document Interface, MDI) 应用程序,或者称为MDI 应用程序。在 Qt 中,通过把 QMdìArea类作为中央窗口部件,并且通过让每一个文挡窗口都成为这个 QMdìArea的子窗口部件,就可以创建一个多文档界面应用程序了。对于多文挡界面应用程序有一个惯例,就是为它提供一个 Wìndow 菜单,这个菜单中包含一些管理这些窗口以及这些窗口列表的命令。激活窗口会使用一个选择标记标识出来。用原创 2021-04-15 14:42:59 · 1486 阅读 · 0 评论