我该如何在QListWidget中设置选定的项目?

20
我正在使用下面的代码向listwidget添加两个项。现在我想将"周末加班"设置为listwidget中的选定项,我该怎么做?

我正在使用下面的代码向listwidget添加两个项。现在我想将"周末加班"设置为listwidget中的选定项,我该怎么做?

QStringList items;    
items << "All" << "Weekend Plus" ;   
ui->listWidgetTimeSet->addItems(items);
3个回答

29

你可以这样做:

QStringList items;
items << "All" << "Weekend Plus" ;
listWidgetTimeSet->addItems(items);
listWidgetTimeSet->setCurrentRow( 1 );

但这意味着您知道“周末加”在第二行,您需要记住以防有其他项目。

或者您可以这样做:

QListWidgetItem* all_item = new QListWidgetItem( "All" );
QListWidgetItem* wp_item = new QListWidgetItem( "Weekend Plus" );
listWidgetTimeSet->addItem( all_item );
listWidgetTimeSet->addItem( wp_item );
listWidgetTimeSet->setCurrentItem( wp_item );
希望能有所帮助。 编辑: 根据您的评论,我建议使用项目视图的编辑触发器。它允许您通过只需键入要添加的内容并按下返回或回车键来直接添加项目。您刚刚添加的项目将被选中,现在显示为QListWidget中的一个项目。
listWidgetTimeSet->setEditTriggers( QAbstractItemView::DoubleClicked ); // example

查看文档以获取更多信息。

如果您想在其他位置添加新项,当然也有方法。假设您有一个行编辑器,并使用您在那里输入的名称添加了该项。现在,您希望包含新项的ListWidget更改为该新项。假设新项目位于最后一个位置(因为它是最后添加的),则可以将当前行更改为最后一行。(请注意,count()如果有任何隐藏项,也会计算这些项)

listWidgetTimeSet->setCurrentRow( listWidgetTimeSet->count() - 1 ); // size - 1 = last item

谢谢,它可以工作了。现在假设我有一个文本框,当我在其中输入文本并说“添加”时,它会被添加到列表框中,现在我想选择我添加到列表框中的文本。 - Bokambo
您已经设置了当前项目,而不是所选项目。它们是不同的概念。当前项目是通过制表或光标操作移动的内容。选择是通过选择模型设置的。 - ClearCrescendo

11
也许。
    ui->listWidgetTimeSet->item(1)->setSelected(true);

也可以尝试

    ui->listWidgetTimeSet->setCurrentRow(1);

第一个对我有效,但第二个不行,我不知道为什么。已点赞。 - Sprite

1

要将当前QList与原始文本设置为:

ui->List->setCurrentItem(ui->List->findItems("Raw x Content",Qt::MatchExactly)[0]);

这很不错。直截了当。 - Nestor Colt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接