QT转载
seanyxie
谢思源的个人博客
展开
-
QT 对话框添加背景图片的方法
1. QPalette的方法#include #include int main(int argc, char *argv[]){ QApplication app(argc,argv); QFrame *frame = new QFrame; frame->resize(400,700); QPixmap pixmap("images/frame.png"); QPalette palette; palette.setBrush(frame->backgroundR转载 2010-08-09 20:19:00 · 12022 阅读 · 7 评论 -
QT让一个图片随窗体缩放
<br />下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下面的代码中可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。<br />头文件: ImageWidget.hpp<br />Quote:<br />#ifndef IMAGEWIDGET_HPP<br />#define IMAGEWIDGET_HPP<br />#include <QtCore><br />#include <QtGui><br />clas转载 2010-09-24 01:09:00 · 5063 阅读 · 5 评论 -
QT Phonon详解
<br />前言 <br />Phonon嚴格來說其實非為Qt的library,Phonon原本就是KDE 4的開放原始碼多媒體API,後來與Qt合併與開發,所以簡單來說就是Qt使用Phonon這個多媒體框架來提供一般影音多媒體檔案的播放,而這些影音多媒體來源可以是檔案、網路串流或是指到一個檔案的QUrl。<br />Phonon是一個跨平台多媒體框架,能夠在Qt應用程式中使用與播放影音多媒體內容。<br /> <br />[編輯]Phonon的架構 <br />整體來說,Phonon的架構只需要記住以下的转载 2010-10-02 01:06:00 · 4775 阅读 · 0 评论 -
QT事件过滤器
<br />Qt事件模型一个真正强大的特色是一个QObject 的实例能够管理另一个QObject 实例的事件。 <br /><br />让我们试着设想已经有了一个CustomerInfoDialog的小部件。CustomerInfoDialog 包含一系列QLineEdit. 现在,我们想用空格键来代替Tab,使焦点在这些QLineEdit间切换。 <br /><br />一个解决的方法是子类化QLineEdit,重新实现keyPressEvent(),并在keyPressEvent()里调用focusN转载 2010-10-09 23:28:00 · 6503 阅读 · 1 评论 -
QT下的几种透明效果
1.窗口整体透明,但是窗体上的控件不透明。 通过设置窗体的背景色来实现,将背景色设置为全透。QPalette pal = palette(); <br />pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); <br />setPalette(pal); 试验效果: 窗体标题栏不透明; 窗体客户区上的控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。 另外从网上看到的方法:set转载 2010-10-10 00:38:00 · 2630 阅读 · 0 评论 -
图形视图框架(The QGraphics View Framework)
<br />图形视图提供了一个外表(surface)来实现大量的客户所做的2D图形项的管理和相互的结合;一个视图窗口部件来使这些项可视化,并支持缩放和旋转。<br />该框架包括一个事件传播体系,可以使得场景中的项的交叉可以达到双精度的精确控制。其中的项可以处理事件、鼠标按压、移动、释放和双击事件,它们也可以追踪鼠标的移动。<br />图形视图使用一个BSP(二进制空间分区Binary Space Partitioning)树来提供快速的项发现,正因为如此,它可以使巨大的场景实时地可视化,即便它有上百万个项转载 2010-10-12 22:54:00 · 3387 阅读 · 0 评论 -
Qt中各个widget前后位置的设置
<br />关于Qt中各个widget窗口的前后位置是如何定义的<br />在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常用的QWidget体系,而另外一个则是QGraphicsWidget体系。<br /> ①:在常用的QWidget体系中,设置前后位置是主要是用raise(),underStack(),hide()函数。<br /> 理论为:在Qt中每个widget窗口都维持着自己的一个创建栈(widget's stack.),栈里边存放的是该窗口所有子widget窗转载 2010-10-25 23:44:00 · 4216 阅读 · 0 评论 -
Graphics View 坐标系统
<br />Graphics View基于笛卡尔坐标系。item在场景中的位置与几何形状通过x,y坐标表示。当使用未经变形的视图来观察场景时,场景中的一个单位等于屏幕上的一个像素。在Graphics View中有三个有效的坐标系统:Item坐标系,场景坐标系,视图坐标系。为了简化你的实现,Graphics View提供了方便的函数,允许三个坐标系之间相互映射。<br />当渲染时,Graphics View的场景坐标对应于QPainter的逻辑坐标,视图坐标与设备坐标相同。<br /><br />Item坐转载 2010-11-03 09:42:00 · 3234 阅读 · 2 评论 -
Qt4怎样设置应用程序的图标-windows平台
<br />,通过搜索Qt Assistant,发现有如下说明:<br />Setting the Application Icon on Windows<br /><br />First, create an ICO format bitmap file that contains the icon image. This can be done with e.g. Microsoft Visual C++: Select File|New, then select the File tab in the转载 2010-11-09 15:20:00 · 2009 阅读 · 0 评论 -
QTimer,QSound,QWMatrix使用
<br />QSound继承自QObject类,用于访问平台的音频工具。在GUI应用程序中Qt提供了一般绝大数的音频操作:为用户异步地播放声音文件。用一个单一的调用就可以完成这样的一件事:<br /> QSound::play("mysounds/bells.wav");<br />当建立一个声音文件对象,以后再进行播放的时候,提供了第二个API:<br /> QSound bells("mysounds/bells.wav");<br /> bells.play();<br />第二种模式相对第一种模式,转载 2010-11-09 17:52:00 · 3392 阅读 · 0 评论 -
Qt之美(一) D指针/私有实现
<br /><br />相信不少刚开始阅读Qt源代码的朋友在看到其中的Private类和诸如Q_D、Q_Q等宏时都会思考,为什么Qt要用这样一个设计模式呢?这样一段增加了不少复杂度的代码,到底有多大的好处呢?简单的说,这样的好处在于保证代码的二进制兼容性。<br />什么是二进制兼容性?大名鼎鼎的KDE项目是这样介绍的:一个库是二进制兼容的,如果一个程序和某个库的某个版本动态链接,并且不需要重新编译,即可在安装有该库较新版本的环境中运行。为什么要保证二进制兼容性?如果不能保证库的二进制兼容性,就意味着每次发转载 2011-01-06 13:07:00 · 2555 阅读 · 1 评论 -
Qt之美(三)隐式数据共享
<br /><br />为了最大化资源使用,和最小化数据拷贝,Qt在很多类中用到了隐式数据共享,以便数据仅在被写入时才被拷贝。该机制也被称为flyweight模式。<br />让我们以QByteArray为例,看看其是如何实现的。其内部使用一个名为Data的私有结构体来追踪共享的数据:<br /> struct Data { QBasicAtomicInt ref; // 引用计数器,对其的操作是原子的 int alloc; // 已分配的空间大小 int size; // 数据的实际大小转载 2011-01-06 13:12:00 · 4676 阅读 · 0 评论 -
QT多线程
<br />Qt线程类 <br />Qt 包含下面一些线程相关的类:<br />QThread 提供了开始一个新线程的方法<br />QThreadStorage 提供逐线程数据存储<br />QMutex 提供相互排斥的锁,或互斥量<br />QMutexLocker 是一个便利类,它可以自动对QMutex 加锁与解锁<br />QReadWriterLock 提供了一个可以同时读操作的锁<br />QReadLocker 与QWriteLocker 是便利类,它自动对QReadWriteLock 加转载 2010-11-11 00:12:00 · 2618 阅读 · 0 评论 -
Qt之美(二)元对象
<br /><br />除了D指针,Qt中另一个很有意思的部分就是Q_OBJECT宏了。该宏提供了对元对象的访问,使得能够使用比如信号和槽等QObject的更多特性。元对象提供了诸如类名、属性和方法等的信息,也被称为“反射”。<br /><br />通过使用QMetaObject,我们能够用如下代码显示一些类的信息:<br /> QObject obj; const QMetaObject *metaObj = obj.metaObject(); qDebug() << "class name: " <转载 2011-01-06 13:10:00 · 2848 阅读 · 0 评论 -
QT多线程续
<br />可重入与线程安全<br />在Qt文档中,术语“可重入 ”与“线程安全 ”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。<br />大多数c++类天生就是可重入的,因为它们典型地仅仅引用成员数据。任何线程可以在类的一个实例上调用这样的成员函数,只要没有别的线程在同一个实例上调用这个成员函数。举例来讲,下面的Counter 类是可重转载 2010-11-11 00:13:00 · 1843 阅读 · 0 评论 -
Qt正则表达式
引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb'转载 2011-09-09 15:37:25 · 2586 阅读 · 0 评论 -
QSignalMapper类的用法
QSignalMapper这个类并不是个新鲜概念, 早在Qt2里就已经存在, 而且它的功能也是始终如一。 不过由于宣传力度不够(例子里涉及到它的很少)了解这个类人可能还不是很多, 所以特此撰文介绍此类的功能和用法。简单的理解,可以把SignalMapper这个类看成是信号的翻译和转发器, 它可以把一个无参数的信号翻译成带int参数、QString参数、QObject*参数或者QWidget*参转载 2012-06-25 12:35:30 · 2782 阅读 · 3 评论 -
Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
在Qt中设置widget背景颜色或者图片方法很多种:重写paintEvent() , 调色板QPalette , 样式表setStyleSheet等等。 但是各种方法都有其注意事项,如果不注意则很容易陷入麻烦中。1:setStyleSheet() 这个函数我一直很喜欢使用,因为只要写一句就可以实现效果,比其他方法都简单,但是其却有一个很值得注意的地方,也就是这个地方让我大吃苦头。 亦即:①:该函数只能用于设置有父窗口的子窗口的背景!如果一个窗口没有子窗口,则无法使用该函数来设置背转载 2010-08-17 17:10:00 · 24062 阅读 · 6 评论 -
QT中不规则窗体和部件的实现
<br />Qt中不规则窗体和部件的实现,不管是窗体还是部件,都是从QWidget派生而来的,所以它们的原理是一样的,都是设置部件的背景色或者按钮图标等为一个图像A,然后设置此部件的掩码为另一个图像B,这个图像B经过位与运算后,得到不规则的图像,这就行了下面,是一个简单的示例:<br />form.h:引用 <br />#ifndef FORM_H<br />#define FORM_H<br /><br />#include <QtGui/QWidget><br /><br />class Form转载 2010-09-24 01:04:00 · 2681 阅读 · 0 评论 -
QT容器类
<br />Sequentail Containers<br />QVector<T> array-like data structure(在尾部插入数据时效率很高,而在中间和头部插入数据时开销很大)。<br />QVector提供了[]运算符<br />QVector可以用<<运算符代替append()函数。<br />QVector中的基本类型及指针被初始化为0。<br />QLinkedList<T><br />QLinkedList不提供[]运算符,所以必须通过迭代器来对其进行遍历。<br />QL转载 2010-09-02 13:14:00 · 2716 阅读 · 0 评论 -
QButtonGroup的简单应用
<br />QButtonGroup的简单应用<br />所有代码都是在qt3.3.8+fedora8下运行的。<br />QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。<br />按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。<br />头文件: <qbuttongroup.h><br />主要属性和函数:<br />int id:<br />按钮的标转载 2010-08-31 01:44:00 · 6690 阅读 · 0 评论 -
QT QProgress的使用
所谓 IO 其实不过是与其他设备之间的数据交互。在 Linux 上这个概念或许会更加清楚一些。Linux 把所有设备都看作是一种文件,因此所有的 IO 都归结到对文件的数据交互。同样,与其他进程之间也存在着数据交互,这就是进程间交互。 所谓 IO 其实不过是与其他设备之间的数据交互。在 Linux 上这个概念或许会更加清楚一些。Linux 把所有设备都看作是一种文件,因此所有的 IO 都归结到对文件的数据交互。同样,与其他进程之间也存在着数据交互,这就是进程间交互。 为什么需要进程间交互呢?Qt 虽然是转载 2010-08-09 19:54:00 · 6233 阅读 · 0 评论 -
Qt下的模态和非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。 所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和 该对话框进行交互,也可以选择同应用程序的其他窗口交互。在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对转载 2010-08-14 11:30:00 · 7537 阅读 · 1 评论 -
QTableWidget中checkBox如何判断复选框是否被选中
在QTableWidget中会经常用的checkBox,但是如何判断复选框是否被选中呢,方法是利用QTableWidget::cellChanged()函数,检查单元格内容的变化,然后连接此信号,在槽函数中检测checkBox的状态,代码如下:查看源代码 打印帮助01 QTableWid转载 2010-08-14 11:14:00 · 10487 阅读 · 0 评论 -
QT的父子Widget之间消息的传递
以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中。毕竟:click的是子widget,其遮挡住了父widget,从而父widget接收不到这个事件。然而事实真的是这个样子吗? 我做了一个测试: 在一个QWidget上建了一个QLabel。而后实现父QWidget的mousePressEvent(), 然后跟一下发现:当转载 2010-08-20 00:20:00 · 2169 阅读 · 0 评论 -
QTextEdit 外观属性设置
一、给QTextEdit添加背景图片,有下面两种方法:QTextEdit* iEdit = new QTextEdit();1:使用样式表: iEdit->setStyleSheet("background-image:url(:/bmp/DSCN1604.JPG)"); 注意:在url()括号中首先开始的 “:”冒号一定不能搞错,否则就显示不出来。2:使用html iEdit->setHtml(""); 注意:此时就不需要像上边那样用“:”冒号了,直接用相对路径就可以了。(No转载 2010-08-17 16:00:00 · 6837 阅读 · 0 评论 -
QT 绘图设备和Graphics View Framework
绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和QPicture。其中,QPixmap专门为图像在屏幕上的显示做了优化,而QBitmap是QPixmap的一个子类,它的色深限定为1,你可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。QImage专门为图像的像素级访问做了优化。QPicture则可以记录和重现QPainter的各条命令。下面我们将分两部分介绍这四种绘图设备。Q转载 2010-08-19 22:17:00 · 6114 阅读 · 0 评论 -
QT 添加启动画面
许多应用程序在启动时显示一个画面。在程序启动很慢时,程序员用这种方法可以让启动时间感觉不那么长,还有用这个画面满足市场的一些要求。给Qt应用程序加一个启动画面很简单,需要使用的类是QSplashScreen。在窗口没有显示之前,QSplashScreen显示一个图片,他还可以在图片上显示文字信息提示用户当前程序初始化的进度。一般情况下,启动画面代码在main()函数中,加在调用QApplication::exec()之前。下面的一个程序的main()函数使用QSplashScreen显示一个启动画面,同时显转载 2010-08-17 00:38:00 · 5007 阅读 · 4 评论 -
QT容器之遍历器和隐式数据共享
前面说过,Qt容器类提供了两种遍历器:Java风格的和STL风格的。前者比较容易使用,后者则可以用在一些通过算法中,功能比较强大。 对于每一个容器类,都有与之相对应的遍历器:只读遍历器和读写遍历器。只读遍历器有QVectorIterator,QLinkedListIterator和QListIterator三种;读写遍历器同样也有三种,只不过名字中具有一个Mutable,即QMutableVectorIterator,QMutableLinkedListIterator和QMutableListIterat转载 2010-08-20 22:36:00 · 2474 阅读 · 0 评论 -
QT 容器类之关联存储容器
今天我们来说说Qt容器类中的关联存储容器。所谓关联存储容器,就是容器中存储的一般是二元组,而不是单个的对象。二元组一般表述为,也就是“键-值对”。 首先,我们看看数组的概念。数组可以看成是一种形式的键-值对,它的Key只能是int,而值的类型是Object,也就是任意类型(注意,这里我们只是说数组可以是任意类型,这个Object并不必须是一个对象)。现在我们扩展数组的概念,把Key也做成任意类型的,而不仅仅是int,这样就是一个关联容器了。如果学过数据结构,典型的关联容器就是散列(Hash Map,哈希表)转载 2010-08-20 23:55:00 · 3222 阅读 · 0 评论 -
QT容器类之顺序存储容器
容器Containers,有时候也被称为集合collections,指的是能够在内存中存储其他特定类型的对象的对象,这种对象一般是通用的模板类。C++提供了一套完整的解决方案,成为标准模板库Standard Template Library,也就是我们常说的STL。 Qt提供了它自己的一套容器类,这就是说,在Qt的应用程序中,我们可以使用标准C++的STL,也可以使用Qt的容器类。Qt容器类的好处在于,它提供了平台无关的行为,以及隐式数据共享技术。所谓平台无关,即Qt容器类不因编译器的不同而具有不同的实现;转载 2010-08-20 16:03:00 · 2444 阅读 · 0 评论 -
QT model-view架构
我们的系统有很多数据显示的需求,比如从数据库中把数据取出,然后以自己的方式显示在我们自己的应用程序的界面中。进行这一操作的典型方式是使用Qt的Item View类。 在早期的Qt版本中,要实现这个功能,我们需要定义一个widget,然后在这个widget中保存一个数据对象,比如是个list,然后我们对这个list进行查找、插入等的操作,或者把修改的地方写回这个list,然后刷新widget进行显示。这个思路很简单,也很清晰,但是对于大型程序,这种设计就显得苍白无力。比如,在一个大型系统中,你的数据可能很大,转载 2010-08-21 01:40:00 · 2109 阅读 · 0 评论 -
model-view模型之QDirModel
今天我们来看一个很有用的model:QDirModel。这个model允许我们在view中显示操作系统的目录结构。这次让我们先来看看运行结果:这个界面很熟悉吧?不过这可不是由QFileDialog打开的哦,这是我们自己实现的。而提供这种实现支持的,就是QDirModel和QTreeView。我们来看一下代码。 mytreeview.h#ifndef MYLISTVIEW_H #define MYLISTVIEW_H #include class MyTreeView : public QWidget {转载 2010-08-23 00:58:00 · 2765 阅读 · 0 评论 -
鼠标拖放技术二
接着上次的说,上次说到了拖放技术,今天依然是一个例子,同样是来自《C++ GUI Programming with Qt 4, 2nd Edition》的。这次的 demo 还算是比较实用:实现的是两个 list 之间的数据互拖。在很多项目中,这一需求还是比较常见的吧!下面也就算是抛砖引玉了啊!projectlistwidget.h#ifndef PROJECTLISTWIDGET_H #define PROJECTLISTWIDGET_H #include <QtGui> class Proje转载 2010-08-26 00:44:00 · 4005 阅读 · 1 评论 -
QT容器中的通用算法
今天开始的部分是关于Qt提供的一些通用算法。这部分内容来自C++ GUI Programming with Qt 4, 2nd Edition。 提供了一系列通用的模板函数,用于实现容器上面的基本算法。这部分算法很多依赖于STL风格的遍历器(还记得前面曾经说过的Java风格的遍历器和STL风格的遍历器吗?)。实际上,C++ STL也提供了很多通用算法,包含在头文件内。这部分算法对于Qt容器同样也是适用的。因此,如果你想使用的算法在Qt的头文件中没有包含,那么就可以使用STL的算法代替,这并不会产生什么冲突。转载 2010-08-25 14:52:00 · 2432 阅读 · 1 评论 -
拖放技术一
拖放 Drag and Drop,有时又被称为 DnD,是现代软件开发中必不可少的一项技术。它提供了一种能够在应用程序内部甚至是应用程序之间进行信息交换的机制,并且,操作系统与应用程序之间进行剪贴板的内容交换,也可以被认为是 DnD 的一部分。DnD 其实是由两部分组成的:Drag 和 Drop。Drag 是将被拖放对象“拖动”,Drop 是将被拖放对象“放下”,前者一般是一个按下鼠标的过程,而后者则是一个松开鼠标的过程,这两者之间鼠标一直是被按下的。当然,这只是一种通常的情况,其他情况还是要看应用程序的具转载 2010-08-25 23:26:00 · 5437 阅读 · 0 评论 -
Qt-4.6动画Animation快速入门三字决
<br />Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序。不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞。<br /> 前面写过一篇文章Qt动画效果的幕后英雄:QTimeLine,介绍了怎么利用QTimeLine写一动画程序。今天又再重申前文里的一句话,所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情。当然做这件事情,最好用的就是状态机,没错Qt-转载 2010-08-27 15:45:00 · 6281 阅读 · 0 评论 -
使用Qt作窗口截屏(含源码)
<br />截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件。介绍的好像有点多余:(,那我们就直接切入正题。<br />QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上的窗体存成一个QPixmap格式的图片,很容易再将QPixmap存成文件。函数使用很简单,两行代码就可以。<br />QPixmap pixmap = QPixmap::grabWidget(this);//this是调用该函数的QWidget *指针<br />pixmap.save(“转载 2010-08-29 22:54:00 · 13700 阅读 · 0 评论 -
释放线程中new的套接字
在做Symbian应用开发和MeeGo应用开发时Q框架是一个统一的开发框架,很多时候需要在QThread的run中new一个QUdpSocket来收发数据.这时,这个socket对象的释放就成了一个麻烦的问题.如果在thread的析构中直接delete这个socket对象,则会出现如下异常:QSocketNotifier: socket notifiers cannot be disabled f转载 2011-12-02 17:05:29 · 2749 阅读 · 1 评论