以下是一个简单的例子,展示如何在QTableView中实现右键菜单,并输出当前行的列标题和数据:
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QMenu>
#include <QAction>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建数据模型
QStandardItemModel model(4, 3);
model.setHorizontalHeaderLabels(QStringList() << "Name" << "Age" << "Gender");
// 添加数据
model.setItem(0, 0, new QStandardItem("Tom"));
model.setItem(0, 1, new QStandardItem("20"));
model.setItem(0, 2, new QStandardItem("Male"));
model.setItem(1, 0, new QStandardItem("Mary"));
model.setItem(1, 1, new QStandardItem("25"));
model.setItem(1, 2, new QStandardItem("Female"));
model.setItem(2, 0, new QStandardItem("John"));
model.setItem(2, 1, new QStandardItem("30"));
model.setItem(2, 2, new QStandardItem("Male"));
model.setItem(3, 0, new QStandardItem("Lucy"));
model.setItem(3, 1, new QStandardItem("22"));
model.setItem(3, 2, new QStandardItem("Female"));
// 创建表格视图
QTableView view;
view.setModel(&model);
view.show();
// 右键菜单
QMenu menu(&view);
QAction action("Show Info", &menu);
menu.addAction(&action);
QObject::connect(&action, &QAction::triggered, [&]() {
QModelIndex index = view.currentIndex();
if (index.isValid()) {
// 获取列标题和数据
QString title = model.headerData(index.column(), Qt::Horizontal).toString();
QString data = model.data(index).toString();
qDebug() << "Column: " << title << ", Data: " << data;
}
});
QObject::connect(&view, &QTableView::customContextMenuRequested, [&](const QPoint& pos) {
menu.exec(view.mapToGlobal(pos));
});
return app.exec();
}
首先,我们创建了一个QStandardItemModel
作为数据模型,并添加了一些数据。然后,我们创建了一个QTableView
并将其设置为使用该模型。接下来,我们创建了一个右键菜单,并添加了一个“Show Info”选项。当用户选择此选项时,我们获取当前行和列的索引,并使用headerData()
方法获取列标题和data()
方法获取数据。最后,我们将这些信息输出到控制台。
为了实现右键菜单,我们连接了QTableView
的customContextMenuRequested
信号,并在回调函数中执行了菜单的exec()
方法,从而显示右键菜单。