上一页 1 2 3 4 5 6 7 8 ··· 12 下一页
摘要: Qt中的信号量是由QSemaphore类提供的,信号量可以理解为对互斥量功能的扩展,互斥量只能锁定一次而信号量可以获取多次,它可以用来保护一定数量的同种资源。acquire()函数用于获取n个资源,当没有足够的资源时调用者将被阻塞直到有足够的可用资源。release(n)函数用于释放n个资源。 下面通过一个典型用例:生产者和消费者,来实现这二者之间的同步。整个工程就一个main.cpp,文件如下:#include <QtCore/QCoreApplication>#include <QSemaphore>#include <QThread>#include 阅读全文
posted @ 2012-10-15 20:12 venow 阅读(28012) 评论(0) 推荐(1) 编辑
摘要: 在Qt中使用剪贴板技术是非常简单的,直接使用QClipboard类就可以存取窗口系统的剪贴板。在Qt中是使用QMimeData类来表示剪贴板交换的数据,将一些常用的数据存入到剪贴板可以使用setText(),setImage()和setPixmap()函数。相对应的取数据可以使用text(),image()和pixmap()函数。 下面,通过一个简单的例子来说明这一点。从QWidget继承一个子类ClipboardWidget,该类的头文件clipboardwidget.h如下:#ifndef CLIPBOARDWIDGET_H#define CLIPBOARDWIDGET_H#incl... 阅读全文
posted @ 2012-10-15 19:47 venow 阅读(5956) 评论(1) 推荐(0) 编辑
摘要: Qt处理事件的第五种方式:"继承QApplication并重新实现notify()函数"。Qt调用QApplication来发送一个事件,重新实现notify()函数是在事件过滤器得到所有事件之前获得它们的唯一方法。事件过滤器使用更为便利。因为可以同时有多个事件过滤器。而notify()函数只有一个。 重新实现的QApplication类MyApplication的头文件myapplication.h如下:#ifndef MYAPPLICATION_H#define MYAPPLICATION_H#include <QApplication>#include & 阅读全文
posted @ 2012-10-11 20:30 venow 阅读(7953) 评论(0) 推荐(1) 编辑
摘要: Qt处理事件的第四种方式:"在QApplication中注册事件过滤器",如果一个事件过滤器被注册到程序中唯一的QApplication对象,应用程序中所有对象里的每一个事件都会在它们被送达其他事件事件过滤器之前,首先抵到这个eventFilter()函数。 在这里继承一个QWidget用来注册QApplication事件过滤器,MyWidget的头文件mywidget.h如下:#ifndef MYWIDGET_H#define MYWIDGET_H#include <QWidget>#include <QMouseEvent>class MyWid 阅读全文
posted @ 2012-10-11 20:00 venow 阅读(2289) 评论(0) 推荐(1) 编辑
摘要: Qt处理事件的第三种方式:"在QObject中注册事件过滤器",如果对象使用installEventFilter()函数注册了事件过滤器,目标对象中的所有事件将首先发给这个监视对象的eventFilter()函数。 mybutton.h文件如下:#ifndef MYBUTTON_H#define MYBUTTON_H#include <QPushButton>#include <QMouseEvent>class MyButton : public QPushButton{protected: bool event(QEvent *e);};#end 阅读全文
posted @ 2012-10-10 20:50 venow 阅读(6877) 评论(0) 推荐(0) 编辑
摘要: Qt处理事件的第二种方式:"重新实现QObject::event()函数",通过重新实现event()函数,可以在事件到达特定的事件处理器之前截获并处理他们。这种方法可以用来覆盖已定义事件的默认处理方式,也可以用来处理Qt中尚未定义特定事件处理器的事件。当重新实现event()函数时,如果不进行事件处理,则需要调用基类的event()函数。 mybutton.h的文件如下:#ifndef MYBUTTON_H#define MYBUTTON_H#include <QPushButton>#include <QMouseEvent>class MyBu 阅读全文
posted @ 2012-10-10 20:21 venow 阅读(2811) 评论(0) 推荐(1) 编辑
摘要: 从这章开始,我将简单实现Qt事件处理的五种方式,这五种方式的实现都是基于一个自定义的Button,我将它命名为MyButton。由于我是刚学Qt,有什么讲的不对的地方,请指正,不胜感激。 首先来看第一种事件处理:"重新实现特定的事件处理器",这种方式最简单,派生于一个组件,重新实现它的事件处理。这里我主要实现的是mousePressEvent、mouseReleaseEvent以及mouseMoveEvent这三个事件处理,而实现的方式都差不多,不同在于设置Button显示的文本。 mybutton.h的头文件如下:#ifndef MYBUTTON_H#define MYB 阅读全文
posted @ 2012-10-10 20:02 venow 阅读(11873) 评论(1) 推荐(0) 编辑
摘要: #include <QtDebug>#include <QFile>#include <QTextStream>#define _TIME_ qPrintable (QTime::currentTime ().toString ("hh:mm:ss:zzz"))void Log(QtMsgType type, const char* msg){ QString qstrText; switch (type) { case QtDebugMsg: qstrText = QString("%1: %2").arg(_TIM 阅读全文
posted @ 2012-10-09 14:38 venow 阅读(4258) 评论(1) 推荐(0) 编辑
摘要: 参考<<Effective C++>>一书中的条款10:"如果写了operator new就要同时写operatordelete",写了一个简易的内存池,说白了就是事先分配一块内存空间作为内存池,每次new对象的时候,直接从这里取内存,delete的时候将内存回收到内存池中,代码很简单,废话就不说了,直接看代码。#include "stdafx.h"#include <iostream>using namespace std;//内存池template<typename T> class pool{publ 阅读全文
posted @ 2012-10-08 19:31 venow 阅读(544) 评论(0) 推荐(0) 编辑
摘要: 一直想写一篇有关C++内存布局的文章,结合编译器VS2010来探讨C++对象模型在内存中的表现形式,主要是自己看《深度探索C++对象模型》太枯燥了,而且这本书也是较早出的,讨论的编译器都差不多过时了,所以才有这个想法,希望看官勿喷。废话少说,let's go...没有虚函数的单继承 下面,我们假设有如下所示的单继承关系: 请注意,在这个继承关系中,父类,子类,都有自己的成员变量。而子类仅仅覆盖了父类的f()函数。 源代码如下:class Base{public: void f(){ cout<<"Base::f()"<<endl; } voi 阅读全文
posted @ 2012-09-11 20:07 venow 阅读(3931) 评论(4) 推荐(1) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 12 下一页