在tabWidget的两个QTableViews中显示两个不同的CSV文件,可以按照以下步骤进行操作:
下面是一个示例代码,演示了如何在tabWidget的两个QTableViews中显示两个不同的CSV文件:
#include <QtWidgets>
class CustomTableModel : public QAbstractTableModel
{
public:
CustomTableModel(QObject *parent = nullptr)
: QAbstractTableModel(parent)
{
}
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 m_data.isEmpty() ? 0 : m_data.first().size();
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return m_data[index.row()][index.column()];
return QVariant();
}
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
{
if (index.isValid() && role == Qt::EditRole) {
m_data[index.row()][index.column()] = value.toString();
emit dataChanged(index, index, {role});
return true;
}
return false;
}
Qt::ItemFlags flags(const QModelIndex &index) const override
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled;
}
void loadData(const QString &filePath)
{
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
m_data.clear();
while (!in.atEnd()) {
QString line = in.readLine();
QStringList fields = line.split(",");
m_data.append(fields);
}
file.close();
reset();
}
private:
QList<QStringList> m_data;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
tabWidget = new QTabWidget(this);
setCentralWidget(tabWidget);
tableView1 = new QTableView(this);
tableView2 = new QTableView(this);
tabWidget->addTab(tableView1, "Table 1");
tabWidget->addTab(tableView2, "Table 2");
model1 = new CustomTableModel(this);
model2 = new CustomTableModel(this);
tableView1->setModel(model1);
tableView2->setModel(model2);
connect(tabWidget, &QTabWidget::currentChanged, this, &MainWindow::loadCsvFile);
}
private slots:
void loadCsvFile(int index)
{
if (index == 0) {
QString filePath = "path_to_csv_file1.csv";
model1->loadData(filePath);
} else if (index == 1) {
QString filePath = "path_to_csv_file2.csv";
model2->loadData(filePath);
}
}
private:
QTabWidget *tabWidget;
QTableView *tableView1;
QTableView *tableView2;
CustomTableModel *model1;
CustomTableModel *model2;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
在上述示例代码中,自定义了一个CustomTableModel类,用于管理CSV文件的数据。在MainWindow类的构造函数中,创建了两个QTableView控件和两个CustomTableModel对象,并将它们关联起来。通过connect函数,将tabWidget的currentChanged信号与loadCsvFile槽函数连接起来,当用户切换tab页时,会自动加载对应的CSV文件并更新数据模型。
请注意,示例代码中的"path_to_csv_file1.csv"和"path_to_csv_file2.csv"需要替换为实际的CSV文件路径。
这样,当用户在tabWidget中切换tab页时,对应的QTableView控件就会显示不同的CSV文件内容。
领取专属 10元无门槛券
手把手带您无忧上云