对于大多数专家来说,这可能是一个简单的问题,但在过去的几个小时里,我一直在为此烦恼。
我有这个布局,我在头文件中声明如下:
private:
QVBoxLayout *vlayout;
然后我在构造函数中初始化它:
QVBoxLayout *vlayout = new QVBoxLayout();
ui->mainscroll_menu->setWidgetResizable(true);
ui->mainscroll_menu->widget()->setLayout(vlayout);
vlayout->setSpacing(1);
vlayout->setAlignment(Qt::AlignTop);
vlayout->setMargin(0);
然后我尝试在插槽中使用它,例如:
void MainWidget::on_pushButton_clicked()
{
vlayout->addWidget(menuitem);
}
这将编译好,但它会在运行时失败并使我的应用程序崩溃。运行调试时,它显示我尝试使用vlayout
时崩溃。
如果我初始化插槽内的布局,那么它将在不崩溃的情况下工作,但这会带来其他问题,因为我必须初始化每次我想要使用它的布局。
我做错了什么?
答案 0 :(得分:1)
问题在于构造函数中的这一行:
QVBoxLayout *vlayout = new QVBoxLayout();
这是在构造函数中创建一个局部变量,该变量以相同的名称隐藏成员变量。当您尝试在任何其他方法中使用成员变量时,最终会使用未初始化的值 - 因此崩溃。
修复方法是简单地将行更改为:
vlayout = new QVBoxLayout();