【发布时间】:2021-01-20 14:10:55
【问题描述】:
我有一个QTreeWidget 和两个按钮“+”和“-”。当我按“+”时,我想将新项目添加到 QTreeWidget 并且我希望该项目处于编辑模式。我设法用以下代码做到了这一点(每次按下“+”时都会调用它):
// QTreeWidgetItem* lastItem = getLastItem();
// if (lastItem) { widget->closePersistentEditor(lastItem); }
QTreeWidgetItem* item = new QTreeWidgetItem(widget, {"100000"});
item->setFlags(item->flags() | Qt::ItemIsEditable);
widget->addTopLevelItem(item);
widget->editItem(item);
问题是当我尝试添加一个新项目,但在添加之前不要退出编辑模式(按 Enter 或其他键)。我收到错误 edit: editing failed 并在当前项目下方添加了新项目(仍处于编辑模式)。
我想要的是当前项目存在编辑模式并且新添加的项目成为焦点并进入编辑模式。
我尝试通过首先获取QTreeWidget 中的最后一项并调用closePersistentEditor(lastItem)(注释代码)然后创建和添加新项目来做到这一点,但它不起作用。那么,如何关闭当前打开的项目编辑?
编辑:
好的,我添加了带有最小示例的附加代码。构建它只需将QTreeWidget 和QPushButton 添加到mainwindow.ui 表单并将该按钮连接到on_btnAdd_clicked():
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTreeWidget>
#include <QTreeWidgetItem>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btnAdd_clicked()
{
QTreeWidgetItem* item = new QTreeWidgetItem(ui->treeWidget, {"100000"});
item->setFlags(item->flags() | Qt::ItemIsEditable);
ui->treeWidget->addTopLevelItem(item);
ui->treeWidget->editItem(item);
}
EDIT2:这发生在带有 Qt 5.12 的 macOS (Mojave) 上。
【问题讨论】:
-
QTreeWidget没有getLastItem方法。 -
@user6528273,我想
getLastItem是 OP-s 自己的方法。 @dosvarog,您能否分享有关您的代码的更多详细信息(甚至可能是演示该问题的可重现代码 sn-p)?你在视图后面使用模型吗?如果是,您是否通过模型添加新项目? -
@user6528273 是的,这是我自己的方法。
-
这发生在带有 Qt 5.12 的 macOS 上 看到 - 如果没有足够的细节,寻找解决方案就像在黑暗的房间里拍摄。无论如何,现在它是有道理的,我已经撤回了我的近距离投票。因此,它看起来要么是已解决的错误,要么是 Mac 特定问题。我正在使用 Qt 5.15.1 的 Win 10,所以我无法提供进一步的帮助。
-
这似乎是Qt中的一个错误,现在我发现了一些类似问题的错误报告:bugreports.qt.io/browse/QTBUG-26838。我不知道默认行为是我正在寻找的行为,所以我从来没有想过它可能是一个错误。还是谢谢!
标签: c++ macos qt qtreewidget qt5.12