利用QSystemTrayIcon类来实现最小化托盘,并实现像QQ那样有消息闪烁图标的效果
但是程序运行到最后有个让我找了很久都没有找到的问题,就是当点击了图标的MessageBox()后,程序就自动退了了,并且exit with code 0
继续阅读 »
利用QSystemTrayIcon类来实现最小化托盘,并实现像QQ那样有消息闪烁图标的效果
但是程序运行到最后有个让我找了很久都没有找到的问题,就是当点击了图标的MessageBox()后,程序就自动退了了,并且exit with code 0
继续阅读 »
QSystemTrayIcon为应用程序在系统托盘中提供一个图标
关于系统托盘的介绍就节省了,但是并不是所有的系统都支持系统托盘,来检查一个系统是否支持系统托盘,使用静态函数QSystemTrayIcon::isSystemTrayAvailable()来检测来添加一个系统托盘入口,创建一个QSystemTrayIcon对象,调用setContexMenu()来为这个图标创建一个右键菜单,就像QQ上退出的那样的菜单。然后调用show()方法来使它在托盘区域显示,状态提示消息可以在任何时候使用showMessage()显示如果一个系统托盘在刚创建时候不可见,但是过会可见了,QSystemTrayIcon会自动在系统托盘添加一个应用程序的入口,前提是icon图标可见当用户点击了图标后,会发出信号activated()
继续阅读 »
在生成环境中,会经常碰到Mysql字符的设置问题,CU很多牛人都说过N次了,个人也总结下。
如果在应用开始阶段没有正确的设置字符集,在运行一段时间以后才发现存在不能满足要求需要调整,那么就需要进行字符集的修改。字符集的修改不能直接通过alter dataabase character set ***; 或者 alter table tablename character set ***; 命令进行,这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。
在笔者的数据库最为常用的是latin1、utf8,由于项目的整合,字符的要求也开始规范,统一为utf8,那么就需要把之前的latin1字符转换成才utf8格式,那样才不会出现乱码的情况。已有的记录的字符集调整,需要先将数据导出,经过适当的调整重新导入后才可完成。
继续阅读 »
进入run()函数后,新线程就开始运行,有自己的堆栈。
出了run()函数后,新建的线程就结束,并会发出信号,可以在另外一个线程中捕获,然后响应。、
currentThreadId()和 currentThread()分别会返回线程的ID号和线程对象指针。
最后在run()中调用exec()开始本线程的事件循环。
调用exit()或者quit()来退出线程。
QMutex加锁时候,其他的读和写都不能进行
继续阅读 »
图片是一种资源,而在Qt中,对于资源的使用是有其独特的方式的!
①:一般来说:资源在内存中是用资源对象树来表示的,该树在程序启动时创建。
②:而对于资源而言:我们都是需要先将其加入到这棵树中才能加载到内存中并被程序使用!!
③:而将一个图片资源放到程序的资源对象树中是用函数QResource::registerResource()来实现的。亦即:要将资源向这颗资源对象树进行注册,这样才对在系统中new创建这个资“叶子”。
继续阅读 »
可重入与线程安全
在Qt文档中,术语“可重入 ”与“线程安全 ”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。
继续阅读 »
Qt线程类
Qt 包含下面一些线程相关的类:
QThread 提供了开始一个新线程的方法
QThreadStorage 提供逐线程数据存储
QMutex 提供相互排斥的锁,或互斥量
QMutexLocker 是一个便利类,它可以自动对QMutex 加锁与解锁
QReadWriterLock 提供了一个可以同时读操作的锁
QReadLocker 与QWriteLocker 是便利类,它自动对QReadWriteLock 加锁与解锁
QSemaphore 提供了一个整型信号量,是互斥量的泛化
QWaitCondition 提供了一种方法,使得线程可以在被另外线程唤醒之前一直休眠。
继续阅读 »
Qt支持三种类型的信号-槽连接:
1,直接连接,当signal发射时,slot立即调用。此slot在发射signal的那个线程中被执行(不一定是接收对象生存的那个线程)
2,队列连接,当控制权回到对象属于的那个线程的事件循环时,slot被调用。此slot在接收对象生存的那个线程中被执行
3,自动连接(缺省),假如信号发射与接收者在同一个线程中,其行为如直接连接,否则,其行为如队列连接。
连接类型可能通过以向connect()传递参数来指定。注意的是,当发送者与接收者生存在不同的线程中,而事件循环正运行于接收者的线程中,使用直接连接是不安全的。同样的道理,调用生存在不同的线程中的对象的函数也是不是安全的。QObject::connect()本身是线程安全的。
继续阅读 »
近期评论