gpt4 book ai didi

c++ - 选择 QTableView 中的列时显示上下文菜单

转载 作者:行者123 更新时间:2023-11-30 05:36:49 31 4
gpt4 key购买 nike

我有一个 QTableView,我试图显示一个上下文菜单,该菜单仅在选择整列时出现。我还需要为进一步目的选择的列的编号。我将选择模型(此处重新实现为 TabSelModel)的 currentChanged() 信号连接到此插槽

void TabSelModel::CheckSelection(const QModelIndex& mod)
{
qDebug() << "Inside mod.column=" << mod.column();
QModelIndexList ls = selectedIndexes();

foreach(QModelIndex i, ls)
qDebug() << i.column() << "," << i.row();

if(isColumnSelected(mod.column(),mod)) //never evaluates to true
ColSelected = qMakePair(true,mod);
}

我第一次选择表格的第一列时,输出就是

Inside mod.column= 0

当我选择下一列时,我得到

Inside mod.column= 1
0 , 0
0 , 1
0 , 2
0 , 3
...
0, 66

这意味着 mod.column() 给出 1 但 selectedIndexes()[0].column() 给出 0 这就是为什么(我认为)我从来没有管理过进入 if 子句。这是为什么?以及如何解决这个问题?

分析行为似乎 selectedIndexes() 注册了先前选择的索引,而我通过 currentChanged() 收到的索引是当前的。如果这是真的,我仍然不知道如何解决这个问题。

最佳答案

你可以看看这个链接。 https://forum.qt.io/topic/31233/how-to-create-a-custom-context-menu-for-qtableview

假设您通过单击标题突出显示一列:

table->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(table->horizontalHeader(),
SIGNAL(customContextMenuRequested(QPoint)),
SLOT(customHeaderMenuRequested(QPoint)));

.

void Widget::customHeaderMenuRequested(QPoint pos){
int column=table->horizontalHeader()->logicalIndexAt(pos);

QMenu *menu=new QMenu(this);
menu->addAction(new QAction("Header Action 1", this));
menu->addAction(new QAction("Header Action 2", this));
menu->addAction(new QAction("Header Action 3", this));
menu->popup(table->horizontalHeader()->viewport()->mapToGlobal(pos));
}

要选择列:

ui->tableView->currentIndex().column();

关于c++ - 选择 QTableView 中的列时显示上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444706/

31 4 0