
基于Qt的计算器程序
qt creator有bug,可以向qt报告。
另外,注意使用最新版的qt creator。
什么是槽函数
一、概述 二、信号 三、槽 四、信号和槽的关联 五、元对象工具 六、程式样例 七、应注意的问题 相关资源 作者简介 作者:唐新华 (xhsmart@263.net)软件工程师 信号和槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号和槽的一些基本概念、元对象工具及在实际使用过程中应注意的一些问题。
QT 是个跨平台的C++ GUI应用构架,他提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上。
QT支持下列平台:MS\\\/WINDOWS-95、98、NT和2000;UNIX\\\/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMBEDDED-支持framebuffer的Linux平台。
伴随着KDE的快速发展和普及,QT非常可能成为Linux窗口平台上进行软件研发时的GUI最佳选择。
一、概述 信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。
信号和槽是一种高级接口,应用于对象之间的通信,他是QT的核心特性,也是QT差别于其他工具包的重要地方。
信号和槽是QT自行定义的一种通信机制,他独立于标准的C\\\/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是个C++预处理程式,他为高层次的事件处理自动生成所需要的附加代码。
在我们所熟知的非常多GUI工具包中,窗口小部件(widget)都有一个回调函数用于响应他们能触发的每个动作,这个回调函数通常是个指向某个函数的指针。
不过,在 QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程式更为简洁明了。
信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的,不会像回调函数那样产生core dumps。
所有从QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。
当对象改动其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,他不知道另一端是谁在接收这个信号。
这就是真正的信息封装,他确保对象被当作一个真正的软件组件来使用。
槽用于接收信号,但他们是普通的对象成员函数。
一个槽并不知道是否有所有信号和自己相连接。
而且,对象并不了解具体的通信机制。
你能将非常多信号和单个的槽进行连接,也能将单个的信号和非常多的槽进行连接,甚至于将一个信号和另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将即时发射第二个信号。
总之,信号和槽构造了一个强大的部件编程机制。
二、信号 当某个信号对其客户或所有者发生的内部状态发生改动,信号被一个对象发射。
只有定义过这个信号的类及其派生类能够发射这个信号。
当一个信号被发射时,和其相关联的槽将被即时执行,就象一个正常的函数调用相同。
信号-槽机制完全独立于所有GUI事件循环。
只有当所有的槽返回以后发射函数(emit)才返回。
如果存在多个槽和某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地执行,不过他们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。
信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。
例如,下面定义了三个信号: signals:void mySignal();void mySignal(int x);void mySignalParam(int x,int y);在上面的定义中,signals是QT的关键字,而非C\\\/C++的。
接下来的一行void mySignal() 定义了信号mySignal,这个信号没有携带参数;接下来的一行void mySignal(int x)定义了重名信号mySignal,不过他携带一个整形参数,这有点类似于C++中的虚函数。
从形式上讲信号的声明和普通的C++函数是相同的,不过信号却没有函数体定义,另外,信号的返回类型都是void,不要指望能从信号返回什么有用信息。
信号由moc自动产生,他们不应该在.cpp文件中实现。
三、槽 槽是普通的C++成员函数,能被正常调用,他们唯一的特别性就是非常多信号能和其相关联。
当和其关联的信号被发射时,这个槽就会被调用。
槽能有参数,但槽的参数不能有缺省值。
既然槽是普通的成员函数,因此和其他的函数相同,他们也有存取权限。
槽的存取权限决定了谁能够和其相关联。
同普通的C++成员函数相同,槽函数也分为三种类型,即public slots、private slots和protected slots。
public slots:在这个区内声明的槽意味着所有对象都可将信号和之相连接。
这对于组件编程非常有用,你能创建彼此互不了解的对象,将他们的信号和槽进行连接以便信息能够正确的传递。
protected slots:在这个区内声明的槽意味着当前类及其子类能将信号和之相连接。
这适用于那些槽,他们是类实现的一部分,不过其界面接口却面向外部。
private slots:在这个区内声明的槽意味着只有类自己能将信号和之相连接。
这适用于联系非常紧密的类。
槽也能够声明为虚函数,这也是非常有用的。
槽的声明也是在头文件中进行的。
例如,下面声明了三个槽: public slots:void mySlot();void mySlot(int x);void mySignalParam(int x,int y);四、信号和槽的关联 通过调用QObject对象的connect函数来将某个对象的信号和另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。
该函数的定义如下: bool QObject::connect ( const QObject * sender, const char * signal,const QObject * receiver, const char * member ) [static]这个函数的作用就是将发射者sender对象中的信号signal和接收者receiver中的member槽函数联系起来。
当指定信号signal时必须使用QT的宏SIGNAL(),当指定槽函数时必须使用宏SLOT()。
如果发射者和接收者属于同一个对象的话,那么在connect调用中接收者参数能省略。
例如,下面定义了两个对象:标签对象label和滚动条对象scroll,并将valueChanged()信号和标签对象的setNum()相关联,另外信号还携带了一个整形参数,这样标签总是显示滚动条所处位置的值。
QLabel *label = new QLabel;QScrollBar *scroll = new QScrollBar;QObject::connect( scroll, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)) );一个信号甚至能够和另一个信号相关联,看下面的例子: class MyWidget : public QWidget{public:MyWidget();…signals:void aSignal();…private:…QPushButton *aButton;};MyWidget::MyWidget(){aButton = new QPushButton( this );connect( aButton, SIGNAL(clicked()), SIGNAL(aSignal()) );}在上面的构造函数中,MyWidget创建了一个私有的按钮aButton,按钮的单击事件产生的信号clicked()和另外一个信号aSignal() 进行了关联。
这样一来,当信号clicked()被发射时,信号aSignal()也接着被发射。
当然,你也能直接将单击事件和某个私有的槽函数相关联,然后在槽中发射aSignal()信号,这样的话似乎有点多余。
当信号和槽没有必要继续保持关联时,我们能使用disconnect函数来断开连接。
其定义如下: bool QObject::disconnect ( const QObject * sender, const char * signal,const Object * receiver, const char * member ) [static]这个函数断研发射者中的信号和接收者中的槽函数之间的关联。
有三种情况必须使用disconnect()函数: 断开和某个对象相关联的所有对象。
这似乎有点不可理解,事实上,当我们在某个对象中定义了一个或多个信号,这些信号和另外若干个对象中的槽相关联,如果我们要切断这些关联的话,就能利用这个方法,非常之简洁。
disconnect( myObject, 0, 0, 0 )或 myObject->disconnect()断开和某个特定信号的所有关联。
disconnect( myObject, SIGNAL(mySignal()), 0, 0 )或 myObject->disconnect( SIGNAL(mySignal()) )断开两个对象之间的关联。
disconnect( myObject, 0, myReceiver, 0 )或 myObject->disconnect( myReceiver )在disconnect函数中0能用作一个通配符,分别表示所有信号、所有接收对象、接收对象中的所有槽函数。
不过发射者sender不能为0,其他三个参数的值能等于0。
五、元对象工具 元对象编译器moc(meta object compiler)对C++文件中的类声明进行分析并产生用于初始化元对象的C++代码,元对象包含全部信号和槽的名字及指向这些函数的指针。
moc 读C++源文件,如果发现有Q_OBJECT宏声明的类,他就会生成另外一个C++源文件,这个新生成的文件中包含有该类的元对象代码。
例如,假设我们有一个头文件mysignal.h,在这个文件中包含有信号或槽的声明,那么在编译之前 moc 工具就会根据该文件自动生成一个名为mysignal.moc.h的C++源文件并将其提交给编译器;类似地,对应于mysignal.cpp文件moc 工具将自动生成一个名为mysignal.moc.cpp文件提交给编译器。
元对象代码是signal\\\/slot机制所必须的。
用moc产生的C++源文件必须和类实现一起进行编译和连接,或用#include语句将其包含到类的源文件中。
moc并不扩展#include或#define宏定义,他只是简单的跳过所遇见的所有预处理指令。
六、程式样例 这里给出了一个简单的样例程式,程式中定义了三个信号、三个槽函数,然后将信号和槽进行了关联,每个槽函数只是简单的弹出一个对话框窗口。
读者能用kdevelop生成一个简单的QT应用程式,然后将下面的代码添加到相应的程式中去。
信号和槽函数的声明一般位于头文件中,同时在类声明的开始位置必须加上Q_OBJECT语句,这条语句是不可缺少的,他将告诉编译器在编译之前必须先应用 moc工具进行扩展。
关键字signals指出随后开始信号的声明,这里signals用的是复数形式而非单数,siganls没有public、 private、protected等属性,这点不同于slots。
另外,signals、slots关键字是QT自己定义的,不是C++中的关键字。
信号的声明类似于函数的声明而非变量的声明,左边要有类型,右边要有括号,如果要向槽中传递参数的话,在括号中指定每个形式参数的类型,当然,形式参数的个数能多于一个。
关键字slots指出随后开始槽的声明,这里slots用的也是复数形式。
槽的声明和普通函数的声明相同,能携带零或多个形式参数。
既然信号的声明类似于普通C++函数的声明,那么,信号也可采用C++中虚函数的形式进行声明,即同名但参数不同。
例如,第一次定义的void mySignal()没有带参数,而第二次定义的却带有参数,从这里我们能看到QT的信号机制是非常灵活的。
信号和槽之间的联系必须事先用connect函数进行指定。
如果要断开二者之间的联系,能使用函数disconnect。
\\\/\\\/tsignal.h…class TsignalApp:public QMainWindow{Q_OBJECT…\\\/\\\/信号声明区 signals:\\\/\\\/声明信号mySignal()void mySignal();\\\/\\\/声明信号mySignal(int)void mySignal(int x);\\\/\\\/声明信号mySignalParam(int,int)void mySignalParam(int x,int y);\\\/\\\/槽声明区 public slots:\\\/\\\/声明槽函数mySlot()void mySlot();\\\/\\\/声明槽函数mySlot(int)void mySlot(int x);\\\/\\\/声明槽函数mySignalParam (int,int)void mySignalParam(int x,int y);}…\\\/\\\/tsignal.cpp…TsignalApp::TsignalApp(){…\\\/\\\/将信号mySignal()和槽mySlot()相关联 connect(this,SIGNAL(mySignal()),SLOT(mySlot()));\\\/\\\/将信号mySignal(int)和槽mySlot(int)相关联 connect(this,SIGNAL(mySignal(int)),SLOT(mySlot(int)));\\\/\\\/将信号mySignalParam(int,int)和槽mySlotParam(int,int)相关联 connect(this,SIGNAL(mySignalParam(int,int)),SLOT(mySlotParam(int,int)));}\\\/\\\/ 定义槽函数mySlot()void TsignalApp::mySlot(){QMessageBox::about(this,”Tsignal”, “This is a signal\\\/slot sample withoutparameter.”);}\\\/\\\/ 定义槽函数mySlot(int)void TsignalApp::mySlot(int x){QMessageBox::about(this,”Tsignal”, “This is a signal\\\/slot sample with oneparameter.”);}\\\/\\\/ 定义槽函数mySlotParam(int,int)void TsignalApp::mySlotParam(int x,int y){char s[256];sprintf(s,”x:%d y:%d”,x,y);QMessageBox::about(this,”Tsignal”, s);}void TsignalApp::slotFileNew(){\\\/\\\/发射信号mySignal()emit mySignal();\\\/\\\/发射信号mySignal(int)emit mySignal(5);\\\/\\\/发射信号mySignalParam(5,100)emit mySignalParam(5,100);}七、应注意的问题 信号和槽机制是比较灵活的,但有些局限性我们必须了解,这样在实际的使用过程中做到有的放矢,避免产生一些错误。
下面就介绍一下这方面的情况。
1.信号和槽的效率是非常高的,不过同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失,当然这种损失相对来说是比较小的,通过在一台 i586-133的机器上测试是10微秒(运行Linux),可见这种机制所提供的简洁性、灵活性还是值得的。
但如果我们要追求高效率的话,比如在实时系统中就要尽可能的少用这种机制。
2.信号和槽机制和普通函数的调用相同,如果使用不当的话,在程式执行时也有可能产生死循环。
因此,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发射所接收到的同样信号。
例如,在前面给出的例子中如果在mySlot()槽函数中加上语句emit mySignal()即可形成死循环。
3.如果一个信号和多个槽相联系的话,那么,当这个信号被发射时,和之相关的槽被激活的顺序将是随机的。
4. 宏定义不能用在signal和slot的参数中。
既然moc工具不扩展#define,因此,在signals和slots中携带参数的宏就不能正确地工作,如果不带参数是能的。
例如,下面的例子中将带有参数的宏SIGNEDNESS(a)作为信号的参数是不合语法的: #ifdef ultrix#define SIGNEDNESS(a) unsigned a#else#define SIGNEDNESS(a) a#endifclass Whatever : public QObject{[…]signals:void someSignal( SIGNEDNESS(a) );[…]};5. 构造函数不能用在signals或slots声明区域内。
的确,将一个构造函数放在signals或slots区内有点不可理解,无论怎么,不能将他们放在private slots、protected slots或public slots区内。
下面的用法是不合语法需求的: class SomeClass : public QObject{Q_OBJECTpublic slots:SomeClass( QObject *parent, const char *name ): QObject( parent, name ) {} \\\/\\\/ 在槽声明区内声明构造函数不合语法 […]};6. 函数指针不能作为信号或槽的参数。
例如,下面的例子中将void (*applyFunction)(QList*, void*)作为参数是不合语法的: class someClass : public QObject{Q_OBJECT[…]public slots:void apply(void (*applyFunction)(QList*, void*), char*); \\\/\\\/ 不合语法 };你能采用下面的方法绕过这个限制: typedef void (*ApplyFunctionType)(QList*, void*);class someClass : public QObject{Q_OBJECT[…]public slots:void apply( ApplyFunctionType, char *);};7.信号和槽不能有缺省参数。
既然signal->slot绑定是发生在运行时刻,那么,从概念上讲使用缺省参数是困难的。
下面的用法是不合理的: class SomeClass : public QObject{Q_OBJECTpublic slots:void someSlot(int x=100); \\\/\\\/ 将x的缺省值定义成100,在槽函数声明中使用是错误的 };8.信号和槽也不能携带模板类参数。
如果将信号、槽声明为模板类参数的话,即使moc工具不报告错误,也不可能得到预期的结果。
例如,下面的例子中当信号发射时,槽函数不会被正确调用: […]public slots:void MyWidget::setLocation (pair location);[…]public signals:void MyObject::moved (pair location);不过,你能使用typedef语句来绕过这个限制。
如下所示: typedef pair IntPair;[…]public slots:void MyWidget::setLocation (IntPair location);[…]public signals:void MyObject::moved (IntPair location);这样使用的话,你就能得到正确的结果。
9.嵌套的类不能位于信号或槽区域内,也不能有信号或槽。
例如,下面的例子中,在class B中声明槽b()是不合语法的,在信号区内声明槽b()也是不合语法的。
class A{Q_OBJECTpublic:class B{public slots: \\\/\\\/ 在嵌套类中声明槽不合语法 void b();[….]};signals:class B{\\\/\\\/ 在信号区内声明嵌套类不合语法 void b();[….]}:};10.友元声明不能位于信号或槽声明区内。
相反,他们应该在普通C++的private、protected或public区内进行声明。
下面的例子是不合语法规范的: class someClass : public QObject{Q_OBJECT[…]signals: \\\/\\\/信号定义区 friend class ClassTemplate; \\\/\\\/ 此处定义不合语法
计算器连续数字怎么使用记忆想加
ACE全称adaptive communication enviroment,是一套C++的通信库。
它提供了socket\\\/threading\\\/memory management等多种系统调用的面对对象的wrapper,使C++通信软件开发更加简单。
ACE最帅的特点:跨平台
ACE屏蔽了底层平台特定的语义,使用ACE编写的C++程序,可以在linux\\\/windows\\\/HP-Unix下编译执行,而且效率很高。
曾经做过的一个VOIP项目就是用ACE写的,那个项目的技术相当复杂,需要用到socket\\\/multi-threading等很多与操作系统联系紧密的技术,但用了ACE(界面用Qt)后,那个项目源码可以直接在linux和windows下编译运行,呵呵,还是相当成功的。
项目进行中感到ACE相当成熟,举一个朋友说Siemens的某些大型工程也是用的ACE。
而且,ACE是免费开源的软件包--不用白不用。
C++ Network Programming就是ACE项目的负责人Schmidt写的,这位老哥以前是华盛顿大学的副教授,主要研究领域是软件工程(他写了不少关于pattern的文章和书),现在猫到UC Irvine去了,好象还是副教授(要这哥们在中国,早应该成教授了吧)。
这两本书主要介绍了ACE的使用,也涉及了部份设计方面的内容。
第一卷主要介绍ACE的基本功能和使用,第二卷则偏重通讯软件中的design pattern。
搞通信软件开发的兄弟们绝对应该看看此书。
另外也有人推荐把ACE作为学习C++的范例来学习,呵呵,这就是个人喜好的问题了...总的来说ACE的代码风格还是很不错的--比STL那些天书好看些,呵呵。
Q: 什么是ACE或者ACE2插件? A: 如果把普通的插件比作一棵棵互不关联的小树, 那么ACE库或者ACE2库就是一棵大树干,所有基于ACE的插件就是长在上面的树枝. 共有的部分都被集成到一起,因此代码非常短小和快速,而且稳定.ACE2是用来取代ACE的版本,虽然有一些插件还未能从ACE转换到ACE2,但是ACE2系的插件现在可说代表了wow插件的最高水平. ACE2是为其他倚赖ACE2才能运行的插件提供库支持的一个库文件,本身不具备任何功能。
如BigWigs[ACE2]就说明BigWigs这个插件需要ACE2的支持。
使用方法:解压缩以后无论是ACE2还是!LIB都直接放入Interface\\\\Addons里面就可以了。
ACE 类插件因为短小精悍 面向对象 有越来越多的插件开始以其作为编写库 目前已经发展到 ACE2 ACE2运行库开发组都是提倡直接内嵌的,完全没有必要单独提出来
没错如果你有10个内嵌了ACE2的插件,开始载入的时候确实会载入10个副本的ACE2导致Warmup显示内存占用偏大,但是在下次的碎片回收中,多余的ACE2副本都会被清除,只留下一个驻留内存。
如果有新旧多个版本,则会自动选择最新的版本驻留。
所以说,Warmup的数据,不能正确的反映出ACE2插件的实际内存使用。
Warmup的作者本身也是ACE开发团队的成员,现在由于Warmup导致的一些对ACE2的误解,这家伙想必也是哭笑不得了,呵。
作为ACE2插件的使用者,完全没有需要去考虑运行库的版本更新等等问题,这是ACE2标准的一个重要精神,是ACE2开发初始就持有的初衷
所有的ACE2运行库,都是可直接内嵌、自动管理版本,不需要使用者进行任何管理干预的
ACE2作为wow插件界的技术先锋,为插件作者提供了一个良好的开发平台,也切实地为玩家带来了易用、强大而低资源占用的优秀插件。
希望大家不要为过往的成见和一些人的误导而错失了如此优秀的插件
谈运行库而色变,完全是没有必要的。
ACE2的优秀运行库(包括ACE2和基于ACE2标准的CandyBar, Dewdrop, Metrognome, Compost, ParserLib等等)不但是简化了插件的开发,优化了代码,也对降低插件资源占用作用。
再加上ACE开发社区作者们强烈的优化意识,可以负责的说,ACE2的插件比其他插件绝对更省资源
本质上来说, Qt是一个跨平台的C++应用程序开发框架,有时又被称为C++部件工具箱。
Qt被用在KDE桌面环境、Opera、GoogleEarth、Skype、Adobe Photoshop Album和VirtualBox的开发中。
它是诺基亚(Nokia)的QtDevelopment Frameworks 部门的产品。
使用 Qt,只需一次性开发应用程序和用户界面,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点:a) 优良的跨平台特性:Qt支持下列操作系统: Microsoft Windows 95\\\/98, Microsoft Windows NT, Linux,Solaris, SunOS, HP-UX, Digital UNIX (OSF\\\/1, Tru64), Irix, FreeBSD,BSD\\\/OS, SCO, AIX, OS390,QNX 等等。
b) 面向对象Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。
Qt 提供了一种称为 signals\\\/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
c) 丰富的 APIQt包括多达 250 个以上的 C++ 类,还替供基于模板的 collections, serialization, file, I\\\/Odevice, directory management, date\\\/time 类。
甚至还包括正则表达式的处理 功能。
d) 支持 2D\\\/3D 图形渲染,支持 OpenGLe) 大量的开发文档f) XML 支持最近诺基亚发布了Qt 4.6——最新版的跨平台应用程序和用户界面框架。
Qt 4.6 对全新平台提供支持,具有强大的全新图形处理能力并支持多点触摸和手势输入,让高级应用程序和设备的开发过程变得更加轻松和快乐。
诺基亚应用服务和框架副总裁Sebastian Nystrom说:“不论是什么样产品设计或开发平台,Qt 4.6的发布对开发人员来说都是一件令人兴奋的事。
”“开发人员可以轻而易举地为桌面平台或设备(包括数亿部基于Symbian 和 Maemo系统的设备)开发出具有视觉美感和网络连接功能的应用程序。
” Nystr?m补充说:“开发人员将非常喜欢使用Qt直观的编程界面,快速开发出功能强大、外表美观的应用程序。
”更多平台Qt4.6 首次包含了对Symbian 平台的支持,并在其所支持的平台中新增了 Windows 7、Apple Mac OS 10.6 (雪豹)和即将上市的Maemo 6。
此外还为实时操作系统QNX 和 VxWorks提供了网络社区支持。
对Maemo 5的支持目前也已进入研发阶段,其技术预览版第二版已于今日发布。
Qt 对 Symbian 和 Maemo 的支持首次为开发人员创造了使用同一代码库同时针对这两个平台进行开发的机会。
能够跨平台分享代码就意味着开发人员所开发的应用程序上市的速度将更快,影响的设备用户群将更广。
Qt Mobility项目下的全新Qt API技术预览版也于今日同时发布。
这些跨平台的API为开发人员提供了多种功能,如导航类设备的定位功能,以及信息发送和接收、联系人和网络连接管理等。
外观更炫Qt 4.6是在4.5图形增强功能的基础上创建的,进一步强化了这些图形功能,添加了全新的动画框架(Animation Framework)——包括直观的状态机功能——以及全新的高级图形功能,如不透明、阴影、闪光和滤镜等。
使用手指Qt4.6最令人兴奋的新功能之一就是可以创建多点触摸应用程序。
这种全新的基于多触点和手势的输入法(如轻触和动力滚动)使Qt4.6框架的功能更为强大,用户可以通过触觉以动态的方式与应用程序和设备进行互动。
性能更强传统软件开发观点认为高级用户界面功能的获得通常是以性能严重受损作为代价的。
Qt 4.6 对此观点提出了挑战,为此投入大量工作,既要获得最佳性能,又要能让开发人员所开发的产品达到用户所要求的“令人惊叹”的效果。
性能提升主要包括:一个经过高度优化、重新编写的 Qt GraphicsView 渲染算法、一个全新的 OpenGL 绘图引擎、WebKit、使用 OpenVG 对 2D 矢量图形的支持,以及对全新 DirectFB 的支持。
最新工具在发布 Qt 4.6 的同时,作为 Qt 开发跨平台 IDE 的 Qt Creator 也发布了更新版本。
Qt Creator 1.3 和 Qt 4.6共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。
(来自programbbs)3、用QT能做什么
在QT的官方网站谈到了15年来取得了的成就,它帮助世界各地和各个行业组织开发出先进的高度创新的应用和设备。
使用Qt,众多的开发商和公司已经能够: ● 减少了近50%的开发时间。
● 加速了50%的开发速度由于代码可维护 ● 减少了50%的代码量Qt的用户怎么说
● 94%报告说,Qt的满足或超过其发展的期望 ● 92%会向他人推荐使用Qt ● 76%报告因为使用Qt,生产率提高Qt的应用领域:有很多出名的例子是都是使用Qt开发的。
例如: Arora(一款跨平台的开源网页浏览器)、eva(Linux版QQ聊天软件)、FreeMat(一个自由开源的数值计算环境和编程语言 )、Gadu-Gadu(即时通信软件)、Google地球(Google Earth)(三维虚拟地图软件)、ImageVis3D、KDE(著名的桌面环境)、Elibs(一个许多KDE程序都使用的共享库,如Amarok、K3b、KDevelop、KOffice等)、Last.fm播放器(著名的互联网音乐社区网站的桌面客户端)、Motorola A760(UI 以 Qt\\\/Embedded 建构)、MythTV9(开源的数字视频录制软件)、Opera(著名的网页浏览器)、Qterm(跨平台的BBS软件)、QtExtended、Quantum GIS、Skype(一个使用人数众多的基于P2P的VOIP聊天软件)、SMPlayer(跨平台多媒体播放器)、TeamSpeak(跨平台的音效通信软件) 、Tlen.pl:波兰人发明的 instant messaging client TOra、VirtualBox(虚拟机软件)、Xconfig(Linux的Kernel配置工具) 、chmcreator(开源的chm开发工具)…
小红伞怎么样
初用者,可以参考一下这章,小红伞虽然没有官方中文不过还是有汉化版本的~ 于伞的心得,初用伞的人可以来看看 Tags: 德国 心得 红伞 体会 数数 以下是个人体会,我不是什么高手,只是杀软用得比较多,谈点个人小小心得用伞快一年我用的杀软仔细数数一共也有30来款,伞是我认为单引擎杀软中,算很强的了,如果我要来排个名次化,它是怎么都能进前5名的,这个各大测试也能看出来,红伞一直表现良好。
样本区我下了N个包,肯定有难住伞的,但是,那是极少数,我个人的测试中,伞是相当悍的了,我目前也就发现TrustPort比伞的检毒率高。
而且我发现有伞搞不定的毒,就上报,总的来说,伞的上报的回馈速度还是比较快,德国佬的态度也都不错。
而且都完美的解决了上报的不能杀的毒,再升级后,发现就能轻松搞定了。
作为一个有免费版的软件,你还能要求什么呢
下面说下新手们也许会遇到几个问题:1 关于误报这是新人们说得最多的,也是最关注的。
我说下我的看法:正规软件,我是没发现伞有什么误报。
而且我发现人们经常所谓的误报,其实是指的报QQ如果你多用几个杀软,尤其是国外的反间谍软件,你会发现他们几乎是清一色的报QQ懂点安全知识的朋友都明白,QQ本身其实具备了木马的一些基本特征(这个涉及到很多关于端口什么的知识,有机会请安全咨询区的罗大人来讲一讲)所以很多国外杀软报QQ是“威胁”甚至是“木马”那也不足为怪了那么你要用伞,记得首先排除QQ如果伞要进人中国市场,那么他们会想办法解决QQ问题的(估计也是对QQ视而不见,给QQ个特权)还有一种情况,我一朋友用上伞后,见了我大呼小叫,这玩意怎么报我的XXX播放器
我用了好几年了啊我说你先别判断这是误报,我说你那播放器是官网下的么
他说:没有,我在XX网下的最新破解版我说:哦,我大概明白了然后我就叫他把伞报的文件传到这里多引擎的在线扫描,去扫描一下他去一扫,靠,70%的杀软都报是木马他这才相信小红伞。
并且感叹,我在XX网下破解版的XXX播放器,好几年了,都不知道里面有木马,难怪我机器老出问题啊
根据我的经验,有一些破解版,算号器,绿色版,都会有意无意的弄点木马,间谍什么的所以你要做到很安全,我建议你下任何软件,最好都去他的官方网站下,我甚至见过在DX里面绑木马的,害得我现在下DX什么的,都跑微软去下..................... 你实在很喜欢那些下载网,那么你也可以去大型的,知名的下载战,比如说霏凡啊,什么的,一般来说,大站会更考虑的安全问题,毕竟辛苦建立起来的名气,还是比较珍惜。
这样至少要比你随便在网络上一搜索,搜到一个不知名的小站就钻进去下,要安全一些那么总结一下其实伞的误报率并不高只是认为很多破解,注册机,等等有问题而且其实你发现伞报的时候,你可以仔细留意一下,也许你最信任的某款破解软件,悄悄的出卖你很多年了,呵呵然后被伞举报出来了,你不习惯罢了。
再说一下这个网址 很好用的,大家怀疑误报什么的,可以先传上去看看再说PS:我是做设计方面的,电脑里的3D,2D软件乱七八糟的很多,MAX,MAYA,SXI,ZBrush3,PS,CD,FLASH等等...........伞都没报过,完全没什么问题。
我平时爱好就是电影和音乐说下播放器方面:FOOBAR伞不会报,报的话,你FOOBAR肯定被放木马了KMPLAYER,GOMPLAYER,伞不会报POWERDVD伞不会报QT伞不会报REPLAYER伞不会报这些都是最常用的了,装这些播放器通吃一切了,都和伞完全没有任何冲突有些国产播放器,伞会报,我用别的杀软和在线扫描一查,果然有马,哈哈~其它常用的迅雷,XNVIEW,BT,PERFECTDISK,电驴,词霸,NERO,优化大师,兔子........什么的都没发现报过就像论坛里有的高手说的:正规软件,官网下载的,还真没发现报的其它领域的软件我不熟悉,比如说什么财务软件,这个不清楚了,不敢多言。
至少图形软件这块,比如说MAX插件多如牛毛,伞都没报过结论:伞的误报其实很小,不用那么害怕,放心用2 关于监控和排除越来越多人喜欢伞和其它杀软一起用了比如和AVAST一起用,那么你一定要记得互相排除一下AVAST会在你的WINDOWS的TEMP文件夹中,生成一个:“_avast4_”文件夹这个你记得排除,不然烦死你,呵呵还有其它杀软和伞配合的问题我用NOD32和BD配合过伞,我认为冲突比较严重,论坛里有人这么用,说是没事,但我不知道他们这么搞的....... 3 伞和墙的配合我用PCT,COMODO,风云, OUTPOST,ZONE, KNOX,等等墙和伞配合过,互相排除一下,都相安无事,大家放心用好了我个人推荐PCT V3,或者COMODO(V3还没出,等等吧)这两个墙任意一款配合伞,效果都不错,而且都是免费的,多好啊~4 升级问题C版确实慢,这个没办法,有时候升级一天都不行,这不是你的伞出了问题,是C版的升级服务器的事。
你要想升级速度快,那么就换成P版P版的KEY可以申请,搞活动得到(这个得看时候,说有就有,说没就没),或者你留意下论坛的帖子,有时候有人分享P版KEY的5 蓝屏问题我用了N多杀软,墙,唯一遇到蓝屏,是风云的老版本,和Spyware Terminator的老版本当然还有某款说都说不得的国产杀软........大家知道就好,别说出来小红伞我是真没遇到什么蓝屏我一朋友觉得小红伞好,给他公司全体都搞上伞了,也用了快一年了,没什么蓝屏幕问题总结:至少我的使用来看,和我周围的人使用情况,包括论坛上我的观察结果伞没有导致蓝屏的直接原因,而且有人反馈说遇上蓝屏了,这个几率也是极其小的,大家不相信翻翻这里还有红伞官网论坛的帖子,很少很少有人反馈这个问题有些人蓝屏,我觉得其实是病毒发作了~然后正好遇上刚装上伞。
所以大家放心用好了,小红伞不会搞得你机器蓝屏的,如果有,那真的是几率太小太小了。
6 资源占用伞的资源占用是比较小的内存尤其小,但虚拟内存占用比较多但我在512MB,C1.4的老机器上,运行一样很流畅所以一般新机器的朋友,大可不必要担心伞的资源占用问题,不会卡的~7 最后总结下伞作为免费杀软,我觉得已经是相当的优秀了,比很多收费的要强检毒率高,杀毒能力比较强,有一定少量的误报,但至少我觉得不影响我的工作,排除下你的QQ,对其它正规软件,是没有什么误报的还有,大家一定记得要多上报上报越多,伞就会越强的而且随着中国地区的用户上报越来越多伞也会更重视我们中国用户的呵呵~



