作者:gnuhpc 

出处:http://www.cnblogs.com/gnuhpc/

我们以QLineEdit这个类为例来看看如何学习分析一个QT类。

1.Public Types:

这是一个在这个类中可以供我们使用的公共枚举类型。这也就是说,我们可以如下使用这个公共类型:

// some code
..
QLineEdit::EchoMode mode;
mode = myLineEdit->echoMode(); ... mode = QLineEdit::NoEcho;
myLineEdit->setEchoMode( mode );
// or directly myLineEdit->setEchoMode( QLineEdit::NoEcho );

Public types经常使用在Properties中。

2.Properties

Properties可以被get和set,上边的例子就有所体现。

3.Public Functions

这个部分提供了大量这个类实例的方法,textEdit->append( "Path to file: " + lineEdit->text() );

4.Public Slots

这个部分描述了我们能连接信号的一些动作,这些动作构成了与其连接的signal的结果,也就是说,一个signal发出回导致一个一个slot的动作发生。我们也可以自定义信号槽,比如:

myqtapp.h

public slots:

void mySlot(const QString&);

myqtapp.cpp

void myQtApp::mySlot(const QString& passedStr)
{
QMessageBox::information(this, "Some window label here", "String: " + passedStr);
}
然后我们以这样的方式连接这个槽:connect( lineEdit, SIGNAL( textEdited (const QString&) ), this, SLOT( mySlot(const QString&) ) );

5.Signals

这个部分描述了这个类能发出信号的部分,这些信号与特定的slot连接,导致了slot对应动作的发生。也就是说,信号相当于原因,而slots相当于结果。比如

 connect( pushButton_clear, SIGNAL( clicked() ), this, SLOT( clear() ) );

在这里我们把pushButton_clear的clicked信号连接到了this的clear() 槽上,当这个按键按下时,this就会执行这个clear的动作。我们也可以自定义信号:

myqtapp.h

public:
myQtApp(QWidget *parent = 0); signals:
void customSignal( const QString& );
..

myqtapp.cpp - 要使用emit关键字

void myQtApp::clear() 



emit customSignal( textEdit->toPlainText() );//信号在此发出,带一个字符串 

    textEdit->clear(); 

}

我们可以如下连接我们自定义的信号:connect( this, SIGNAL( customSignal (const QString&) ), this, SLOT( mySlot(const QString&) ) );

6.Protected functions

这个就是C++传统意义上的Protected方法。

7.Static Public Members

这个也是指全局都能使用的类方法,不需要创建实例就可以直接调用。

8.const QString &

这个定义在QT的文档中经常见到。其实这个也可以不加const &,主要是为了performance——在方法中不需要再复制一份参数,提高了程序性能。const则是说这个传进来的参数不可修改。

9.在堆上或者栈上分配内存

例如,我们使用QProcess这个类,我们写了如下的函数:

void myQtApp::function()
{
QProcess proc; // we create this proc variable on stack
proc.start("regedit.exe"); // start program regedit.exe
}

我们以为会调用这个exe,但实际上并没有,终端调试信息显示:

QProcess: Destroyed while process is still running.

这是因为变量在程序栈上,当这个变量越出了这个范围,栈上的这个部分的内存就会被释放。在我们这个例子中,proc在这个程序执行结束前就被销毁了。解决的方法就是在堆上建立这个变量:当程序员使用new进行动态内存分配的时候,内存是分配在堆(虚拟内存,包括板上RAM和硬盘剩余空间所分配的硬盘)上的。

void myQtApp::function()
{
QProcess *proc; // pointer definition
proc = new QProcess( this ); // memory allocation from heap, created with parent
proc->start("regedit.exe"); // start program
}

注意使用this的的原因是父进程销毁后子进程亦销毁。

另外一种方法是将proc放入类myQtApp中成为一个类成员。

如何分析一个QT类的更多相关文章

  1. 每天一个Qt类之QWidget

    每天一个Qt类之QWidget QWidget类是所有用户界面对象的基类 继承QObject和QPaintDevice 被QButton.QFrame.QDialog.QComboBox.QDataB ...

  2. Qt 类外调用一个 private slots 函数

    MainWindow中 private slots 函数 void print_on_log(QString strtemp);输出一个字符串到编辑窗口中 class MainWindow:publi ...

  3. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  4. Struts2 源码分析——Action代理类的工作

    章节简言 上一章笔者讲到关于如何加载配置文件里面的package元素节点信息.相信读者到这里心里面对struts2在启动的时候加载相关的信息有了一定的了解和认识.而本章将讲到关于struts2启动成功 ...

  5. Qt类继承图

    对于学习Qt的,有一个Qt所有类的继承图表,是很有需要的.以下提供了Qt5.1的所有类的继承关系图.看的时候,可以放大和缩小.如需文档下载,可以加入最后的QQ学习群.

  6. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

    话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...

  7. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类

    话接上篇.成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类.直接看代码吧. #include "include/lua.hpp" #include ...

  8. 可重入与线程安全(大多数Qt类是可重入,非线程安全的)

    可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序.假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的. ...

  9. Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)

    Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...

随机推荐

  1. hibernate QBC查询

    HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <>  Restrictions.ne() 不等于not equal >  Restrict ...

  2. 一些编译php时的configure 参数

    一些编译php时的configure 参数 ./configure –prefix=/usr/local/php php 安装目录 –with-apxs2=/usr/local/apache/bin/ ...

  3. EF6&EFCore 注册/使用实体类的正确姿势

    首先回顾下EF中常规使用流程 1.新建实体类以及实体配置(data annotation或fluent api) [Table("Users")] public class Use ...

  4. 【BZOJ4408】[Fjoi 2016]神秘数 主席树神题

    [BZOJ4408][Fjoi 2016]神秘数 Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1 ...

  5. AWK命令使用

    前言 文本处理三剑客中,grep强在文本查找,sed强在文本处理,现awk强在文本查找后的输出处理.awk可以在处理文本的过程中使用编程结构(变量.条件判断.循环)以及其内置的变量,这就是它强大的地方 ...

  6. 【题解】CF1103D Professional layer

    [题解]CF1103DProfessional layer 神题做前先\(orzyyb\) 一个很好的性质(之前也见过但是没有想到的) zhengchu \(gcd\le 10^{12}\) 所以不同 ...

  7. 常用BAPI list

    2017-03-25 MD 主数据 1.创建物料主数据 CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' 2.创建供应商 CALL METHOD VMD_EI_API=&g ...

  8. Android 进程增加存活率

    引用 : http://geek.csdn.net/news/detail/68515

  9. Spring事务超时时间可能存在的错误认识

    摘自:http://jinnianshilongnian.iteye.com/blog/1986023, 感谢作者. 1.先看代码 1.1.spring-config.xml <bean id= ...

  10. CSS3 3D下拉折叠菜单

    在线演示 本地下载