从QDialog :: layout中删除子项

时间:2011-01-18 11:24:54

标签: c++ qt parent-child

class MyDialog : public QDialog
{
    public:
    MyDialog(QListWidget * w)
        : m_w(w)
    {
        m_layout = new QGridLayout(this);
        m_layout.addWidget( w );

        this->exec();
    } 

    ~MyDialog() {
        m_layout->removeWidget( m_w );
    }

    private:
    QGridLayout * m_layout;
    QListWidget * m_w;  
    }  

w也是主窗口布局的子项。问题是当MyDialog的一个对象被破坏时,它会破坏w,而它在MyDialog的析构函数中被删除;

你有没有比克隆QListWidget更好的解决方案?

1 个答案:

答案 0 :(得分:1)

我认为你可以像这样做smf:

~MyDialog()
{
   m_w.reparent(main_window);
}

但是如果你必须克隆QListView,我认为你做了smf wrog。 为QListView创建上下文菜单并为特定的QListViewItem运行此对话框是不是很容易?