【发布时间】:2012-02-08 05:29:21
【问题描述】:
我正在尝试设置一个可以从 MainWindow (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* 指针并将其转换,我尝试将“全局”int 公开并直接访问它等等。有什么想法我需要做什么?
【问题讨论】:
-
尝试使用qobject_cast,并尝试使用
qDebug() << this->parent()。这将有助于弄清楚发生了什么。 -
代码中最后一行来自哪里?它会在演员中崩溃,因为父母没有设置它。我建议您像这样访问您的父母,而是让父小部件将值传递给孩子。
-
最后一行在代码的更下方。我确实确保设置了父级 - new SomeWidget(this).
-
此外,这里关于从父级传递给子级的问题是我有一个作为 QMainWindow 父级的扩展坞,并单独的“项目”子级。我需要孩子们能够看到存储在父级中的变量的当前状态。另一种方法是将每个子节点更新为变量的当前状态,但我只想将其作为最后的手段。
标签: c++ qt segmentation-fault parent global