可以将QTREEVIEW添加到QDockWidget

Can QTreeView be added to QDockWidget

本文关键字:QDockWidget 添加 QTREEVIEW      更新时间:2023-10-16

有人有一个简短的示例(希望在C 中)以说明在qdockwidget中添加qtreeview?

我尝试使用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上?谢谢

jay,我想在这里添加一点。您的第一个建议代码:

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是一个小部件,为什么不允许这样做。另外,例如,我尝试了qtreewidget项目传递的dock-> setwidget(treewidget)。

您可以使用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);
}

另外,如果您想将树在码头中的布局中放置,则可以使用类似的东西:

QWidget* container = new QWidget;
dock->setWidget(container);
QLayout* layout = new QHBoxLayout;
container->setLayout(layout);
QTreeView* treeView = new QTreeView;
layout->addWidget(treeView)

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);

解决的问题。这是我的原始代码:

Qt Code: Switch view
QTreeView w;
w.setModel(&model);
swatch1->setWidget(&w);
w.setEnabled(true);

代码位于对象方法的范围中。堆栈上创建的QTREEVIEW实例将在方法退出后立即被销毁,并将其从码头小部件中删除。这就是为什么代码运行,我看不到树。

Thibaut B.和Jay,非常感谢你们。您的帖子向我证实了我自己编写的代码是正确的,但其他问题是错误的...