我怎样才能让孩子小部件独立?
问题描述:
假设我有一个主要的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中的默认构造函数可以接受两个参数:
QWidget *parent = 0
是新的窗口小部件的父。如果它是0(默认值),那么新的小部件将是一个窗口。如果不是,则它将是父级的孩子,并受到父级几何的限制(除非您指定Qt::Window
作为窗口标志)。Qt::WindowFlags f = 0
(如果可用)设置窗口标志;默认情况下几乎适用于所有窗口小部件,但要获得例如不带窗口系统窗口的窗口,必须使用特殊标志。
所以,如果你通过什么,但NULL
到parent
,你wiget不会是一个单独的窗口,除非你设置第二个参数为QT::Window
。这就是你正在发生的事情。因此,您需要设置标志QT::Window
,或者创建自己的类,从QWidget
中派生它,然后编写一个构造函数,该构造函数将获取一个额外的参数,该参数将成为您需要的指针,同时获取NULL
为parent
。
谢谢!是的,你理解正确,你是对的!我需要设置WindowFlags。现在它按需运作! :d – 2012-07-27 09:32:44