gpt4 book ai didi

c++ - 添加时选择 QListWidgetItem

转载 作者:行者123 更新时间:2023-11-28 04:16:59 25 4
gpt4 key购买 nike

我在表单中有一个 QListWidget,其中的 QListWidgetItem 显示“添加新的”。当我点击它时,我希望发生一系列事情:

  1. QInputDialog::getText 请求新项目的内容。
  2. 使用给定文本将新项目添加到列表中。
  3. 列表已排序,但保留在末尾的“添加新”除外(这是通过删除“添加新”项、排序和再次添加删除的项目)。
  4. 已选择新项目。

最后一部分是我遇到的麻烦。我尝试了许多不同的方法,所有方法都导致相同的结果:我想要选择的项目有一个虚线边框,它被理解为已选择(例如通过 ui->list->selectedItems()) ,但选择颜色保留在“添加新”之前的最后一项上。

我尝试了什么

  • item->setSelected(true);
  • ui->list->setCurrentItem(item);
  • ui->list->setCurrentRow(ui->list->row(item);

我注意到了什么

当调试器打开并设置断点缓慢执行这些步骤时,我注意到一切似乎都运行良好,但在我调用的函数完成之前 UI 没有更新。

此外,当我想从另一个按钮单击调用的槽中选择列表中的给定项目时,它可以与 item->setSelected(true);(以及其他)一起正常工作.

我的猜测:我无法在添加它的同一函数中选择该项目,因为我无法以图形方式选择尚不存在的内容。

关于如何实现这一目标的任何猜测?

注意事项

如果您遇到同样的问题,请阅读所选答案的评论,这实际上是一个信号问题!

最佳答案

您是否尝试选择添加的项目,然后将当前行设置为添加项目的行索引。这适用于我的示例。

例子:mainwindow.cpp

#include <QInputDialog>
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->listWidget->addItem("Add New");
connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(slot_itemClicked(QListWidgetItem *)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::slot_itemClicked(QListWidgetItem *item)
{
if (item && (item->text() == "Add New"))
{
QString text = QInputDialog::getText(this, "Input item text", "Text: ");
QListWidgetItem *newItem = new QListWidgetItem(text);

// Add new item and sort list
ui->listWidget->addItem(newItem);
ui->listWidget->sortItems();

// Move "Add New" item to list end
item = ui->listWidget->takeItem(ui->listWidget->row(item));
ui->listWidget->addItem(item);

// Select new item
// Set current row to index of new item row
newItem->setSelected(true);
ui->listWidget->setCurrentRow(ui->listWidget->row(newItem));
}
}

关于c++ - 添加时选择 QListWidgetItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373042/

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