QT:“实例”模型/视图类使用

例CH801 实现一个简单的文件目录浏览器,完成效果如图8.2所示:

image

 创建工程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 的出错问题。

image

以上开发环境: 

 QT Creator 4.11.1;

Base on Qt 5.14.2 (MSVC 2017 ,32bit ) .

posted @ 2025-09-29 21:23  samrv  阅读(7)  评论(0)    收藏  举报