可以将QTREEVIEW添加到QDockWidget
Can QTreeView be added to QDockWidget
有人有一个简短的示例(希望在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,非常感谢你们。您的帖子向我证实了我自己编写的代码是正确的,但其他问题是错误的...
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 可以将QTREEVIEW添加到QDockWidget
- 添加多个 QDockWidget