如何分析一个QT类
作者: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中成为一个类成员。
相关文章
- 数据透视表上线!如何在纯前端实现这个强大的数据分析功能?
- VS2019 Qt开发环境搭建与配置
- qt中Qtcpserver服务端_qt websocket
- Qt Quick 用cmake怎么玩子项目
- ubuntu安装Qt creator
- qlineedit 不可编辑_qt中获取lineedit文本内容
- Qt开源网络库[9]-下载文件
- Qt在Linux上的移植实践(qt移植到linux)
- 使用Qt在Linux下执行命令(qt执行linux命令)
- Linux下编译Qt程序的技术指南(linux编译qt程序)
- 在Linux中安装Qt第三方库的指南(linux安装qt库)
- Linux 下 Qt 调试技巧(qt调试linux)
- Linux安装Qt的步骤指导(linux怎么安装qt)
- 跨平台应用使用Qt开发Linux跨平台应用(qt开发linux)
- 操作快速掌握Qt框架MySQL数据库操作(qtmysql数据库)
- linux系统启动Qt图形界面简易指南(linux启动qt)
- 在Linux下探索Qt程序的奥秘(linux下运行qt程序)
- GUI应用Linux下Qt开发GUI应用:实现梦想的开发之路(linux下qt开发)
- 在Linux上开发应用程序:Qt系列版本深入解析(linux版本qt)
- QT快速加载MySQL驱动的简单操作(qt加载mysql驱动)
- 如何在Qt应用程序中访问MySQL数据库?(qt访问mysql)
- 入门Linux下Qt编程,掌握技巧!(linux下qt编程入门)
- 使用Qt实现MySQL数据库连接教程(qt连接mysql数据库)
- 如何在Linux上运行QT?(linuxqt运行)
- Qt 5 与 MySQL 数据库联合使用:简单高效的开发实践(qt 5 mysql)
- Qt技术与SQLServer的完美结合(qt与sqlserver)