如何正确声明布局,以便我可以在我的小部件中的任何位置使用它

时间:2014-05-21 05:17:25

标签: qt layout

对于大多数专家来说,这可能是一个简单的问题,但在过去的几个小时里,我一直在为此烦恼。

我有这个布局,我在头文件中声明如下:

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时崩溃。

如果我初始化插槽内的布局,那么它将在不崩溃的情况下工作,但这会带来其他问题,因为我必须初始化每次我想要使用它的布局。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题在于构造函数中的这一行:

QVBoxLayout *vlayout = new QVBoxLayout();

这是在构造函数中创建一个局部变量,该变量以相同的名称隐藏成员变量。当您尝试在任何其他方法中使用成员变量时,最终会使用未初始化的值 - 因此崩溃。

修复方法是简单地将行更改为:

vlayout = new QVBoxLayout();