私が持っているQTreeWidget
と2つのボタン「+」と「 - 」。「+」を押すと、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)
(コメントコード)してから、新しいアイテムを作成して追加することでそれを実行しようとしましたが、機能しませんでした。では、現在開いているアイテムの編集を閉じるにはどうすればよいですか?
編集:わかりました、最小限の例でコードを追加しました。それを構築するためにあなたがしなければならない唯一のことは、フォームに追加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)で発生しています。
わかりました。これはmacOSのQtのバグのようです。私が行った回避策は次のとおりです。
QTreeWidgetItem* lastItem = getLastTreeWidgetItem(widget);
if (lastItem) {
widget->setDisabled(true);
widget->setDisabled(false);
}
conversation->setFlags(conversation->flags() | Qt::ItemIsEditable);
getLastTreeWidget()
で最後に追加されたアイテムを返す独自のメソッドですQTreeWidget
。これで、ボタンを押して新しいアイテムを追加するたびに、前のアイテムの選択が解除され、新しく追加されたアイテムが編集モードになります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加