gpt4 book ai didi

qt - 为 QTreeView 中的特定项目添加右键菜单

转载 作者:行者123 更新时间:2023-12-03 03:28:07 24 4
gpt4 key购买 nike

我正在使用 Qt Creator 用 C++ 编写 Qt 桌面应用程序。

我在主窗口中声明了一个 TreeView 和一个兼容模型。

现在,我想要树项目的右键菜单。不是针对所有项目,而是针对其中的一部分,例如:针对具有偶数索引的树元素。

我尝试使用以下代码添加一个简单的上下文菜单:

在 .h 文件中:

QStandardItemModel* model;
QMenu* contextMenu;
QAction* uninstallAction;
private slots:
void uninstallAppletClickedSlot();

在 .cpp 文件中:

在构造函数中:

ui->treeView->setModel(model);
contextMenu = new QMenu(ui->treeView);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
uninstallAction = new QAction("Uninstall TA",contextMenu);
ui->treeView->addAction(uninstallAction);
connect(uninstallAction, SIGNAL(triggered()), this, SLOT(uninstallAppletClickedSlot()));

和一个插槽:

void MainWindow::uninstallAppletClickedSlot()
{

}

此代码为我提供了一个包含所需操作的上下文菜单,但是您知道如何仅为具有偶数索引的 QStandardItem 添加此操作吗?

顺便说一句,我通过以下方式将项目添加到 TreeView :

void MainWindow::AddItem(QString name)
{
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *app = new QStandardItem(name);
parentItem->appendRow(app);
}

我用谷歌搜索了很多,但什么也没找到:(

提前致谢!

最佳答案

我会通过以下方式做到这一点:

配置上下文菜单

ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeView, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onCustomContextMenu(const QPoint &)));

实现上下文菜单处理

void MainWindow::onCustomContextMenu(const QPoint &point)
{
QModelIndex index = ui->treeView->indexAt(point);
if (index.isValid() && index.row() % 2 == 0) {
contextMenu->exec(ui->treeView->viewport()->mapToGlobal(point));
}
}

关于qt - 为 QTreeView 中的特定项目添加右键菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198427/

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