Qt发出信号std :: string参数debug

时间:2016-12-26 22:10:24

标签: string qt

我在Qt信号槽中使用字符串时遇到问题。由于某种原因,只要涉及带有字符串参数的信号,插槽功能就不会获得该值。我已经粘贴了下面的相关代码和Qt Creator调试会话截图以获取详细信息 -

Class HradDelegate:

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

您可以注意到paramWBMP-FM,在qDebug()行之后设置断点时,

enter image description here

Class 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()行之后设置断点时,

enter image description here

现在paramMainWindow::OnSsnChanged()的值是垃圾,我收到了分段错误。

该项目针对多平台进行编译。它在Ubuntu 14.04 / 16.04和OS X上工作正常。当我在ARM7hf上编译并运行时,我看到上面的错误,它发生在涉及std::string的所有信号上。

有什么我错过的吗?

感谢。

1 个答案:

答案 0 :(得分:0)

std :: string transform QString和QString transform std :: string

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

我使用15.04这是没有错误,你的信号是正确的,并且在connet之前是init 或者你可以建立一个新的专业人士来测试,然后你可以从两者之间的比较中获得结果。