场景编辑器需要将场景中的物体作为列表显示。QT中使用QDockWidget做是很漂亮的。
我一开始的做法是,写个类继承QWidget,将QTreeWidget作为成员。然后添加QDockWidget
m_dockwidget = new QDockWidget(tr(" List"), m_main_window);
m_dockwidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_dockwidget->setObjectName(QString::fromAscii("dockwidget"));
m_objectlist_tree = new ObjectTreeWidget(m_dockwidget);
m_dockwidget->setWidget(m_objectlist_tree);
m_main_window->addDockWidget(Qt::LeftDockWidgetArea, m_dockwidget);
m_dockwidget->raise();
但是运行结果却是,QTreeWidget是固定大小,不能随QDockWidget缩放。网上搜索发现有很多人遇到和我一样的情况。
最后的解决办法是使用layout。
在自定义的ObjectTreeWidget里使用:
m_objectlist_tree = new QTreeWidget(this);
m_layout = new QVBoxLayout(this);
m_layout->addWidget(m_objectlist_tree);
问题就解决了