文字列がQt信号スロットで使用されているときに問題が発生しています。何らかの理由で、文字列パラメータを持つ信号が含まれているときはいつも、スロット関数は値を取得していません。私は以下のコードと詳細のQt Creatorをデバッグセッションのスクリーンショットの関連部分を貼り付けました -Qt emit signal std :: stringパラメータのデバッグ
クラスHradDelegate:
void HradDelegate::OnSsnChanged(std::string param) {
qDebug() << "HradDelegate::OnSsnChanged() " << param.c_str();
emit ssnChanged(param);
}
あなたはparam
は、ブレークポイントがqDebug()
行の後に設定されているWBMP-FM
、あるお気づきのように、
クラスメインウィンドウ:
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
を含むすべてのシグナルが発生します。
私が見逃したことはありますか?
ありがとうございました。
QString – eyllanesc
を使用するかstd :: stringを登録する – eyllanesc
init()メソッドのようにstd :: stringを登録しました。 HradDelegate :: OnSsnChanged()はQt固有のものにアクセスできない純粋なC++ライブラリから呼び出されるため、QStringを使用することもできません。 – kaushal