StupidBeauty
Read times:1118Posted at:Sat May 14 00:19:54 2011
- no title specified

Qt4.7.0文档翻译:QObject类参考,QObject Class Reference

文来自Kate dNA的勃客: http://stupidbeauty.com/KNA/2011/05/ qt4-7-0文档翻译:qobject类参考,qobject-class-reference/

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

创建一个从 sender 对象的 signal 信号到 receiver 对象的 method 方法的一个 type 类型的连接。如果连接成功的话 ,返回真;否则返回假。

在指定 signal 信号和 method 方法时 ,你必须使用 SIGNAL() SLOT() 宏,比如:

QLabel *label = new QLabel;

QScrollBar *scrollBar = new QScrollBar;

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

label, SLOT(setNum(int)));

这个例子确保咯那个文本标签一直显示出滚动条的当前值。注意,信号和信号 槽参数中不能有任何的变量名,只能有类型名。比如 ,下面的代码就会出错:

// 错的

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

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

一个信号也可以连接到另一个信号

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()));

}

在这个例子中 MyWidget 构造函数将一个私有成员变量的一个信号连接到一个与 MyWidget 相关的名字上 ,使得外面可以访问它。

一个信号可以连接到很多个信号槽和信号上。还可以把很多信号连接到同一个信号 槽上。

如果一个信号被连接到多个信号槽的话,那么,当那个信号被发射时,那些信号 槽会按照连接时的顺序被触发。

如果这个函数成功地将信号连接到信号 槽的话,它就会返回真。如果它无法创建那个连接的话 ,它会返回假,比如: QObject 无法验证 signal method 的存在性 ,或者它们的特征(signatures)不兼容。

默认 地,针对你进行的每个连接 ,都会发射一个信号;对于重复的连接勒,会发射两个信号 。你可以通过调用一次 disconnect ()来打破所有的这些连接 。如果你 传入的 type 参数是 Qt::UniqueConnection 的话,那么 ,只有在连接没有重复的情况下才会 被建立。如果已经有一个相同连接 (duplicate)(完全相同的对象上完全相同的信号和完全相同的信号 ),那么这 个连接会失败,并且返回假。

选的参数 type 指定的是要建立的连接的类型。特别 地,它决定咯 :某个特定的信号是立即传递到一个信号 槽上还是放到队列里稍后再传递。如果信号是放到队列中 ,那么它的参数必须是 Qt的元对象 (meta-object)系统能识别的类型,因为Qt 需要复制那些参数 ,将它们存储在一个事件中。如果你 试着使用一个排队的连接,而产生咯以下错误消息的话

QObject::connect: Cannot queue arguments of type 'MyType'

(Make sure 'MyType' is registered using qRegisterMetaType().)

那么就在你建立连接之前调用 qRegisterMetaType ()来将这个数据类型注册一下

注意 这个函数是 线程安全 的( thread-safe

参见 disconnect () sender ()和 qRegisterMetaType ()

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands