如何使子窗口小部件成为独立窗口?

6

假设我有一个主 Widget,用于查看一些对象。这些对象的名称存储在 QListWidget 中。现在,当用户选择一个对象(QListWidget 的一个条目)时,我想打开另一个窗口中的另一个 Widget,并将该对象的名称作为参数传递。

class MainWidget
{
Q_OBJECT

public slots:
    void openSelection();

};

class ChildWidget
{
public:
    ChildWidget(QString name, QWidget* parent = nullptr);
};

void MainWidget::openSelection()
{
    QString selectedObjectName = ui->objectsNamesList->selectedItem()->text();
    ChildWidget* detaildedWiew = new ChildWidget(selectedObjectName, this);
    detaildedWiew->show();
}

当我这样做时,子小部件会打开,但它没有自己的空间。它被锁定在父元素的区域内。我需要释放孩子们,在屏幕上自由奔跑,独立于其父元素。我该如何做?有没有Qt的方法,还是我必须定义一些“伪子代”关系并开发一个系统来正确删除伪子代?

我需要释放孩子们。 - Galaxy
2个回答

4
您可以使用 QWidget::setWindowFlags(Qt::Window) 将您的小部件设置为独立窗口。 还可以查看 Qt::WindowFlags

1

不确定我是否理解了问题...

QWidget 的默认构造函数可能接受两个参数:

  • QWidget *parent = 0 是新窗口的父级。如果它是 0(默认值),则新窗口将是一个独立窗口。如果不是,则它将是 parent 的子级,并受到 parent 几何约束(除非您指定 Qt::Window 作为窗口标志)。

  • Qt::WindowFlags f = 0(如果可用)设置窗口标志;默认值适用于几乎所有小部件,但要获得例如没有窗口系统框架的窗口,您必须使用特殊标志。

因此,如果您将任何东西传递给 parent,除了 NULL,您的小部件将不会是一个独立的窗口,除非您将第二个参数设置为 QT::Window。这就是发生在您身上的事情。因此,您需要设置标志 QT::Window,或创建自己的类,从 QWidget 派生,并编写一个构造函数,该构造函数需要一个额外的参数,该参数将是您需要的指针,同时将 NULL 作为 parent


谢谢!是的,你理解得很正确,你是对的!我需要设置WindowFlags。现在它按照预期工作了! :D - Martin Drozdik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接