添加时选择 QListWidgetItem
Selecting a QListWidgetItem when adding it
我在表单中有一个QListWidget
,QListWidgetItem
显示">添加新"。当我点击它时,我希望发生一系列事情:
QInputDialog::getText
询问新项目的内容。- 新项目将添加到具有给定文本的列表中。
- 列表将排序,但保留在末尾的">新增"除外(这是通过删除">添加新"项、排序并再次添加已删除的项目来完成的)。
- 新项目处于选中状态。
最后一部分是我遇到麻烦的部分。我尝试了许多不同的方法,都会导致相同的结果:我要选择的项目有一个虚线边框,它被理解为已选择(例如,通过ui->list->selectedItems()
),但选择颜色保留在">添加新"之前的最后一个项目上。
我尝试了什么
item->setSelected(true);
ui->list->setCurrentItem(item);
ui->list->setCurrentRow(ui->list->row(item);
我注意到了什么
当调试器打开并带有缓慢完成这些步骤的断点时,我注意到一切似乎都运行良好,但在我调用的函数完成之前 UI 不会更新。
此外,当我想从另一个按钮单击调用的插槽中选择给定项目时,它可以与item->setSelected(true);
(以及其他项目)正常工作。
我的猜测:我无法在添加它的同一功能中选择项目,因为我无法以图形方式选择尚不存在的内容。
关于如何实现这一目标的任何猜测?
注意
如果您遇到同样的问题,请阅读所选答案的评论,这实际上是一个信号问题!
您是否尝试选择添加的项目,然后将当前行设置为添加项目的行索引。这在我的示例中有效。
示例:主窗口.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));
}
}
如果您可以从常规插槽中选择项目,则只需从非常短的计时器发出虚拟信号即可。喜欢这个
//add item
//...
QTimer::singleShot(1, this, SLOT(MySlotForSelectItem())); // 1 ms timer
MainWindow::MySlotForSelectItem()
{
//select item
}
相关文章:
- 如何移动QListWidgetItem?
- 添加时选择 QListWidgetItem
- QListWidgetItem 当按钮单击时执行操作
- QListWidgetItem指针导致程序崩溃
- 将指针初始化为QlistWidgetItem QT 5.8
- QT C++ Framework QlistwidgetItem CONVERSION
- 如何在QListWidgetItem的文本中突出显示特定字母
- Qt将派生的QListwidgetitem添加到QListWidget
- 是否可以从QListWidgetItem*中提取行
- QListWidgetItem的最右侧可见位置/字符
- 实现一个自定义的QListWidgetItem
- QListWidgetItem -调整宽度和高度的内容
- Adding QListWidgetItem To QListWidget
- QListWidgetItem子类的itemdoubleclick信号