我有一个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个索引。
答案 0 :(得分:1)
通过调用setCurrentItem,您可以在添加项目后显示所选项目: -
QListWidgetItem* pSelectedItem = new QListWidgetItem("Item1");
ui->listWidget->addItem(pSelectedItem);
ui->listWidget->addItem(new QListWidgetItem("Item2"));
ui->listWidget->addItem(new QListWidgetItem("Item3"));
ui->listWidget->setCurrentItem(pSelectedItem);
作为docs州: -
除非选择模式为NoSelection,否则也会选择该项目。
或者,不是检索当前项目,而是使用selectedItems()获取所选项目,我希望返回一个空列表,您可以使用该列表检查项目数: -
if(ui->listWidget->selectedItems().count())
{
// delete items
}
请注意,对clearSelection的调用声明: -
取消选择所有选定的项目。 不会更改当前索引。
我希望这意味着请求当前索引或当前项目可以返回有效的索引或项目,这就是删除该项目的原因,即使它未被选中。
答案 1 :(得分:1)
您可以使用setCurrentRow
中的QListWidget
功能:
// Set the first row as current
ui->listWidget->setCurrentRow(0);
并添加蓝色背景颜色:
// Get default background color
QBrush defaultBrush = ui->listWidget->currentItem->background();
// Set background color
QBrush brush(Qt::blue);
ui->listWidget->currentItem->setBackground(brush);
设置默认颜色:
// Change background color with default color
ui->listWidget->currentItem->setBackground(defaultBrush);