У меня есть QListWidget, у которого есть элемент, и у меня есть кнопка «Удалить» в моей форме, которая фактически удаляет элемент из списка. Проблема заключается в том, что при загрузке формы в первый раз и я нажимаю remove, не выбирая какой-либо элемент из списка, он берет элемент по 0-му индексу по умолчанию и удаляет его. Ниже приведен фрагмент кода:Элемент QListWidget в 0-м индексе выбран по умолчанию
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->listWidget->addItem(new QListWidgetItem("Item1"));
ui->listWidget->addItem(new QListWidgetItem("Item2"));
ui->listWidget->addItem(new QListWidgetItem("Item3"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btnRemove_clicked()
{
printf("on_btnRemove_clicked() \n");
int currentRow = ui->listWidget->currentRow();
QModelIndex currentIndex = ui->listWidget->currentIndex();
QListWidgetItem* currentItem = ui->listWidget->currentItem();
printf("currentRow: %d\n", currentRow);
if(currentRow > -1) {
printf("currentIndex.data() %s: \n", currentIndex.data().toString().toStdString().c_str());
printf("currentItem->data(0): %s \n", currentItem->data(0).toString().toStdString().c_str());
QListWidgetItem* itemToDelete = ui->listWidget->takeItem(currentRow);
delete itemToDelete;
itemToDelete = NULL;
}
}
Любая идея, как изменить это поведение или, по крайней мере, в любом случае, что я могу показать, что индекс 0-й выбирается по умолчанию синим фоном пункта.
Если у вас есть более одного настраиваемого компонента в форме, то вы можете просто установить фокус любого компонента o чем QListWidget. Это работает для меня, по крайней мере. – gmuhammad
Следует отметить, что для QListWidgetItem с флажками. Если вы установите флажок, функция currentRow() в слоте SIGNAL (itemClicked (QListWidgetItem *)) вернет неправильное значение (?), В моем случае оно всегда возвращает значение 2. – ejectamenta