MainWindow(QMainWindow)レベルで複数の子からアクセスできる変数を設定しようとしています。問題は、子供(または孫)からアクセスしようとするたびに、私はセグメンテーション違反を取得します。ここで子クラスのQMainWindow変数にアクセスできない
は関与コードのモックアップだ:
//MainWindow.h
...
public:
int getVariable();
void setVariable(int i);
...
private:
int globalInt;
SomeWidget *myWidget;
//MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
...
this->globalInt = 10;
myWidget = new SomeWidget();
myWidget->setParent(this);
....
}
int getVariable()
{
return this->globalInt;
}
void setVariable(int i)
{
this->globalInt = i;
}
...
//SomeWidget.cpp
...
int x = (static_cast<MainWindow*>(this->parent()))->getVariable(); //Causes Segfault
...
私は正直に私が間違ってやっている見当がつかない。私は親に新しいMainWindow *ポインタを作成してキャストしようとしましたが、 "global" intをpublicにして直接アクセスするなどの試みをしました。
に試してみてください[qobject_cast](http://developer.qt.nokia.com/doc/qt-4.8/qobject.html#qobject_cast)を使用し、 'qDebug()<< this-> parent()'を試してください。それは何が起こったのか理解するのに役立ちます。 – graphite
コードの最後の行はどこですか?親はそれが設定されていないので、それは俳優でクラッシュします。私はそのようなあなたの親にアクセスすることをお勧めし、その代わりに親ウィジェットがその値を子に渡すようにします。 –
最後の行がコードのさらに下にあります。私は親が設定されていることを確認しました - 新しいSomeWidget(これ)。 – giraffee