您的位置:首页 > 移动开发 > Objective-C

QObject是QT所有类的基类

2015-08-25 16:38 543 查看
QObject是QT所有类的基类,QObject是Qt Object Model的核心

CODE:

/*

什么是Qt Object Model,主要包括如下的东西

1.信号和槽

2.良好的对象属性,如可查询和很好看,,,~~

3.有力的事件和事件过滤器

4.国际化字符设计

5.定时器为GUI的事件提供毫秒级的支持

6.很优秀的对象树结构

7.当对象销毁时指针自动设置为0

8.a dynamic cast that works across library boundaries,不知如何翻译

[Copy to clipboard]

你可以通过connect()连接一个信号到槽,并通过disconnect()来解除这个连接,临时中断用blockSignals(),还可以用 connectNotify()和disconnectNotify()来监听一个连接状态

每个对象有个objectName(),他的类名可以在metaObject() (查阅QMetaObject::className())找到,还可以用inherits()函数来检测他的继承关系

当一个对象销毁时发生信号 destroyed()

更多请参阅 QMetaObject, QPointer, QObjectCleanupHandler, 和Object Trees and Object Ownership.

属性:

1.对象名

objectName : QString

设置函数

QString objectName () const

void setObjectName ( const QString & name )

请参阅 metaObject() 和QMetaObject::className().

成员方法:

1.构造函数

QObject::QObject ( QObject * parent = 0 )

2.虚函数,析构函数

QObject::~QObject () [virtual]

要删除一个类请用deleteLater()代替

请参阅deleteLater()

2.阻塞信号

bool QObject::blockSignals ( bool block )

成功返回true,失败为false

请参阅signalsBlocked()

3.虚保护函数,得到子类的事件

void QObject::childEvent ( QChildEvent * event ) [virtual protected]

请参阅QChildEvent和QEvent类

4.得到子类列表

const QObjectList & QObject::children () const

他在#include<QObject>里面的定义如下:

CODE:

typedef QList<QObject*> QObjectList;

[Copy to clipboard]

first()和last()分别得到子类的第1个和最后一个,同时可以用 QWidget类的 raise()或者lower()来改变,这2个都是槽,注意

请参阅findChild(), findChildren(), parent(), 和setParent()

5.静态连接信号和槽的函数

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection ) [static]

使用时必须用SIGNAL() 和SLOT()宏指出信号和槽

如:

CODE:

QLabel *label = new QLabel;

QScrollBar *scrollBar = new QScrollBar;

QObject::connect(scroll, SIGNAL(valueChanged(int)),

label, SLOT(setNum(int)));

[Copy to clipboard]

注意:

a.这里要千万注意,里面的参数不能有变量名,只能有类型,不然不能工作

错误例子:

CODE:

// WRONG

QObject::connect(scroll, SIGNAL(valueChanged(int value)),

label, SLOT(setNum(int value)));

[Copy to clipboard]

b.同样信号可以连接到信号,如:

CODE:

class MyWidget : public QWidget

{

Q_OBJECT

public:

MyWidget();

signals:

void buttonClicked();

private:

QPushButton *myButton;

};

MyWidget::MyWidget()

{

myButton = new QPushButton(this);

connect(myButton, SIGNAL(clicked()),

this, SIGNAL(buttonClicked()));

}

[Copy to clipboard]

这个例子的意思是,就是MyWidget的构造函数将自己私有成员的信号以另外一种方式传出去,使其有效

c.一个信号可以连到很多信号和槽上,但是一个槽只能连到一个信号上

d.成功返回true,失败false

请参阅disconnect()

6.connect函数2

bool QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection ) const

7.这个函数检测当有solt连接到这个信号时被调用

void QObject::connectNotify ( const char * signal ) [virtual protected]

请参阅connect() 和disconnectNotify()

8.定义自己的类的行为

void QObject::customEvent ( QEvent * event ) [virtual protected]

请参阅event() 和QEvent类

9.槽,删除此对象

void QObject::deleteLater () [slot]

请参阅destroyed() and QPointer

10.信号,当对象销毁时发生

void QObject::destroyed ( QObject * obj = 0 ) [signal]

请参阅deleteLater() 和QPointer类

11.解除信号和槽的连接

bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method ) [static]

他一般有3种用法

a.解除一个类的所有信号的连接

CODE:

disconnect(myObject, 0, 0, 0);

或者

disconnect(myObject, 0, 0, 0);

[Copy to clipboard]

b.解除一个特定的信号

CODE:

disconnect(myObject, SIGNAL(mySignal()), 0, 0);

或者

myObject->disconnect(SIGNAL(mySignal()));

[Copy to clipboard]

c.解除一个特定的接受对象

CODE:

disconnect(myObject, 0, myReceiver, 0);

或者

myObject->disconnect(myReceiver);

[Copy to clipboard]

0就代表"any signal","any receiving object","any slot in the receiving object",就是所有信号,所有接收对象,一个接收对象的所有槽

注意:第一个参数就是sender不能为0,因为你不能解除所有信号和槽的关系

请参阅connect()

12.disconnect的函数2

bool QObject::disconnect ( const char * signal = 0, const QObject * receiver = 0, const char * method = 0 )

13.disconnect的函数3

bool QObject::disconnect ( const QObject * receiver, const char * method = 0 )

14.解除检测

void QObject::disconnectNotify ( const char * signal ) [virtual protected]

请参阅disconnect() 和connectNotify()

15.显示对象信息,一般用来调试用

void QObject::dumpObjectInfo ()

请参阅dumpObjectTree()

16.显示对象树

void QObject::dumpObjectTree ()

请参阅dumpObjectInfo()

17.检测事件,如果事件是经过验证或者执行过就返回true,否则false

bool QObject::event ( QEvent * e ) [virtual]

请参阅installEventFilter(), timerEvent(), QApplication::sendEvent(), QApplication::postEvent(), 和QWidget::event()

18.事件过滤

bool QObject::eventFilter ( QObject * watched, QEvent * event ) [virtual]

例子:

CODE:

class MainWindow : public QMainWindow

{

public:

MainWindow();

protected:

bool eventFilter(QObject *obj, QEvent *ev);

private:

QTextEdit *textEdit;

};

MainWindow::MainWindow()

{

textEdit = new QTextEdit;

setCentralWidget(textEdit);

textEdit->installEventFilter(this);

}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)

{

if (obj == textEdit) {

if (event->type() == QEvent::KeyPress) {

qDebug("Ate key press");

return true;

} else {

return false;

}

} else {

// pass the event on to the parent class

return QMainWindow::eventFilter(obj, event);

}

}

[Copy to clipboard]

在这个例子中只响应textEdit的事件

请参阅installEventFilter()

19.找出子类

T QObject::findChild ( const QString & name = QString() ) const

没有找到返回0,常用的调用

a.找特定的子类

CODE:

QPushButton *button = parentWidget->findChild<QPushButton *>("button1");

[Copy to clipboard]

b.找所有的同一类别子类

CODE:

QListWidget *list = parentWidget->findChild<QListWidget *>();

[Copy to clipboard]

在VC6上,这个函数请用qFindChild()代替~~请参阅findChildren() 和qFindChild()

20.找出子类2,请参阅上例

QList<T> QObject::findChildren ( const QString & name = QString() ) const

21.找出子类3,请参阅上例

QList<T> QObject::findChildren ( const QRegExp & regExp ) const

22.判断继承关系,是true,否false

bool QObject::inherits ( const char * className ) const

例子:

CODE:

QTimer *timer = new QTimer; // QTimer inherits QObject

timer->inherits("QTimer"); // returns true

timer->inherits("QObject"); // returns true

timer->inherits("QAbstractButton"); // returns false

// QLayout inherits QObject and QLayoutItem

QLayout *layout = new QLayout;

layout->inherits("QObject"); // returns true

layout->inherits("QLayoutItem"); // returns false

[Copy to clipboard]

请参阅metaObject() 和qobject_cast()

23.安装事件过滤

void QObject::installEventFilter ( QObject * filterObj )

请参阅 removeEventFilter(), eventFilter(), 和event().

24.判断一个类是不是Widget组件

bool QObject::isWidgetType () const

25.删除定时器

void QObject::killTimer ( int id )

26.得到对象元信息

const QMetaObject * QObject::metaObject () const [virtual]

27.移动到某一线程

void QObject::moveToThread ( QThread * targetThread )

请参阅thread()

28.得到父类

QObject * QObject::parent () const

请参阅setParent() 和children()

29.得到属性值

QVariant QObject::property ( const char * name ) const

请参阅setProperty(), QVariant::isValid(), 和metaObject()

30.得到一个信号的连接数

int QObject::receivers ( const char * signal ) const [protected]

31.删除事件监控

void QObject::removeEventFilter ( QObject * obj )

请参阅installEventFilter(), eventFilter(), 和event()

32.得到信号的发送者

QObject * QObject::sender () const [protected]

33.设置父类

void QObject::setParent ( QObject * parent )

请参阅 parent() 和QWidget::setParent().

34.设置属性值

bool QObject::setProperty ( const char * name, const QVariant & value )

请参阅property() and metaObject()

35.开始一个定时器

int QObject::startTimer ( int interval )

失败返回0,注意这个参数依赖操作系统的时间

请参阅timerEvent(), killTimer(), and QTimer::singleShot().

36.得到些类的线程

QThread * QObject::thread () const

请参阅moveToThread().

37.计时器事件

void QObject::timerEvent ( QTimerEvent * event ) [virtual protected]

请参阅startTimer(), killTimer(), event()

38.翻译函数,关于这个函数的更多描述请参阅本网站国际化变成这一栏目

QString QObject::tr ( const char * sourceText, const char * comment ) [static]

请参阅trUtf8(), QApplication::translate(), and Internationalization with Qt.

39.翻译函数2

QString QObject::trUtf8 ( const char * sourceText, const char * comment ) [static]

QObject宏

1.Q_CLASSINFO ( Name, Value ),他设置的东西可以在 QObject::metaObject()中找到

例子

CODE:

class MyClass : public QObject

{

Q_OBJECT

Q_CLASSINFO("Author", "Pierre Gendron")

Q_CLASSINFO("URL", "http://www.my-organization.qc.ca")

public:

...

};

[Copy to clipboard]

2.Q_ENUMS ( ... )

CODE:

Q_ENUMS(Option AlignmentFlag EditMode TransformationMode)

[Copy to clipboard]

更多请参阅Qt's Property System

3.Q_FLAGS ( ... )

CODE:

Q_FLAGS(Options Alignment)

[Copy to clipboard]

更多请参阅Qt's Property System

4.Q_INTERFACES ( ... )接口生命,一般用于写插件



CODE:

class BasicToolsPlugin : public QObject,

public BrushInterface,

public ShapeInterface,

public FilterInterface

{

Q_OBJECT

Q_INTERFACES(BrushInterface ShapeInterface FilterInterface)

public:

...

};

[Copy to clipboard]

5.Q_OBJECT,略

6.Q_PROPERTY ( ... )

他用来声明一个类的属性,语法如下

CODE:

Q_PROPERTY(type name

READ getFunction

[WRITE setFunction]

[RESET resetFunction]

[DESIGNABLE bool]

[SCRIPTABLE bool]

[STORED bool])

[Copy to clipboard]

例子:

CODE:

Q_PROPERTY(QString title READ title WRITE setTitle)

FROM: /article/1345486.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: