我在Qt信号槽中使用字符串时遇到问题。由于某种原因,只要涉及带有字符串参数的信号,插槽功能就不会获得该值。我已经粘贴了下面的相关代码和Qt Creator调试会话截图以获取详细信息 -
Class HradDelegate:
void HradDelegate::OnSsnChanged(std::string param) {
qDebug() << "HradDelegate::OnSsnChanged() " << param.c_str();
emit ssnChanged(param);
}
您可以注意到param
为WBMP-FM
,在qDebug()
行之后设置断点时,
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()
行之后设置断点时,
现在param
中MainWindow::OnSsnChanged()
的值是垃圾,我收到了分段错误。
该项目针对多平台进行编译。它在Ubuntu 14.04 / 16.04和OS X上工作正常。当我在ARM7hf上编译并运行时,我看到上面的错误,它发生在涉及std::string
的所有信号上。
有什么我错过的吗?
感谢。
答案 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 或者你可以建立一个新的专业人士来测试,然后你可以从两者之间的比较中获得结果。