我对Qt很新;请帮我解决问题。
我正在使用一个线程在后台执行密集操作。同时我想更新UI,所以我使用SIGNALS和SLOTS。要更新UI,我会发出信号并更新UI。
让我们考虑下面的示例代码,
struct sample
{
QString name;
QString address;
};
void Update(sample *);
void sampleFunction()
{
sample a;
a.name = "Sachin Tendulkar";
a.address = "India"
emit Update(&a);
}
在上面的代码中,我们创建了一个本地对象并传递了一个本地对象的地址。在Qt文档中,它表示当我们发出信号时,它将被放入队列中,并且迟到它将被传递到窗口。由于我的对象在本地范围内,因此一旦超出范围就会被删除。
有没有办法在信号中发送指针?
答案 0 :(得分:5)
你坚持做错事,为什么?只需发送样本本身:
void Update(sample);
//...
sample a("MSalters", "the Netherlands");
emit Update(a);
答案 1 :(得分:4)
除非您确定此代码是性能瓶颈,否则最好只传递对象的副本而不是指针。
真的,我的意思是。
但是,如果必须使用指针,则使用boost :: shared_ptr,它将自行删除。
void Update(boost::shared_ptr<sample> s);
void sampleFunction()
{
boost::shared_ptr<sample> a = boost::shared_ptr<sample>(new sample());
a->name = "Sachin Tendulkar";
a->address = "India"
emit Update(a);
}