信号与槽的连接有Qt::DirectConnection, Qt::QueuedConnection等模式,用Qt::QueuedConnection模式的话,信号与槽之间的参数就有可能需要转存了。
例如:
typedef struct my_type
{
QString q_str;
int i;
}MY_TYPE;
signals: signal_method(MY_TYPE str )
slot: slot_method(MY_TYPE str )
QT会把信号发过来的参数拷贝一份,然后等槽要执行的时候,交给槽。
但如果我们定义信号、槽的时候,若果用的是引用参数,情况又会如何? 从测试来看,QT不会拷贝参数。这也符合引用的使用。但问题来了,信号传递过来的引用是局部变量,信号发射完就过了生命周期,这样槽执行拿到的引用还会有效吗? 测试的结果来看,信号传递的引用过了生命周期,但槽还能拿到引用的内容。
C++的引用像unix 文件系统 硬链接还是软连接呢? #include <QtGui/QApplication>
#include "iostream"
#include "qdebug"
using namespace std;
typedef struct aa
{
QString q_str;
int i;
}AA;
AA t3;
AA &t = t3;
void pass();
int main(int argc, char *argv[])
{
pass();
cout << qPrintable(t.q_str) << endl;
int ci;
cin >> ci;
}
void pass()
{
AA *t2 = new AA();
t2->i = 5;
t2->q_str = "my test str";
t = *t2;
delete t2;
}
结果的输出为何还是"my test str"? 是delete 没有重置 t2指向的内存?
[ 此帖被jasonhit在2009-08-27 13:08重新编辑 ]