Ber*_*ard 5 c++ mysql user-interface qt qtableview
我QMap有个叫map.我map用我的数据库中的几行数据初始化它.现在我将它发送map到另一个包含GUI类的类.在我的GUI中,我有一个TableView项.我需要map在这个TableView中以任何顺序显示它.
我已经看过几个例子,但它们都是一个只有一个字段的矢量.他们使用另一个类来形成视图.我想知道是否有人之前已经这样做过,可以帮助我.
将其包装QMap在子类中QAbstractTableModel并将其设置为视图.以下是一个基本功能示例:
文件"mapmodel.h"
#ifndef MAPMODEL_H
#define MAPMODEL_H
#include <QAbstractTableModel>
#include <QMap>
class MapModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum MapRoles {
KeyRole = Qt::UserRole + 1,
ValueRole
};
explicit MapModel(QObject *parent = 0);
int rowCount(const QModelIndex& parent = QModelIndex()) const;
int columnCount(const QModelIndex& parent = QModelIndex()) const;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
inline void setMap(QMap<int, QString>* map) { _map = map; }
private:
QMap<int, QString>* _map;
};
#endif // MAPMODEL_H
Run Code Online (Sandbox Code Playgroud)
文件"mapmodel.cpp"
#include "mapmodel.h"
MapModel::MapModel(QObject *parent) :
QAbstractTableModel(parent)
{
_map = NULL;
}
int MapModel::rowCount(const QModelIndex& parent) const
{
if (_map)
return _map->count();
return 0;
}
int MapModel::columnCount(const QModelIndex & parent) const
{
return 2;
}
QVariant MapModel::data(const QModelIndex& index, int role) const
{
if (!_map)
return QVariant();
if (index.row() < 0 ||
index.row() >= _map->count() ||
role != Qt::DisplayRole) {
return QVariant();
}
if (index.column() == 0)
return _map->keys().at(index.row());
if (index.column() == 1)
return _map->values().at(index.row());
return QVariant();
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
// ...
QMap<int, QString> map;
map.insert(1, "value 1");
map.insert(2, "value 2");
map.insert(3, "value 3");
MapModel mapmodel;
mapmodel.setMap(&map);
YourTableView.setModel(&mapmodel);
// ...
Run Code Online (Sandbox Code Playgroud)
它将显示填充的表视图,如下所示:
