私のコードのデバッグに問題があります。いくつかのQtのスロットに私はこれを実行します。プライベートメンバーを返すときのSegfault
UIElementInterface* interface = qobject_cast <UIElementInterface*>(sender());
を、次の行は私にセグメンテーションフォールトを与える:
QStringList data = interface->getSetDefData();
UIElementInterface
の内部getSetDefData()
のこの行いません
QString hello = interface->getHello();
実装:
class UIElementInterface
{
public:
...
UIElementInterface(const QStringList& data) : m_setDefData(data)
{
std::cout << qPrintable(m_setDefData[0]) << std::endl; //everything as expected here..
}
QStringList getSetDefData(){return m_setDefData;} //gives seg fault
QString getHello(){return QString("Hello");} //works fine
private:
QStringList m_setDefData;
};
私は間違いなく(クラッシュの場合)、送信者であり、それはaは
CheckBox
にキャストする
qobject_cast
を使用したコメントに基づいて
私はこの1つ上の任意の助けをいただければ幸いです:)
EDIT サブクラスQCheckBox
。だから間違いなく私はQObject
をihnerits(私はまた、実装をダブルチェック)。私が戻り値を確認すると、それは0
であることが判明しました。
CheckBox* b = qobject_cast<CheckBox*>(sender());
if (b == 0)
{
std::cout << "Here we are" << std::endl;
}
このように問題があります。私はまだこれがなぜであるか把握する必要がありますが、これはおそらくクラッシュを引き起こします。クラス名sender()->metaObject()->className()
アウト
ANOTHER EDIT印刷が悪の根源を暴露:
QSignalMapper
ケースは、それはクラスではないことUIElementInterface
クラス宣言から明らかです:)
'this == NULL'、NULL(または無効な)ポインタオブジェクトのクラッシュの古典的なケース:' getSetDefData() 'は' this'を参照し、 'getHello()'はそうではありません。 – Dummy00001
[qobject_cast'のドキュメント](http://doc.qt.io/qt-4.8/qobject.html#qobject_cast)は、明らかにヌルポインタと同じ「0」を返すと言っています。チェックしないでください。 –
したがって、 'getSetDefData()'の実装が 'QObject'を継承するクラス内にあれば、これは起こりませんか? – tobilocker