
创建一个从 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 () 。
HxLauncher: Launch Android applications by voice commands