Qt Object 类简介--Qt 类简介专题(二) 第二页

    技术2024-03-28  17

    Qt Object 类简介--Qt 类简介专题(二)

     

    2、和connect 成双成对的disconnect

    取消从sender对象发送的signal和对象receiver中的member的连接。

    当这两个有关对象中的一个被销毁时,这个信号——槽连接就被移除了。

    disconnect()通常被用在三种方式下,正如下面的例子所描述的。

    1. 取消连接到一个对象的信号的任何事物:

    disconnect( myObject, 0, 0, 0 );

    等于非静态重载函数

    myObject->disconnect();

     

    2. 取消连接到一个特定信号的任何事物:

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

    等于非静态重载函数

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

     

    3. 取消一个特定接收者的所有连接:

    disconnect( myObject, 0, myReceiver, 0 );

    等于非静态重载函数

    myObject->disconnect( myReceiver );

    0可以用做一个通配符,意义可能分别为“任何信号”、“任何接受对象”或者“一个接受对象中的任何槽”。

    sender不能为0。(你不能在一个调用中取消来自多于一个对象的信号的连接。)

    如果signal为0,它取消所有和这个对象的信号连接的receiver和member。如果不是,只由特定信号被取消联接。

    如果receiver为0,它取消连接到signal的任何事物。如果不是,只有receiver中的槽被取消连接。

    如果member为0,它取消连接到receiver的任何事物。如果不是,只有名为member的槽被取消联接并且其它所有槽被保留。如果receiver被省去,member必须为0,所以你不能取消所有对象中同一特定名称槽的连接。

     

    3、installEventFilter的使用

    void QObject::installEventFilter ( const QObject * obj )

    安装事件过滤器obj到这个对象。

    事 件过滤器就是接收所有被发送到这个对象的事件的对象。这个过滤器可以停止事件或者把它再转给这个对象。事件过滤器obj通过它的 eventFilter()函数来接收事件。如果事件被过滤了(比如,停止了),eventFilter()函数必须返回真,否则它必须返回假。

    如果有多个事件过滤器被安装到同一个对象上,最后一个被安装的事件过滤器将先被激活。

    实例:

    #include <qwidget.h> class MyWidget : public QWidget { Q_OBJECT public: MyWidget( QWidget *parent = 0, const char *name = 0 ); protected: bool eventFilter( QObject *, QEvent * ); }; MyWidget::MyWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { // 为父对象(如果有的话)安装一个过滤器 if ( parent ) parent->installEventFilter( this ); } bool MyWidget::eventFilter( QObject *o, QEvent *e ) { if ( e->type() == QEvent::KeyPress ) { // 对于键被按下进行特殊处理 QKeyEvent *k = (QKeyEvent *)e; qDebug( "Ate key press %d", k->key() ); return TRUE; // 吃掉了这个事件 } else { // 标准事件处理 return QWidget::eventFilter( o, e ); } }

    例如,QAccel类使用这种技术来截取快捷键被按下。

    警告:如果在你的eventFilter()函数中你删除了接收对象,请确认返回真。否则,Qt会把这个事件转给被删除的对象并且程序也许会崩溃。

     

    4、tr国际化使用

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

    返回sourceText的翻译版本,或者如果没有合适的版本返回sourceText它自己。翻译上下文是comment的QObject(默认为空)。所有使用Q_OBJECT宏的QObject对象有这个函数的重新实现,把子类名作为上下文。

    最新回复(0)