QT:“实例”模型/视图类使用
例CH801 实现一个简单的文件目录浏览器,完成效果如图8.2所示:

创建工程DirModeEx,
N:文件>>新建文件或项目,
项目选 "Qt Widgets Application" 下一步,名称为 DirModeEx ,下一步; Build System=qmake,下一步;
Class Name 为 MainWIndow, Base class 为QMainWIndow ,取消 “Generate form”, 下一步。。。一直到完成。
在源文件main.cpp中的具体代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>
#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>
#include <QAbstractItemView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDirModel model;
/* 新建三种不同的VIEW对象,以便文件目录可以以三种不同的方式显示 */
QTreeView tree;
QListView list;
QTableView table;
tree.setModel(&model);
list.setModel(&model);
table.setModel(&model);
QItemSelectionModel *itemSelectModel = new QItemSelectionModel(&model);
tree.setSelectionModel(itemSelectModel);
list.setSelectionModel(tree.selectionModel());
table.setSelectionModel(tree.selectionModel());
// 双击 树目录,同时将结果显示在列表、表结构视图中
QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)), &list,
SLOT(setRootIndex(QModelIndex)) );
QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,
SLOT(setRootIndex(QModelIndex)));
QSplitter *splitter = new QSplitter;
splitter->addWidget(&tree);
splitter->addWidget(&list);
splitter->addWidget(&table);
splitter->setWindowTitle(QObject::tr("Model/View"));
splitter->show();
// MainWindow w;
// w.show();
return a.exec();
}
其中与书中
tree.setSelectionModel(QAbstractItemView::MultiSelection);
改为
QItemSelectionModel *itemSelectModel = new QItemSelectionModel(&model);
tree.setSelectionModel(itemSelectModel);
解决 Error: cannot initialize a parameter of type ‘QItemSelectionModel *’ with an rvalue of type ‘QAbstractItemView::SelectionMode’ qtreeview.h 的出错问题。

以上开发环境:
QT Creator 4.11.1;
Base on Qt 5.14.2 (MSVC 2017 ,32bit ) .
优质生活从拆开始
浙公网安备 33010602011771号