gpt4 book ai didi

c++ - Qt/C++ : QTableView contextmenu and passing through information

转载 作者:行者123 更新时间:2023-11-30 03:09:08 26 4
gpt4 key购买 nike

我想在我的 QTableView 中的单元格上使用上下文菜单,所以首先我连接:

connect(ui->tblTimesheet,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(sheetContextMenu(const QPoint &)));

该连接的插槽如下:

void wndMyWindow::sheetContextMenu(const QPoint &pos){
QMenu *menu = new QMenu;
QModelIndex cell = ui->tblTimesheet->indexAt(pos);
// Make sure the right click occured on a cell!
if(cell.isValid()){
QString myid=cell.sibling(cell.row(),0).data().toString();
menu->addAction("Remove item", this, SLOT(sheetRemoveItem()));
menu->exec(ui->tblTimesheet->mapToGlobal(pos));
}
}

创建菜单并在菜单中放置一个 Action ,该 Action 在单击该 Action 时调用一个函数。但是,我想将变量 myid 传递到第二个插槽中。下面列出了该插槽:

void wndMyWindow::sheetRemoveItem(){
qDebug("Sure I'm here, but what info do I have?");
return;
}

我不太确定该怎么做,有人可以帮忙吗?

最佳答案

在这方面,与回调和其他信号/槽机制相比,Qt 信号/槽很糟糕。你真的不能附加额外的信息。

不过,您可以做一些事情:

  1. 创建一个对象来存储您要发送的信息,给它一个插槽并附加到您要响应的信号,发出一个包含该信息的新信号,附加到该信号。

  2. 使用 Qt 信号映射将一些小的数据变化附加到信号。

  3. 您可以在 Qt 插槽中获取发件人。这可能是您需要的信息。 (请参阅有关信号/插槽的 Qt 文档)。

如果这些方法都不适合您,很抱歉,您已经被吓傻了。我正在研究一种自动创建 #1 并附加到 boost::signal 的方法,这会更强大,但它需要大量的艰苦工作,因为 Qt 与 C++ 预处理器和模板不兼容。

祝你好运。

关于c++ - Qt/C++ : QTableView contextmenu and passing through information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4355941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com