我想显示一个包含一些数据(数字)的表格。我对此有一个
QTableView
。它显示了我的数据,但每个单元格都包含一个不需要的圆角正方形(可能是一个不起作用的复选框)。它们看起来很糟糕,占用空间并且会掩盖我的数据。
它们为何出现?我怎样才能删除它们?
代码:
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QTableView>
#include <QHeaderView>
class MyModel : public QAbstractTableModel
{
public:
int rowCount(const QModelIndex& index) const override {return 5;}
int columnCount(const QModelIndex& index) const override {return 2;}
QVariant data(const QModelIndex& index, int role) const override
{
if (role == Qt::DisplayRole)
return 3000 + index.row() * 100 + index.column();
else
return 0;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow w;
QTableView widget;
MyModel model;
widget.setModel(&model);
widget.horizontalHeader()->hide();
widget.verticalHeader()->hide();
w.setCentralWidget(&widget);
w.show();
return a.exec();
}
截图:
我在 Windows 11 中使用 Qt 6.8.0。
QAbstractItemModel::data()
文档指出:
注意:如果您没有要返回的值,请返回无效的(默认构造的)
。QVariant
有很多角色定义,但您只需查找
Qt::DisplayRole
并返回 0
即可完成其余所有操作。有可能,您正在接收 Qt::CheckStateRole
角色并为其返回“假”值,这就是出现复选框的原因。
按照文档的说明进行操作 - 返回一个空的
QVariant
:
QVariant data(const QModelIndex& index, int role) const override
{
if (role == Qt::DisplayRole)
return 3000 + index.row() * 100 + index.column();
else
// return 0;
return QVariant();
}