有没有人有一个简短的例子(希望用C ++)来说明将QTreeView添加到QDockWidget?
我尝试将QLayout用作中间对象,如:
QFile file(":/default.txt");
file.open(QIODevice::ReadOnly);
TreeModel model(file.readAll());
file.close();
QTreeView w;
w.setModel(&model);
w.setWindowTitle(QObject::tr("Simple Tree Model"));
QGridLayout *layout;
layout = new QGridLayout;
layout->addWidget(&w, 0, 0, 1, 3);
swatch1->setLayout(layout);
其中swatch1属于QDockWidget类型。我的代码运行,但树没有出现在DockWidget上。
我看到了QTreeWidget示例,但由于树视图会经常更改,我更喜欢使用QTreeView。
有没有人能提供一个关于如何将QTreeView放到QDockWidget上的简短示例?感谢
答案 0 :(得分:1)
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QDockWidget* dock = new QDockWidget;
setCentralWidget(dock);
QTreeView* treeView = new QTreeView;
dock->setWidget(treeView);
QFileSystemModel* treeModel = new QFileSystemModel;
treeModel->setRootPath(QDir::currentPath());
treeView->setModel(treeModel);
}
我尝试了类似的东西。但是,在编译期间,dock-> setWidget(treeView)失败并且有一条错误消息说不允许这样做。我无法理解,因为QTreeView是一个小部件,为什么不允许这样做。或者,例如,我尝试使用dock-> setWidget(treeWidget)来传递编译的QTreeWidget项。
答案 1 :(得分:1)
问题解决了。这是我的原始代码:
Qt Code: Switch view
QTreeView w;
w.setModel(&model);
swatch1->setWidget(&w);
w.setEnabled(true);
代码属于对象方法的范围。一旦方法退出,就会销毁在堆栈上创建的QTreeView实例,并且它将从停靠窗口小部件中删除。这就是代码运行的原因,我看不到树。
Thibaut B.和Jay,非常感谢你们。您的帖子向我确认我自己编写的代码是正确的,但其他错误......
答案 2 :(得分:0)
您可以使用QDockWidget::setWidget
设置停靠窗口的内容。例如
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QDockWidget* dock = new QDockWidget;
setCentralWidget(dock);
QTreeView* treeView = new QTreeView;
dock->setWidget(treeView);
QFileSystemModel* treeModel = new QFileSystemModel;
treeModel->setRootPath(QDir::currentPath());
treeView->setModel(treeModel);
}
或者,如果您希望将树放在Dock中的布局中,您可以使用类似的东西:
QWidget* container = new QWidget;
dock->setWidget(container);
QLayout* layout = new QHBoxLayout;
container->setLayout(layout);
QTreeView* treeView = new QTreeView;
layout->addWidget(treeView)
答案 3 :(得分:0)
QDockWidget是一个QWidget,所以如果swatch1
是你的DockWidget:
QMainWindow mw;
QTreeView *w = new QTreeView(&mw);
QDockWidget *swatch1 = new QDockWidget("Simple Tree Model", &mw);
swatch1->setWidget(w);
// addDockWidget is a method of QMainWindow
mw.addDockWidget(Qt::RightDockWidgetArea, swatch1);