- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从数据库中填充了 QTreeView
。
我将上下文菜单配置为:
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
我有寻找右键单击以打开项目上的上下文菜单的方法。
void MainWindow::on_treeView_customContextMenuRequested(const QPoint &pos)
{
QModelIndex idx = ui->treeView->indexAt(pos);
if (!idx.isValid())
{return;}
else{
QPoint globalPos = ui->treeView->mapToGlobal(pos);
QAction* selectedItem = contextMenu->exec(globalPos);
if (selectedItem){
qDebug () << selectedItem;
}
}
h.文件
QMenu *contextMenu;
如何检查从 QTreeView
中选择的项目是否不是任何项目的父项并且它有父项。
我是否应该在此处包含 QTreeView
和 QStandardItem
代码才能看到,或者这无关紧要?
最佳答案
Qt 文档。有专门的章节介绍这个主题:
我推荐它以获得概述。
关于OP的实际问题:
How do I check if the selected item from QTreeView is not a parent of any item & it has a parent.
QTreeView
继承QAbstractItemView::model()
它提供了指向 QAbstractItemModel
的指针这反过来又为呈现的 TreeView 项提供基础模型数据。
View 中提供的任何 QModelIndex
都应引用此模型。
QAbstractItemModel
提供了多种方法来检索有关模型项的可视化和关系的数据。 QTreeView
使用它,但它也应该用于任何添加的功能。
因此,所选项目不是任何项目的父级 变成“所选项目没有子级”,QAbstractItemModel::hasChildren()
适用于:
bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Returns true if parent has any children; otherwise returns false.
Use rowCount() on the parent to find out the number of children.
Note that it is undefined behavior to report that a particular index hasChildren with this method if the same index has the flag Qt::ItemNeverHasChildren set.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
See also parent() and index().
并且它有一个父可以使用QAbstractItemModel::parent()
检索:
QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const
Returns the parent of the model item with the given index. If the item has no parent, an invalid QModelIndex is returned.
A common convention used in models that expose tree data structures is that only items in the first column have children. For that case, when reimplementing this function in a subclass the column of the returned QModelIndex would be 0.
When reimplementing this function in a subclass, be careful to avoid calling QModelIndex member functions, such as QModelIndex::parent(), since indexes belonging to your model will simply call your implementation, leading to infinite recursion.
Note: This function can be invoked via the meta-object system and from QML. See Q_INVOKABLE.
See also createIndex().
综合起来,OPs 函数应该是这样的:
void MainWindow::on_treeView_customContextMenuRequested(const QPoint &pos)
{
QModelIndex idx = ui->treeView->indexAt(pos);
if (!idx.isValid()
|| !ui->treeView->model()->hasChildren(idx)
&& !ui->treeView->model()->parent(idx).isValid()) {
return;
// bail out -> no context menu for leaf nodes or toplevel nodes
} else {
QPoint globalPos = ui->treeView->mapToGlobal(pos);
QAction* selectedItem = contextMenu->exec(globalPos);
if (selectedItem) {
qDebug () << selectedItem;
}
}
}
我不太确定这是否完全符合 OP 要求的行为。可能有必要修复该条件,但这应该没有那么难。
关于c++ - 如果 QTreeView 项没有子项,则禁用 QAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467239/
当我尝试返回值时,我在 smtdplugin 实现文件中遇到了这个错误。好的,我知道我正在创建一个指向 QAction 的指针,当我尝试返回它时,我不能这样做,因为我的方法正在等待对对象的引用。但我不
我刚刚安装了 Mac OS X 10.8.3 和 Qt Creator 3、XCode 和 XCode 命令行工具。我正在尝试编译一个在另一台计算机上运行的项目,但每次我去“全部构建”时,我都会得到
将 QAction* 添加到 QMenu 时,谁负责删除 QAction* 对象?我在 QMenu 或 QAction 的文档中找不到提到的内容。 void MyClass::contextMenuE
我正在开发一个使用语音来模拟某些操作的应用程序:拖放、选择项目、单击按钮等。现在我有一个需要模拟单击或触发的菜单。 for linktype in globals.linkTypes.keys():
我在 QGraphicsView 子类中创建了 QAction 的实例,并将它连接到我在同一个类中的插槽。 QAction *action = new QAction(tr("New"), thi
我正在运行 osx mountain lion (10.8.3),当我运行下面链接中的代码时,我有一个只有一个操作的菜单... https://gist.github.com/Supm4n/8c705
我正在尝试使用 Qt 制作 IHM,我首先制作了一个基本菜单(文件、编辑...)。到目前为止,我的菜单包含"file",然后显示“新建项目、打开项目、退出”。看起来不错,但我的问题是我似乎无法触发这些
我使用 Qt Designer 创建了一个工具,其中有 3 个 QLineEdits,适用于 translateX、translateY 和 translateZ。对于每个 QLineEdit,我创建
我制作了一个带有 QAction 的菜单栏,它被设置为可检查 self.display_features_action = QtGui.QAction("Show Features", parent)
我想在点击动态创建的QAction时执行带参数的插槽,但是在QMenu中创建QAction时无法添加我的变量,默认的triggered()插槽无法传递。 更清楚地说,我想实现这样的事情: connec
我在菜单项上有一个 Qaction,用于删除我的一个 View 中的选定项。这是我创建 Action 的方式: deleteAct = new QAction( tr("Delete Selected
我在 Visual Studio 中使用 Qt。我想在我的应用程序的 menuBar 中添加 Icons。这是我到目前为止所拥有的: QToolBar *View3DToolBar; QAction
我在 Qt 中创建了一个上下文菜单,我需要菜单中的项目以选中/未选中的方式工作,以便每次点击相应项目时切换。如何将此功能添加到 QAction 中,如下所示? 最佳答案 这是手册中的相关部分。 che
我正在开发GIS软件QGIS的插件。我有一个QAction图标,选中后,只要切换其可见性,就会将组中的图层连接到函数。然后,当未选中它时,它应该断开这些功能,但我收到一个错误: Traceback (
在我的项目中,我显示了一个带有多个 QAction 对象的 QMenu。我希望 QAction 图标在用户将鼠标悬停在其上时发生变化。 这是我当前的代码: QPixmap icons(":/icons
我有一个工具栏或者有几个 QAction。我想在选择 QAction 时更改它的颜色,以便用户可以看到所选的操作。 问题是 QAction 不是 QWidget,所以我们不能使用样式表。有没有办法解决
我有一个 QActions 列表,一些被添加到顶级菜单,一些被添加到顶级子菜单。 有没有办法知道每个 Action 的父菜单名称? QAction *act; 我正在尝试 act->parentWid
Qt 中的大多数类都有默认构造函数。许多类采用 QObject* 或 QWidget* 作为构造函数参数,默认值为 nullptr。 QAction 类也有这样一个以QObject* 为参数的构造函数
我需要使用 qt、c++、qtest(在 eclipse 中)自动化 gui 测试我有一个动态创建的菜单,其中包含动态创建的 QAction,我需要从中测试一个“新选项卡”QAction(在菜单内),
现有代码在 QToolbar 中实现了一些 QAction,如图所示。目的是让选中的Qaction的图标闪烁。 因此,根据 Wizard_Step - 一个类成员 - 每次调用此计时器处理程序时,专用
我是一名优秀的程序员,十分优秀!