Как установить выбранный элемент в QListWidget? - PullRequest
7 голосов
/ 06 июня 2011

Я добавляю два элемента в список виджетов, используя код ниже.Теперь я хочу установить «Weekend Plus» в качестве выбранного элемента в виджете списка, как мне это сделать?

Ответы [ 2 ]

16 голосов
/ 06 июня 2011

Вы можете сделать это следующим образом:

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
7 голосов
/ 06 июня 2011

Может

    ui->listWidgetTimeSet->item(1)->setSelected(true);

Попробуйте также

    ui->listWidgetTimeSet->setCurrentRow(1);
...