QCombox 下拉列表能实现 Tree 状结构吗?

Jonix 2012-11-22 01:08:46
QCombox 下拉列表能实现 Tree 状结构吗?
...全文
741 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
戒摘星 2014-11-27
  • 打赏
  • 举报
回复
引用 7 楼 Jonix 的回复:
[quote=引用 5 楼 yuan8222 的回复:] 我大概试了下,看来是可行的,不过是需要细化下,你看下效果: 代码如下: C/C++ code?123456789101112131415161718192021222324252627#include <QtGui/QApplication>#include <QTreeView>#include <QFileSystemModel>#include <QComb……
看到你回贴前已经试出来了,QTreeWidget 也是可以的,只是少了一句:

    QTreeWidget* View = new QTreeWidget(ui->comboBox);
    ui->comboBox->setModel(View.model()); // 前面加上这句就OK了。
    ui->comboBox->setView(View);
非常感谢。 [/quote] 请问我按你说的这样做了但是那个树点击展开也要消失郁闷!只是展开又没有选择item怎么处理这个问题呀!
Jonix 2012-11-23
  • 打赏
  • 举报
回复
引用 5 楼 yuan8222 的回复:
我大概试了下,看来是可行的,不过是需要细化下,你看下效果: 代码如下: C/C++ code?123456789101112131415161718192021222324252627#include <QtGui/QApplication>#include <QTreeView>#include <QFileSystemModel>#include <QComb……
看到你回贴前已经试出来了,QTreeWidget 也是可以的,只是少了一句:

    QTreeWidget* View = new QTreeWidget(ui->comboBox);
    ui->comboBox->setModel(View.model()); // 前面加上这句就OK了。
    ui->comboBox->setView(View);
非常感谢。
  • 打赏
  • 举报
回复
Note: If you want to use the convenience views (like QListWidget, QTableWidget or QTreeWidget), make sure to call setModel() on the combobox with the convenience widgets model before calling this function.
__阿飞__ 2012-11-22
  • 打赏
  • 举报
回复
我大概试了下,看来是可行的,不过是需要细化下,你看下效果:

代码如下:

#include <QtGui/QApplication>
#include <QTreeView>
#include <QFileSystemModel>
#include <QComboBox>
#include <QDir>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

// 创建文件系统模型
QFileSystemModel *model = new QFileSystemModel();
// 指定要监视的目录
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView();
tree->setModel(model);
tree->setRootIndex(model->index(QDir::currentPath()));
QComboBox *b = new QComboBox();
b->resize(400, 20);
b->setView(tree);
b->setModel(model);
b->show();


return a.exec();
}
__阿飞__ 2012-11-22
  • 打赏
  • 举报
回复
应该是
#include <QTreeView>
而不是QTreeWidget. 下面给你一个使用MVC的代码参考下:

#include <QApplication>
#include <QFileSystemModel>
#include <QTreeView>
#include <QListView>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    // 创建文件系统模型
    QFileSystemModel model;
    // 指定要监视的目录
    model.setRootPath(QDir::currentPath());

    // 创建树型视图
    QTreeView tree;
    // 为视图指定模型
    tree.setModel(&model);
    // 指定根索引
    tree.setRootIndex(model.index(QDir::currentPath()));

    // 创建列表视图
    QListView list;
    list.setModel(&model);
    list.setRootIndex(model.index(QDir::currentPath()));

    tree.show();
    list.show();

    return app.exec();
}
Jonix 2012-11-22
  • 打赏
  • 举报
回复
引用 2 楼 yuan8222 的回复:
sorry,上面那个方法写错了,应该是:QComboBox::setView ( QAbstractItemView * itemView ),这个应该不难了吧,很简单就可以实现了. 引用 1 楼 yuan8222 的回复:应该可以的,有个方法叫做:setModel ( QAbstractItemModel * ),可以用界面MVC来实现.结合: QTreeView,……
好象不行哎,直接崩溃了:

    QTreeWidget* View = new QTreeWidget(ui->comboBox);
    ui->comboBox->setView(View);
Qt 也没自带个example的 ...
__阿飞__ 2012-11-22
  • 打赏
  • 举报
回复
sorry,上面那个方法写错了,应该是:QComboBox::setView ( QAbstractItemView * itemView ),这个应该不难了吧,很简单就可以实现了.
引用 1 楼 yuan8222 的回复:
应该可以的,有个方法叫做:setModel ( QAbstractItemModel * ),可以用界面MVC来实现.结合: QTreeView, QAbstractListModel.
__阿飞__ 2012-11-22
  • 打赏
  • 举报
回复
应该可以的,有个方法叫做:setModel ( QAbstractItemModel * ),可以用界面MVC来实现.结合: QTreeView, QAbstractListModel.

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧