2

我对 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 文档中,它说当我们发出一个信号时,它会被放入队列中,稍后它会被传递到窗口。由于我的对象在本地范围内,一旦超出范围就会被删除。

有没有办法在信号中发送指针?

4

2 回答 2

5

你坚持做错事,为什么?只需发送样品本身:

void Update(sample);
//...
sample a("MSalters", "the Netherlands");
emit Update(a);
于 2010-04-14T12:40:18.503 回答
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);    
}
于 2010-04-14T12:47:07.670 回答