
Qt学习笔记
文章平均质量分 85
海的神话
每天进步一点点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
qml属性绑定问题
最近项目中遇到qml属性绑定相关的两个问题:改变object对象的属性,qml绑定的相关属性没有改变 改变绑定属性,导致绑定关系被打断上面两个问题说的有点不清楚,接下来看代码详解Window{id:mainWndvisible:truewidth:640height:480title:qsTr("HelloWorld")propertyvarrobotInfo:{"name":"robot1","light_s...原创 2020-09-17 19:50:26 · 724 阅读 · 0 评论 -
QList 和std::list的比较
QListQList 是一个Qt通用容器类。它存储一序列的值,并且提供基于索引的数据访问方法和快速的插入和删除操作。QList, QLinkedList,和 QVector提供类似的功能,这里进行几点概述:1. 大多数情况下,最好使用QList。它基于索引的API比QLinkedList基于迭代器的API方便。它存储数据的方式也使得它比QVector存取数据的数度快。而且它原创 2013-09-16 21:20:18 · 9114 阅读 · 0 评论 -
部件之间图标拖拽
又到周末了,尝试实现一个图标拖拽的小程序;主要实现的功能有:1.两个部件的图标拖动转移2.可以切换图标查看模式,有大图标和小图标模式两种3.可以删除图标,添加也应该不难,所以就没实现。4.可以框选多个图标5.改变部件大小可以自动重新布局图标这里初始化左边有十几个图标,右边的部件是空的。主窗口class MainWindow:public QMainWindow原创 2013-09-15 11:26:35 · 1840 阅读 · 0 评论 -
QVector 和vector的比较
QVector和vector的比较:Qvector默认使用隐式共享,可以用setSharable改变其隐式共享。使用non-const操作和函数将引起深拷贝。at()比operator[](),快,因为它不进行深拷贝.Qvector取值都会检查越界问题。看看简单的例子:QVectorint> vecA;QVectorint> vecB;vecA.push_back(1);原创 2013-09-15 20:22:59 · 12321 阅读 · 0 评论 -
QSettings保存程序设置
今天看了一些QSettings的简单用法,可以用来保存程序的设置,使得程序每次启动都可以显示上次关闭时的状态。我这里实现了一个简单的文本编辑窗口,可以设置文本的字体,字体的颜色和背景色。每次关闭程序都保存程序的几何大小,位置和文本以及文本所设置的格式,方便启动程序后继续编辑。文本编辑窗口TextEditor继承了QTextEdit,主要实现文本编辑和文本格式设置。保存文本信息时直接用的ht原创 2013-09-05 22:15:45 · 2220 阅读 · 0 评论 -
文件保存树形结构数据
本文主要研究了一下如何把树形结构的数据保存到文件并读取出来。为了更形象说明用了一个界面程序显示,程序用了model/view框架。数据类DataItem 就是保存在树形结构的基本数据。其最重要的保存数据的函数是SerialzeDataclass DataItem{public: DataItem(int id = 100,QString name = "root"); ~原创 2013-09-04 00:22:12 · 4451 阅读 · 1 评论 -
Qt实现QQ好友下拉列表
偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能: 1.可以删除列表中图标 2.可以像qq一样的,把某个分组下的图标转移到另外的分组 3.添加分组代码里写了注释了,这里就不重复了,下面直接看代码吧。自定义的数据模型ListModel继承了QAbstractListModel,主要是实现要显示的数据结构。用的是mo原创 2013-08-24 20:31:12 · 6201 阅读 · 0 评论 -
Qt同步线程
Qt同步线程我们知道,多线程有的时候是很有用的,但是在访问一些公共的资源或者数据时,需要进行同步,否则会使数据遭到破坏或者获取的值不正确。Qt提供了一些类来实现线程的同步,如QMutex,QMutexLocker,QReadWriteLock,QReadLocker,QWriteLocker,QSemaphore和QWaitCondition。下面我们分别来看它们的用法:QMutex首原创 2013-08-11 00:55:39 · 5173 阅读 · 0 评论 -
Qt新建线程的方法
看了不少Qt线程的东西,下面总结一下Qt新建一个线程的方法。一、继承QThread继承QThread,这应该是最常用的方法了。我们可以通过重写虚函数void QThread::run ()实现我们自己想做的操作,实现新建线程的目的。前面已经介绍了Qthread,这里就不重复了。这种方法,我们每一次要新建一个线程都需要继承Qthread,实现一个新的类,有点不太方便。但是相对于Qrunn原创 2013-08-11 13:01:44 · 9893 阅读 · 1 评论 -
QLinkedList和std::forward_list
forward_listforward_list是C++11版本才有的。forward_list被实现为单链表,而list是一个双向链表,所以forward_list要比list高效一些。forward_list设计的时候就是追求效率的,跟我们自己写的C格式的单链表一样的高效。考虑到效率问题,forward_list没有size成员函数。由于它本质是一个链表,有一个size成员会耗费常量的原创 2013-09-17 21:23:20 · 1721 阅读 · 0 评论 -
自定义类似QMutexLocker的CMutexLocker
最近做项目遇到一个需求,有一个buttonSlot()执行要耗点时间,为了防止用户无限制的乱点出现问题,考虑加一个互斥锁,使得每次执行完后才允许执行下一次。大概意思是://QMutex m_mutex;是window类的成员变量void window::buttonSlot(){ if(m_mutex.islock()) { return ;原创 2013-12-24 10:47:15 · 1304 阅读 · 1 评论 -
Qt开发基础
1.Qt基础1.1Qt主程序 Qt主程序主要有两种,一是Qt控制台程序,而是Qt GUI应用程序。 1.1.1Qt控制台程序Qt控制台程序很少用到,这里仅仅简单了解。 int main(int argc,char *argv[]){ QCoreApplication a(argc, argv); cout"helloworld"原创 2013-12-27 15:55:03 · 1593 阅读 · 0 评论 -
QML自定义模态窗口
最近接手的新客户端项目是用QML做的界面。既然是客户端,就需要用到各种弹窗,自然少不了自定义各种样式的弹窗。模态窗口是最常用的弹窗之一,以下是我自定义的两种模态窗口实现。第一种是基于Window,第二种三基于Rectangle,而我的项目代码中不知道什么原因大部分都是用了Rectangle实现。//基于Window//WindowTemplate.qmlWindow { i...原创 2019-10-04 22:20:29 · 3840 阅读 · 1 评论 -
QHostInfo检测网络
平时,我们检测网络是否连接,一般都是用ping命令。实际开发中,经常也需要检测网络状态。最近之项目过程中就需要实现这一的功能,在网络断开时给出相应的用户提示。QHostInfo给我们提供了一个方便的接口,实现这一的功能。话不多说,先上一段代码demoNetWorkTest *NetWorkTest::GetInstance(){ static NetWorkTest ins...原创 2019-10-03 15:46:54 · 963 阅读 · 0 评论 -
QTableWidget排序问题
今天写代码,发现Qt4中QTableWidget显示查询结果数据时存在一个问题,具体原因不知道是用法不对还是QTableWidget本身存在的bug。现象如下:1. 查询,能正常显示查询结果2. 点击表头排序3. 再一次进行查询,发现某写列内容为空构造函数代码:pTable = new QTableWidge原创 2015-05-15 16:33:07 · 14306 阅读 · 3 评论 -
Xml生成word 技巧一
Xml生成word 技巧一Xml生成word文档的几个基本步骤,就是先定义xml,再生成xml框架。经过一天的折腾,发现其实可以不用生成xsd文件,只要把xml文件另存为word就可以了。还是通过昨天的例子说明。1. xml另存为word文档log.doc2.打开log.doc就可以看到绑定了框架的文档,打开右边任务窗口可以看到 3.可以把文档内容删掉,重新设原创 2015-01-20 19:56:17 · 1862 阅读 · 1 评论 -
通过xml生成word文档
Xml生成word总结 使用xml生成word的基本步骤在《使用xslt转化xml数据形成word文档导出.doc》中说明比较清楚了。但是其中的细节并未说到,因此自己折腾了两天总算成功了。以下是我在使用过程中碰到的问题要点:必须使用word 2003.1.下面通过例子演示:简单 的xml以及对应的xml框架 2.分别创建03版本的word文档lo原创 2015-01-20 01:18:53 · 9227 阅读 · 0 评论 -
文本导出到pdf文件
程序中数据导出是经常有的需求,今天学习把文本导出到pdf文件。主要是用QPrinter,QPainterTextEditToPdf::TextEditToPdf(QWidget *parent, Qt::WFlags flags) : QDialog(parent, flags){ ui.setupUi(this); int ret = connect(ui.m_pExportBtn,原创 2014-07-08 22:15:24 · 1658 阅读 · 0 评论 -
QTableWidget 导出到表格
跳槽到了新的公司,开始苦逼的出差现场开发,接触到了新的应用。有很多应用需要将Table导出成表格,可以把table导出成csv格式的文件。跟大伙分享一下;lass TableToExcle : public QDialog{ Q_OBJECTpublic: TableToExcle(QWidget *parent = 0, Qt::WFlags flags = 0); ~Table原创 2014-07-07 22:34:42 · 5502 阅读 · 2 评论 -
QtSoap调用Web Service
今天学习如何用QtSoap访问Web Service服务。这里调用的是查询QQ在线状态的服务qqOnlineWebService。调用的几个步骤:1.创建QtSoapMessage对象 message;2.message调用setMethod设置调用的服务3.message调用addMethodArgument设置参数4.创建QtSoapHttpTransport *m_pHtt原创 2014-02-23 13:01:43 · 4988 阅读 · 1 评论 -
QThread 与 QObject的关系
Threads and QObjectsQThread 继承QObject.。它可以发送started和finished信号,也提供了一些slot函数。QObject.可以用于多线程,可以发送信号调用存在于其他线程的slot函数,也可以postevent给其他线程中的对象。之所以可以这样做,是因为每个线程都有自己的事件循环。在进行下面的讲解之前,应该了解的重要的一点是:QThrea原创 2013-08-04 17:07:06 · 9783 阅读 · 2 评论 -
Qt线程QThread简析
QThread实例代表一个线程,我们可以重新实现QThread::run(),要新建一个线程,我们应该先继承QThread并重新实现run()函数。需要注意的是:1.必须在创建QThread对象之前创建 QApplication (或QCoreApplication)对象。2. QCoreApplication::exec() 必须只能从主线程调用,不能从QThread线程调用。原创 2013-07-28 00:54:20 · 17922 阅读 · 1 评论 -
Qt容器类
Container ClassesIntroductionQt库提供了一组基于模板的一般化的容器类。这些容器可以存储指定的类型的元素。例如,如果你需要一个可变大小的Qstring数组,可以用QVectorQString>.。这些容器比STL容器更轻更安全更容易使用。如果你不熟悉STL或者更喜欢以Qt的方式做事,你可以用这些类取代STL类。这些类是隐式共享的,它们都是可重入,它们进行翻译 2013-07-04 23:45:12 · 2516 阅读 · 0 评论 -
QUdpSocket 简单用法
UDP是无连接的不可靠的传输协议,可以用在可靠传输不是很重要的情况下使用。 QUdpSocket是QAbstractSocket 的子类,它们都继承了QIODevice。所以可以用QUdpSocket进行发送接收数据。它和QTcpSocket最大的区别也就是,发送数据之前不需要建立连接。以下简单例子,演示了用QUdpSocket如何实现客户端和服务端的通信。服务端代码:class UDPS原创 2013-05-29 00:01:26 · 7437 阅读 · 0 评论 -
QTabWidget 实现类似QQ聊天窗口
新版本的QQ聊天窗口可以实现拖动,分离出新的窗口。浏览器等软件也可以实现类似操作。所以心血来潮想用Qt实现类似的功能。想用QTabWidget直接实现是很难的,仔细阅读源码,发现QTabWidget内部是由QStackedWidget和QTabBar组合实现的。所以很自然的想到,只要继承QTabBar的子类重新实现QTabBar的void mousePressEvent (QMouseEvent原创 2013-05-29 01:05:45 · 4152 阅读 · 3 评论 -
QTcpServer简单用法
我们都知道TCP是面向流的,连接的可靠传输协议。QTcpServer就是基于TCP协议的服务端。它调用listen() 方法进行监听客户端的连接,建立连接之后便可以进行通信。以下是简单的demo。服务器代码class TCPServer: public QObject{ Q_OBJECTpublic: TCPServer(QObject *parent = NULL); ~TCP原创 2013-05-27 22:03:49 · 2157 阅读 · 0 评论 -
QApplication
Qt中最重要的类之一QApplication类,它管理图形用户界面应用程序的控制流和主要设置。让我们来看看简单的程序。看看是怎么初始化的。int main(int argc,char *argv[]){ QApplication a(argc, argv); AppplicationDemo w; w.show();原创 2013-03-31 17:56:13 · 3874 阅读 · 0 评论 -
Qt的相关Pointer(4)-------QSharedDataPointer
QSharedDataPointerQSharedDataPointer可以指向一个隐式共享类对象。QSharedDataPointer你可以很容易的实现自己的隐式共享类,QSharedDataPointer实现了线程安全的引用计数,从而保证了你自己写的可重入的隐式共享类不会因为加入QSharedDataPointer而变得不可重入。隐式共享应用在很多Qt类中,实现了速率和内存效率的有原创 2013-01-14 20:58:28 · 4096 阅读 · 0 评论 -
可重入和线程安全简单介绍
可重入和线程安全可重入和线程安全这两个术语,经常出现在计算机编程中,用于指明类和函数在多线程程序中的使用。可重入:若一个程序或子程序可以“安全的被并行执行(Parallel computing)”,则称其为可重入(reentrant或re-entrant)的。若一个函数是可重入的,则该函数:1、不能含有静态(全局)非常量数据。2、不能返回静态(全局)非常量数据的地址。3、只原创 2013-01-12 21:28:17 · 1076 阅读 · 0 评论 -
Qt的相关Pointer(2)-------QScopedPointer
QScopedPointerScopedPointerQScopedPointer模版类可以指向一个动态分配内存的对象,而且可以通过调用自身的析构函数删除其所指向的对象。用C++的程序员都知道,人为的管理在堆上动态分配内存的对象是比较麻烦而且也很容易引发错误的,常见问题的就是会引发内存泄漏又难以维护。QScopedPointer作为一个小而实用的工具类,它通过基于堆栈的内存实现对于在堆原创 2013-01-08 20:43:34 · 4160 阅读 · 0 评论 -
Qt的相关Pointer(1)-----QPointer
QPointerQPointer类是一个模版类,是为QObject提供的一种监视指针。指针声明:QPointer p ,p的操作跟普通的C++指针相似,但与C++指针最大的不同就是,当它引用的对象被销毁时指针p会自动为0。而不是像C++指针会变成野指针。当你需要一个指针p引用别的对象A,而这个对象A在别地方可能一不小心被销毁了,而p还在指向对象。这种情况下,QPointer类型的指针将变得原创 2013-01-06 20:28:58 · 1885 阅读 · 0 评论 -
Qt写xml文件
Qt有两种方式可以写xml文件,一是用QxmlStreamWriter。下面看看简单用法void XmlHandle::writeXmlFileByStreamWriter(){ QString fileName = "book.xml"; QFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { return;原创 2013-06-01 14:19:27 · 2315 阅读 · 0 评论 -
列表标题栏添加CheckBox
前段时间项目上的要求,要实现一个列表(见下图1)。类似网页上的列表,可以通过选中标题栏的复选框,实现全选或者全不选的功能。但是看了很久,都没看到Qt哪个方法可以实现在标题栏添加控件。 图1要实现这样的效果,也许我们首先想到的,就是直接生成一个CheckBox,用setGeometr原创 2013-06-22 15:01:03 · 2692 阅读 · 0 评论 -
The Meta-Object System
The Meta-Object SystemQt元对象系统为对象之间的交互提供了信号与槽机制,运行时信息和动态属性系统。元对象系统基于三件事:1. Qobject类作为所有要利用元对象系统的基类。2. 在类的private段声明Q_OBJECT 宏,以可以使用元对象特性,例如动态属性,信号与槽。3. 元对象编译器为Qobject子类提供了必要的翻译 2013-06-23 17:39:06 · 967 阅读 · 0 评论 -
Qt国际化相关类
QTextCodecQTextCodec为文本编码之间提供转换。Qt用Unicode 来存储,绘制和操作字符串。在很多情况下你可能希望操作不同编码的数据。例如,大部分日本文档是以Shift-JIS或 ISO 2022-JP进行存储,然而俄国用户的文档是以KOI8-R或 Windows-1251编码的。Qt提供一组QtextCodec类来实现非Unicode 和Unicode 格翻译 2013-06-29 14:45:04 · 1530 阅读 · 0 评论 -
Qt实现不同Treewidget之间拖拽
拖拽是编程中经常要用到的,我这里主要是实习了Treewidget之间直接拖拽Item,按下Ctrl键的话是copy,不按Ctrl则是Move。以下是实现代码class TreeItemMimeData:public QMimeData{ Q_OBJECTpublic: TreeItemMimeData():QMimeData() { m_pDragItem = NULL;原创 2013-07-14 02:04:55 · 6728 阅读 · 3 评论 -
Qt国际化
Internationalization with Qt应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程。Relevant Qt Classes andAPIs以下的类支持Qt的国际化。QTextCodecQTextDecoderQTextEncoderQTranslator翻译 2013-06-28 00:24:25 · 2537 阅读 · 0 评论 -
Qt状态机框架
The State Machine Framework状态机框架提供了用于创建和执行状态图的类。概念和符号是基于Harel的Statecharts: A visual formalism for complex systems,它也是UML状态图的基础。状态机执行的语义是基于State Chart XML (SCXML).的。状态图提供了图解了系统对于刺激的反应的建模。这是通过定义系统翻译 2013-07-13 02:07:44 · 3534 阅读 · 1 评论 -
Qt事件系统
The Event System在Qt中,事件是继承了虚拟类QEvent的对象,它代表了程序所发生的事情或者程序需要知道的一个外部活动的结果。事件可以被任意 QObject子类的实例接收和处理,是与widgets密切相关。本文描述了在一个典型的程序中事件是如何被传送和处理的。How Events are Delivered当发生一个事件,Qt通过构造一个适当的 QEvent子类的实例来翻译 2013-07-10 20:55:35 · 1566 阅读 · 0 评论 -
信号与槽
Signals & Slots信号与槽用于对象之间的通信。信号与槽机制是Qt的核心特性和区别于其他框架的特性。Introduction在GUI程序中,当我们改变一个widget,经常需要其他的widget得到通知。更普遍的是,我们需要任意的对象可以与另外的对象进行通信。例如,一个用户点击关闭按钮,我们可以需要windows的close()函数被调用。旧的工具包通过回调函数实现这种通翻译 2013-06-25 01:40:06 · 2244 阅读 · 0 评论