如何在Qt中创建一个恒定的只读模型/视图架构?

Mar*_*dik 2 c++ qt model-view

假设我想使用QTableViewQAbstractTableModel类实现模型/视图架构.所以我继承了QAbstractTableModel创建类MyModel并实现QAbstractTableModel接口.然后QTableView使用该setModel方法将此模型的实例连接到实例.

 #include <QtGui/QApplication>
 #include <QtGui/QTableView>
 #include "mymodel.h"

 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);
     QTableView tableView;
     MyModel myModel(0);       
     tableView.setModel( &myModel );
     tableView.show();
     return a.exec();
 }
Run Code Online (Sandbox Code Playgroud)

但是如何才能使模型只读?我无法申报

const MyModel myModel(0);
Run Code Online (Sandbox Code Playgroud)

因为setModel采用非常量参数.我只重新实现了QAbstractTableModel的常量方法.

Ano*_*ous 5

const在这种情况下你是什​​么意思?你想达到什么目的?

您是否希望您的基础数据是不可变的 - 因此该版本QTableView是不可能的?然后就是禁止编辑模型 - 例如,不执行setData.

还要注意的是标准实施

Qt::ItemFlags QAbstractItemModel::flags ( const QModelIndex & index ) const
Run Code Online (Sandbox Code Playgroud)

将不会返回Qt::ItemIsEditable哪个就足够了.

您必须注意不要在UI之外修改模型(请注意,在不发送适当信号的情况下在外部修改它可能会导致错误的事情).但是因为这是你的代码 - 这应该不是问题.