实现过程:
在界面1的QTableView中设置右键菜单,可以通过重写contextMenuEvent()函数来实现。
在右键菜单中添加一个“转到源目标”选项,并连接对应的槽函数。
在槽函数中获取所选行的数据,并将其传递给界面2进行显示。
示例代码如下:
界面1的代码:
// 设置右键菜单
void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
QAction *gotoAction = new QAction(tr("转到源目标"), this);
connect(gotoAction, &QAction::triggered, this, &MainWindow::gotoSourceTarget);
menu.addAction(gotoAction);
menu.exec(event->globalPos());
}
// 转到源目标
void MainWindow::gotoSourceTarget()
{
QModelIndexList indexes = ui->tableView->selectionModel()->selectedIndexes();
if (indexes.isEmpty()) {
return;
}
// 获取选中行的数据
QString data1 = ui->tableView->model()->data(indexes.at(0)).toString();
QString data2 = ui->tableView->model()->data(indexes.at(1)).toString();
// 构造数据传递给界面2
QVariantMap data;
data.insert("data1", data1);
data.insert("data2", data2);
// 显示界面2
SecondWindow *secondWindow = new SecondWindow(data, this);
secondWindow->show();
}
界面2的代码:
SecondWindow::SecondWindow(QVariantMap data, QWidget *parent) :
QDialog(parent),
ui(new Ui::SecondWindow)
{
ui->setupUi(this);
// 显示数据
ui->labelData1->setText(data.value("data1").toString());
ui->labelData2->setText(data.value("data2").toString());
}
SecondWindow::~SecondWindow()
{
delete ui;
}
注意:需要在界面2的头文件中包含QVariantMap类的定义。