Qt QTableView 使用教程:创建表格并添加数据 (C++)
下面是一个使用 QTableView 的简单例程,演示如何在 Qt 中创建一个表格并向其中添加数据:
#include <QtWidgets/QApplication>
#include <QtWidgets/QTableView>
#include <QtWidgets/QHBoxLayout>
#include <QtCore/QAbstractTableModel>
// 定义一个简单的表格模型类
class MyModel : public QAbstractTableModel
{
public:
MyModel(QObject *parent = nullptr)
: QAbstractTableModel(parent)
{
// 初始化表格数据
m_data = {
{1, 'John', 'Doe'},
{2, 'Jane', 'Doe'},
{3, 'Bob', 'Smith'},
{4, 'Alice', 'Johnson'}
};
}
int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
Q_UNUSED(parent)
return m_data.size();
}
int columnCount(const QModelIndex &parent = QModelIndex()) const override
{
Q_UNUSED(parent)
return 3;
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole)
return m_data[index.row()][index.column()];
return QVariant();
}
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return QVariant('ID');
case 1:
return QVariant('First Name');
case 2:
return QVariant('Last Name');
default:
return QVariant();
}
}
return QVariant(section + 1);
}
private:
QVector<QVector<QString>> m_data;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个表格视图和一个表格模型
QTableView tableView;
MyModel model;
tableView.setModel(&model);
// 将表格视图添加到一个布局中并显示
QHBoxLayout layout;
layout.addWidget(&tableView);
QWidget widget;
widget.setLayout(&layout);
widget.show();
return a.exec();
}
在这个例程中,我们首先定义了一个简单的表格模型类MyModel,它继承自QAbstractTableModel。这个模型类中包含了一个QVector类型的成员变量m_data,用于存储表格中的数据。在模型类的构造函数中,我们初始化了这个变量,并在rowCount和columnCount函数中返回了表格的行数和列数。在data和headerData函数中,我们根据QModelIndex对象的行号和列号来返回单元格的数据和标题。
在main函数中,我们创建了一个QTableView对象和一个MyModel对象,并将模型对象设置为表格视图的模型。然后,我们将表格视图添加到一个水平布局中,并将这个布局设置为窗口的主布局。最后,我们显示了这个窗口,并启动了Qt应用程序的事件循环。运行程序后,我们可以看到一个简单的表格显示在程序窗口中。
原文地址: https://www.cveoy.top/t/topic/na5b 著作权归作者所有。请勿转载和采集!