6

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

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 方法,还是我必须定义一些“伪子”关系并开发一个系统来正确删除伪子?

4

2 回答 2

4

您可以使用QWidget::setWindowFlags(Qt::Window)使您的小部件成为一个单独的窗口。也看看Qt::WindowFlags

于 2012-07-27T09:25:24.327 回答
1

不确定我的问题是否正确...

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

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

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

因此,如果您传递除以外NULL的任何内容parent,您的 wiget 将不会是一个单独的窗口,除非您将第二个参数设置为QT::Window。这就是你正在发生的事情。因此,您需要设置标志QT::Window,或者创建自己的类,从 派生它QWidget,并编写一个构造函数,该构造函数接受一个额外的参数,该参数将是您需要的指针,同时获得NULLas parent

于 2012-07-27T09:24:38.060 回答