Qt:如何正确定义此代码的信号参数?
Qt: How to properly define the signal argument for this code?
我在 Ubuntu 14.04 上使用 Qt 4.8。
目前,我有以下代码:
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(data);
}
--
定义 newMessage
信号(在头文件中)的正确方法是什么:
signals:
void newMessage(const QByteArray & newData);
或:
signals:
void newMessage(QByteArray newData);
如上所示,信号是在退出 processMessage
函数之前发出的,因此 QByteArray data
在发出该信号后将不再存在...
因此,我担心定义信号的第一种方法是它作为参数传递对对象(实例)的引用,该对象(实例)在发出 newMessage
后不再存在。
提前感谢您的时间和耐心等待!
顺便说一句:我的应用程序是单线程的。
PS:如果应用是多线程的,情况会有所不同吗?
如上一个回答'how to pass qobject as argument from signal to slot in qt connect'所述,建议将Object作为指针传递。
所以,信号声明是:
signals:
void newMessage(QByteArray* newData);
而信号的发射是:
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(&data);
}
两者都可以,但最常见的版本是
signals:
void newMessage(const QByteArray &newData);
关于您对第一个选项的担忧:只能通过 Qt::DirectConnection
传递引用(Qt::AutoConnection
基本上导致单线程 signal/slot 连接),因为其他人要求信号参数可存储在 QVariant
中,而引用则不能。
有了这样的 Qt::DirectConnection
,当连接到信号的所有插槽都已执行时,发射将 "return"。
所以在这一点上没有人会需要 data
对象了。
我在 Ubuntu 14.04 上使用 Qt 4.8。
目前,我有以下代码:
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(data);
}
--
定义 newMessage
信号(在头文件中)的正确方法是什么:
signals:
void newMessage(const QByteArray & newData);
或:
signals:
void newMessage(QByteArray newData);
如上所示,信号是在退出 processMessage
函数之前发出的,因此 QByteArray data
在发出该信号后将不再存在...
因此,我担心定义信号的第一种方法是它作为参数传递对对象(实例)的引用,该对象(实例)在发出 newMessage
后不再存在。
提前感谢您的时间和耐心等待!
顺便说一句:我的应用程序是单线程的。
PS:如果应用是多线程的,情况会有所不同吗?
如上一个回答'how to pass qobject as argument from signal to slot in qt connect'所述,建议将Object作为指针传递。
所以,信号声明是:
signals:
void newMessage(QByteArray* newData);
而信号的发射是:
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(&data);
}
两者都可以,但最常见的版本是
signals:
void newMessage(const QByteArray &newData);
关于您对第一个选项的担忧:只能通过 Qt::DirectConnection
传递引用(Qt::AutoConnection
基本上导致单线程 signal/slot 连接),因为其他人要求信号参数可存储在 QVariant
中,而引用则不能。
有了这样的 Qt::DirectConnection
,当连接到信号的所有插槽都已执行时,发射将 "return"。
所以在这一点上没有人会需要 data
对象了。