У меня проблема, когда строки используются в 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()
линии,
Теперь значение param
is garbage inMainWindow::OnSsnChanged()
, и я получаю ошибку ошибки сегментации.
Проект компилируется для нескольких платформ. Он отлично работает на Ubuntu 14.04 / 16.04 и OS X. Когда я компилирую и запускаю на ARM7hf, я вижу ошибку выше, и это происходит со всеми сигналами, связанными std::string
.
Есть что-то, что я пропустил?
Спасибо.
std:: string transform QString и QString transform std:: string
я использую 15.04, который не ошибка, ваш сигнал правильный и init перед connet
или u может построить новый pro для тестирования, то u может получить результат от compareson между двумя.