Qt创建左目录树右表格时出现的问题
如题,想做一个左目录树右表格,具体如下:

左目录由QTreeView和重定义模型QFileSystemModel组成,具体代码如下:
FileSystemModel::FileSystemModel(QObject *parent)
: QFileSystemModel(parent)
{
this->setRootPath(QString(""));
this->setFilter(QDir::Drives | QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Dirs | QDir::Hidden | QDir::System);
}
int FileSystemModel::columnCount(const QModelIndex &parent) const
{
return 1;
}
QVariant FileSystemModel::data(const QModelIndex &index, int role) const
{
if(index.isValid())
{
if(role == Qt::DecorationRole)
{
return QVariant();
}
else if(role == Qt::DisplayRole)
{
if(index.column() == 0)
{
if(this->fileInfo(index).isRoot()) //判断是否是根结点
{
return QDir::toNativeSeparators(QString("%1").arg(this->fileInfo(index).absolutePath()));
}
}
}
}
return QFileSystemModel::data(index, role);
}
右表格由QTableView和重定义模型QFileSystemModel组成,具体代码如下:
TbFileSystemModel::TbFileSystemModel(QObject *parent)
: QFileSystemModel(parent)
{
}
QVariant TbFileSystemModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
{
switch (section) {
case 0:
return QString("名称");
case 1:
return QString("日期");
case 2:
return QString("类型");
case 3:
return QString("大小");
}
}
return QVariant();
}
QVariant TbFileSystemModel::data(const QModelIndex &index, int role) const
{
if(index.isValid())
{
if(role == Qt::DecorationRole)
{
if(index.column() == 0)
{
if(isDir(index))
return QIcon(":/res/folder.png");
else
return QIcon(":/res/file.png");
}
}
}
return QFileSystemModel::data(index, role);
}
主窗口具体代码如下:
m_splitter = new QSplitter(Qt::Horizontal);
//初始化左目录树
m_treeView=new QTreeView(this);
m_fsModel = new FileSystemModel(this);
m_sortModel = new QSortFilterProxyModel(this);
m_sortModel->setSourceModel(m_fsModel);
m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive);
m_sortModel->sort(0, Qt::AscendingOrder);
m_treeView->setModel(m_sortModel);
m_treeView->setHeaderHidden(true);
m_treeView->hideColumn(1);
m_treeView->hideColumn(2);
m_treeView->hideColumn(3);
m_treeView->collapseAll();
m_treeView->setFocusPolicy(Qt::NoFocus);
m_splitter->addWidget(m_treeView);
m_tableView = new QTableView(this);
m_tbModel = new TbFileSystemModel;
m_tableView->setModel(m_tbModel);
m_tableView->horizontalHeader()->setSectionsClickable(false);
m_tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
m_tableView->horizontalHeader()->setStretchLastSection(true);
m_tableView->horizontalHeader()->setMinimumSectionSize(25);
m_tableView->horizontalHeader()->setFont(QFont("Microsoft Yahei", 9, QFont::Normal));
m_tableView->horizontalHeader()->setStyleSheet("QHeaderView::section {color: #707070; border-bottom:none !important;}");
m_tableView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
m_tableView->setColumnWidth(0, 200);
m_tableView->setColumnWidth(1, 140);
m_tableView->setColumnWidth(2, 75);
m_tableView->setShowGrid(false); //去掉网格线
m_tableView->setFocusPolicy(Qt::NoFocus); //去掉选中虚线
m_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
m_splitter->addWidget(m_tableView);
connect(m_treeView, SIGNAL(clicked(QModelIndex)), m_tableView, SLOT(setRootIndex(QModelIndex)));
运行后,由于左目录树和右表格数据模型不一样,所以报错:QAbstractItemView::setRootIndex failed : index must be from the currently set model。各位大佬,请问由什么办法能够上述问题吗?欢迎各位大佬们指点一二,小弟感激不尽,在线等!!!
相关推荐
Qt目录树制作
在本文中,我们将深入探讨如何使用Qt5框架创建一个目录树视图,即"Qt目录树制作"。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。
Qt目录树源代码
Qt是一个强大的跨平台应用程序开发框架,特别适合于创建图形用户界面(GUI)应用。
Qt5.8 Qtreeview目录树 QAxWidget打开word、pdf文件
总结起来,这个项目展示了如何结合`QTreeView`和`QAxWidget`在Qt5.8中创建一个能够展示目录树并能打开多种文件类型的界面。
DirView_目录树demo_
**UI设计**:理解如何通过Qt Designer创建和编辑用户界面,以及如何将设计转换为代码。
【QT开发】表头视图QHeaderView类详解及实战应用
QHeaderView是Qt提供的一个功能强大且灵活的表头视图类,通过本篇文章的学习,你应该对QHeaderView有了全面的理解,能够在自己的项目中正确使用它。QHeaderView在用户界面中帮助你更好地展示和管理表头数据,实现交互式和响应式的数据展示,有助于创建用户友好和高效的数据表、电子表格、目录树等应用场景。


