Qt испускает сигнал std:: string parameter debug

У меня проблема, когда строки используются в Qt signal-slot. По какой-то причине функция slot не получает значение всякий раз, когда задействован сигнал со строковым параметром. Я вставил соответствующие фрагменты кода ниже и скриншоты сеанса отладки Qt Creator для деталей —

Класс HradDelegate:

void HradDelegate::OnSsnChanged(std::string param) {
  qDebug() << "HradDelegate::OnSsnChanged() " << param.c_str();
  emit ssnChanged(param);
}

Как вы можете заметитьparam, этоWBMP-FM, когда точка останова установлена после qDebug()линии,

Введите описание изображения здесь

Класс MainWindow:

void MainWindow::init() {
  qRegisterMetaType<std::string>("std::string");
  connect(m_HradDelegate, SIGNAL(ssnChanged(std::string)), this, SLOT(OnSsnChanged(std::string)));
}

void MainWindow::OnSsnChanged(std::string param) {
  qDebug() << "MainWindow::OnSsnChanged() " << param.c_str();
  // extra code removed for clarity
}

Когда точка останова установлена после qDebug()линии,

Введите описание изображения здесь

Теперь значение paramis garbage inMainWindow::OnSsnChanged(), и я получаю ошибку ошибки сегментации.

Проект компилируется для нескольких платформ. Он отлично работает на Ubuntu 14.04 / 16.04 и OS X. Когда я компилирую и запускаю на ARM7hf, я вижу ошибку выше, и это происходит со всеми сигналами, связанными std::string.

Есть что-то, что я пропустил?

Спасибо.

1 ответ

  1. std:: string transform QString и QString transform std:: string

    std::string  name="1234";
    QString data = QString::fromStdString(data);
    name = data.toStdString()
    

    я использую 15.04, который не ошибка, ваш сигнал правильный и init перед connet
    или u может построить новый pro для тестирования, то u может получить результат от compareson между двумя.