2016-12-26 16 views
0

文字列が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、あるお気づきのように、

enter image description here

クラスメインウィンドウ:

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

paramの値がMainWindow::OnSsnChanged()でゴミと私はセグメンテーションフォールトエラーが発生します。

プロジェクトはマルチプラットフォーム用にコンパイルされます。 Ubuntu 14.04/16.04とOS Xでは正常に動作します。ARM7hfでコンパイルして実行すると、上記のエラーが表示され、std::stringを含むすべてのシグナルが発生します。

私が見逃したことはありますか?

ありがとうございました。

+0

QString – eyllanesc

+0

を使用するかstd :: stringを登録する – eyllanesc

+0

init()メソッドのようにstd :: stringを登録しました。 HradDelegate :: OnSsnChanged()はQt固有のものにアクセスできない純粋なC++ライブラリから呼び出されるため、QStringを使用することもできません。 – kaushal

答えて

0

のstd :: stringはQStringのとQStringのがのstd ::文字列私はエラーではありません15.04を使用

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

を変換する変換、あなたの信号は権利であるとconnet 前のinitまたはuは、新しいプロを構築することができますテストするには、2つの間のcomparonから結果を得ることができます。

関連する問題