1

我有一个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,新项目添加到当前项目下方(仍处于编辑模式)。

我想要的是当前项目存在编辑模式,并且新添加的项目成为焦点并进入编辑模式。

我试图通过首先获取 a 中的最后一项QTreeWidget并调用closePersistentEditor(lastItem)(注释代码)然后创建和添加新项目来做到这一点,但它没有用。那么,如何关闭当前打开的项目编辑?

编辑:好的,我添加了带有最小示例的附加代码。要构建它,您唯一需要做的就是添加QTreeWidgetQPushButton到表单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) 上。

4

1 回答 1

0

好的,看起来这是 Qt for macOS 中的一个错误。我所做的解决方法如下:

QTreeWidgetItem* lastItem = getLastTreeWidgetItem(widget);
if (lastItem) {
    widget->setDisabled(true);
    widget->setDisabled(false);
}
conversation->setFlags(conversation->flags() | Qt::ItemIsEditable);

getLastTreeWidget()是我自己的方法,它返回最后添加的项目QTreeWidget。现在每次我按下按钮添加新项目时,以前的项目都会被取消选择,新添加的项目会进入编辑模式。

于 2020-10-27T20:32:06.797 回答