• 4098阅读
  • 5回复

[提问]Qt Layout 一定要动态分配么? [复制链接]

上一主题 下一主题
离线zhaorui
 

只看楼主 倒序阅读 楼主  发表于: 2011-11-15
关键词: QLayout
为什么这段代码在关闭程序的时候会弹出错误呢?我觉得是Layout静态分配的问题,谁能帮我具体解答一下?
MainDialog.h
#ifndef MAINDIALOG_H
#define MAINDIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QTabWidget>
#include <QTreeWidget>
#include <QLayout>

class MainDialog : public QDialog
{
    Q_OBJECT
public:
    MainDialog(QWidget *parent=0);
    ~MainDialog();
private:
    QTabWidget *catalog;
    QTreeWidget *person;
    QTreeWidget *affair;
    QPushButton searchButton;
    QLineEdit searchLineEdit;

    QHBoxLayout hLayout;
    QVBoxLayout vLayout;
};

#endif // MAINDIALOG_H
-----------------------------------------------------------------------------------------------------------------------------
MainDialog.cpp
#include "MainDialog.h"
MainDialog::MainDialog(QWidget *parent)
    :QDialog(parent)
{
    QStringList strList1;
    QStringList strList2;
    strList1<<"name"<<"secret";
    strList2<<"time"<<"location"<<"content";
    person = new QTreeWidget();
    affair = new QTreeWidget();
    person->setHeaderLabels(strList1);
    affair->setHeaderLabels(strList2);

    catalog = new QTabWidget();
    catalog->addTab(person,tr("person"));
    catalog->addTab(affair,tr("affair"));

    hLayout;
    hLayout.addWidget(&searchLineEdit);
    hLayout.addWidget(&searchButton);

    vLayout;
    vLayout.addWidget(catalog);
    vLayout.addLayout(&hLayout);
    setLayout(&vLayout);
}

MainDialog::~MainDialog()
{
    //delete person;
    //delete affair;
    //delete catalog;
}

离线jdwx

只看该作者 1楼 发表于: 2011-11-15
回 楼主(zhaorui) 的帖子
vLayout;
vLayout.addWidget(catalog);
vLayout.addLayout(&hLayout);

vLayout 在哪里声明的?
Qt是在程序退出的时候自动删除控件,所以控件要new出来
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zhaorui

只看该作者 2楼 发表于: 2011-11-15
我把头文件加进来了,麻烦您再看看
离线zhaorui

只看该作者 3楼 发表于: 2011-11-15
回 1楼(jdwx) 的帖子
我把头文件加进来了 , 麻烦您再看看
离线jdwx

只看该作者 4楼 发表于: 2011-11-15
回 3楼(zhaorui) 的帖子
本质上new和不用new的控件一样,但是用Qt就要按着Qt推荐的方法来用。
你的问题可能因为Qt的自动删除机制导致的,Qt  delete在栈上的控件。
所以还是new控件吧。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 5楼 发表于: 2011-11-15
还是不要这样用的好
所有ui中的组件最好是按照Qt的方式new出来
具体原因我记得dbzhang的博文中讲解的挺清楚的
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个