Qt中使用C++的方式

先看一个普通的C++类的定义:

#include <string>

using std::string;

class MyClass

{

public:

MyClass( const string& text );

const string& text() const;

void setText( const string& text );

int getLengthOfText() const;

private:

string m_text;

}

上述类的定义体现了Qt的一些风格:

l  类名的第一个字母为大写,类名包含的单词使用“驼峰”风格分开,也即每个单词的第一个字母为大写。这是Qt类命名的通用方式。

l  所在方法名的第一个字母为小写。单词之间也是采用“驼峰”风格分开。这是Qt方法的命名的通用方式。

l  属性text的getter和setter方法分别命名为text(getter)和setText(setter)。这是Qt命名getter和setter方法的通用方式。

在编程中遵循这些结构化的方式将为你的实际编码节省大量时间。

在Qt中,所有的类都继续于QObject类。如果让上述类继承自QObject,那么,QObject将负责该类的一些对象的内存释放,只要将父类传递给该类的对象实例即可。修改后的类定义如下所示:

#include <QObject>

#include <string>

using std::string;

class MyClass : public QObject

{

public:

MyClass( const string& text, QObject *parent = 0 );

const string& text() const;

void setText( const string& text );

int getLengthOfText() const;

private:

string m_text;

};

下面分别说明两种不同类定义下的使用区别:

第一种情况,不使用Qt的动态内存管理方案的情况:

#include <iostream>

int main( int argc, char **argv )

{

MyClass *a, *b, *c;

a = new MyClass( "foo" );

b = new MyClass( "ba-a-ar" );

c = new MyClass( "baz" );

std::cout << a->text() << " (" << a->getLengthOfText() << ")" << std::endl;

a->setText( b->text() );

std::cout << a->text() << " (" << a->getLengthOfText() << ")" << std::endl;

int result = a->getLengthOfText() - c->getLengthOfText();

delete a;

delete b;

delete c;

return result;

}

使用Qt的动态内存管理的情况:

#include <QtDebug>

int main( int argc, char **argv )

{

QObject parent;

MyClass *a, *b, *c;

a = new MyClass( "foo", &parent );

b = new MyClass( "ba-a-ar", &parent );

c = new MyClass( "baz", &parent );

qDebug() << QString::fromStdString(a->text())

<< " (" << a->getLengthOfText() << ")";

a->setText( b->text() );

qDebug() << QString::fromStdString(a->text())

<< " (" << a->getLengthOfText() << ")";

return a->getLengthOfText() - c->getLengthOfText();

}

说明:在Qt程序中,尽量使用qDebug()来打印信息,它能保证在所有的平台上将信息发送到正确的地方。要想关闭qDebug(),只需在编译时传递宏定义QT_NO_DEBUG_OUTPUT即可。

在Qt编译中,尽量不要使用STL库中的类,这样使得Qt程序不依赖于第二个框架,所以上述类定义中的std:string可以全部用Qstring来替换,修改后的类定义如下:

#include <QString>

#include <QObject>

class MyClass : public QObject

{

public:

MyClass( const QString& text, QObject *parent = 0 );

const QString& text() const;

void setText( const QString& text );

int getLengthOfText() const;

private:

QString m_text;

};

另外Qt还对普通的C++进行了一些扩展,如信号、槽以及元对象等,这些内容将在其他专题中介绍。

你可能感兴趣的:(Qt中使用C++的方式)