从 QDialog::layout 中删除子项

发布于 2024-10-13 04:55:41 字数 489 浏览 3 评论 0原文

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 w 更好的解决方案吗?

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 is also a child of the main's window layout. The problem is when an object of MyDialog is destroy, it destroy w too whereas it was remove in the MyDialog's destructor;

Have you got a better solution than clone the QListWidget w ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜灵血窟げ 2024-10-20 04:55:41

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

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

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

I think you can do smf like this:

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

But i think you doin smf wrog if you have to clone QListView.
Is't it easy to make context menu for QListView and run this dialog for specific QListViewItem?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文