我怎样才能让孩子小部件独立?

问题描述:

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

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

不知道我有权利的问题...

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

  • QWidget *parent = 0是新的窗口小部件的父。如果它是0(默认值),那么新的小部件将是一个窗口。如果不是,则它将是父级的孩子,并受到父级几何的限制(除非您指定Qt::Window作为窗口标志)。

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

所以,如果你通过什么,但NULLparent,你wiget不会是一个单独的窗口,除非你设置第二个参数为QT::Window。这就是你正在发生的事情。因此,您需要设置标志QT::Window,或者创建自己的类,从QWidget中派生它,然后编写一个构造函数,该构造函数将获取一个额外的参数,该参数将成为您需要的指针,同时获取NULLparent

+0

谢谢!是的,你理解正确,你是对的!我需要设置WindowFlags。现在它按需运作! :d – 2012-07-27 09:32:44