Вывод сообщения в System tray QT

Всем добрый день!

Столкнулся с проблемой при выводе сообщения в System Tray. Клиент получает дейтаграмму с сервера, дальше переводит её в QString и после этого должен отправить системное уведомление. Дело в том, что уведомление отправляется, но оно пустое, есть только тема. Понимаю, что где-то перемудрил с типами данных, помогите, пожалуйста, разобраться.

myDatagram.resize(my_udp->pendingDatagramSize());
my_udp->readDatagram(myDatagram.data(),myDatagram.size());
QString myString = QString::fromStdString(myDatagram.toStdString());
const char* str = myString.toStdString().c_str();
mySystemTrayIcon->showMessage(tr("Server"), tr(str));

С дейтаграммой, переведенной в QString, проблем нет, она приходит (проверял выводом через QMessageBox). тут, скорее, я неправильно использую showMessage для mySystemTrayIcon.

Заранее спасибо!


Ответы (2 шт):

Автор решения: user7860670

В выражении const char* str = myString.toStdString().c_str(); создается временный объект std::string, который сразу же уничтожается, оставляя вас с невалидным указателем.

→ Ссылка
Автор решения: Александр

Не знаю точно в какой кодировке приходят данные по UDP, предположим что в UTF-8.

myDatagram.resize(my_udp->pendingDatagramSize());
my_udp->readDatagram(myDatagram.data(),myDatagram.size());
QString myString = QString::fromUtf8(myDatagram);
mySystemTrayIcon->showMessage(tr("Server"), tr(myString.toUtf8()));

Вот так делать вообще нельзя скорее всего, так как пытаетесь использовать str после того как объякт std::string уже уничтожен.

const char* str = myString.toStdString().c_str();
→ Ссылка