Обновление указателя с использованием сигналов и слотов - PullRequest
2 голосов
/ 14 апреля 2010

Я очень новичок в Qt; Пожалуйста, помогите мне решить проблему.

Я использую поток для выполнения интенсивных операций в фоновом режиме. Тем временем я хочу обновить пользовательский интерфейс, поэтому я использую СИГНАЛЫ и СЛОТЫ. Для обновления пользовательского интерфейса я посылаю сигнал и обновляю пользовательский интерфейс.

Давайте рассмотрим пример кода,

struct sample
{
    QString name;
    QString address;
};

void Update(sample *);

void sampleFunction()
{
    sample a;
    a.name = "Sachin Tendulkar";
    a.address = "India"
    emit Update(&a);
}

В приведенном выше коде мы создаем локальный объект и передаем адрес локального объекта. В документе Qt говорится, что когда мы испускаем сигнал, он помещается в очередь, а позднее он доставляется в окна. Поскольку мой объект находится в локальной области видимости, он будет удален после выхода из области видимости.

Есть ли способ отправить указатель в сигнале?

Ответы [ 2 ]

5 голосов
/ 14 апреля 2010

Вы настаиваете на том, чтобы поступать неправильно, почему? Просто отправьте сам образец:

void Update(sample);
//...
sample a("MSalters", "the Netherlands");
emit Update(a);
4 голосов
/ 14 апреля 2010

Если вы не определили, что этот код является узким местом в производительности, лучше просто передать копию объекта, а не указатель.

Действительно, я имею в виду.

Однако, если вам нужно использовать указатели, тогда используйте 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);    
}
...