From a6be439eb5595d49e9b0fb41536e5c9da03cb51e Mon Sep 17 00:00:00 2001 From: Jasonlcy3 Date: Sat, 24 Jul 2021 22:18:12 +0800 Subject: [PATCH 1/2] Save the data for the selected item(s) --- MultiSelectComboBox.cpp | 23 ++++++++++++++--------- MultiSelectComboBox.h | 1 + 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/MultiSelectComboBox.cpp b/MultiSelectComboBox.cpp index ef85f8e..1b7a9d5 100644 --- a/MultiSelectComboBox.cpp +++ b/MultiSelectComboBox.cpp @@ -50,40 +50,45 @@ void MultiSelectComboBox::hidePopup() void MultiSelectComboBox::stateChanged(int aState) { Q_UNUSED(aState); - QString selectedData(""); + QString selectedText(""); + QVector selectedData; int count = mListWidget->count(); for (int i = 1; i < count; ++i) { - QWidget *widget = mListWidget->itemWidget(mListWidget->item(i)); + QListWidgetItem *listWidgetItem = mListWidget->item(i); + QWidget *widget = mListWidget->itemWidget(listWidgetItem); QCheckBox *checkBox = static_cast(widget); if (checkBox->isChecked()) { - selectedData.append(checkBox->text()).append(";"); + selectedText.append(checkBox->text()).append(";"); + selectedData.append(listWidgetItem->data(Qt::UserRole)); } } - if (selectedData.endsWith(";")) + if (selectedText.endsWith(";")) { - selectedData.remove(selectedData.count() - 1, 1); + selectedText.remove(selectedText.count() - 1, 1); } - if (!selectedData.isEmpty()) + if (!selectedText.isEmpty()) { - mLineEdit->setText(selectedData); + mLineEdit->setText(selectedText); + currentData = selectedData; } else { mLineEdit->clear(); + currentData.clear(); } - mLineEdit->setToolTip(selectedData); + mLineEdit->setToolTip(selectedText); emit selectionChanged(); } void MultiSelectComboBox::addItem(const QString& aText, const QVariant& aUserData) { - Q_UNUSED(aUserData); QListWidgetItem* listWidgetItem = new QListWidgetItem(mListWidget); + listWidgetItem->setData(Qt::UserRole, aUserData); QCheckBox* checkBox = new QCheckBox(this); checkBox->setText(aText); mListWidget->addItem(listWidgetItem); diff --git a/MultiSelectComboBox.h b/MultiSelectComboBox.h index 8bfce1c..58e5ba7 100644 --- a/MultiSelectComboBox.h +++ b/MultiSelectComboBox.h @@ -17,6 +17,7 @@ class MultiSelectComboBox : public QComboBox void SetSearchBarPlaceHolderText(const QString& aPlaceHolderText); void SetPlaceHolderText(const QString& aPlaceHolderText); void ResetSelection(); + QVector currentData; signals: void selectionChanged(); From 40269d9df2e05fe49d259eb73d6b4363b9a85f73 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 28 Nov 2021 03:47:58 +0800 Subject: [PATCH 2/2] Prevent some items disappearing --- MultiSelectComboBox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MultiSelectComboBox.cpp b/MultiSelectComboBox.cpp index 1b7a9d5..9d96da6 100644 --- a/MultiSelectComboBox.cpp +++ b/MultiSelectComboBox.cpp @@ -43,6 +43,7 @@ void MultiSelectComboBox::hidePopup() } else { + this->view()->scrollToTop(); QComboBox::hidePopup(); } }