diff options
author | Arno <arno@disconnect.de> | 2024-11-09 13:17:26 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2024-11-09 13:17:26 +0100 |
commit | 6a60dd9a73cf336a67fdce4f8e067953c765fad9 (patch) | |
tree | ad9ca57296e94b1b795aa588e338d07110b6e1eb | |
parent | 714bca79318b828c3ca8af1c9a4e7a65ad5fa578 (diff) | |
download | SheMov-6a60dd9a73cf336a67fdce4f8e067953c765fad9.tar.gz SheMov-6a60dd9a73cf336a67fdce4f8e067953c765fad9.tar.bz2 SheMov-6a60dd9a73cf336a67fdce4f8e067953c765fad9.zip |
Fix handling of QCompleter in SmInputDialog
setCompleter() assumed that QLineEdit always had a valid completer and
schedule it for later deletion. This caused random crashes when there
was no deleter. So make sure that mLE always a valid deleter and set the
model instead of a new completer.
-rw-r--r-- | moviepropertiesdialog.cpp | 6 | ||||
-rw-r--r-- | sminputdialog.cpp | 8 | ||||
-rw-r--r-- | sminputdialog.h | 2 |
3 files changed, 8 insertions, 8 deletions
diff --git a/moviepropertiesdialog.cpp b/moviepropertiesdialog.cpp index 4042d36..0361681 100644 --- a/moviepropertiesdialog.cpp +++ b/moviepropertiesdialog.cpp @@ -182,15 +182,13 @@ void MoviePropertiesDialog::init(int seriesPartsId){ while(allActorsQ.next()){ actorNames << allActorsQ.value(0).toString(); } - QCompleter *actorCompleter = new QCompleter(actorNames, mActorDlg); - mActorDlg->setCompleter(actorCompleter); + mActorDlg->setCompleterModel(actorNames); QStringList genreNames; QSqlQuery allGenresQ("SELECT tgenrename FROM genres", db); while(allGenresQ.next()){ genreNames << allGenresQ.value(0).toString(); } - QCompleter *genreCompleter = new QCompleter(genreNames, mGenreDlg); - mGenreDlg->setCompleter(genreCompleter); + mGenreDlg->setCompleterModel(genreNames); } void MoviePropertiesDialog::addItem(SmInputDialog *dlg, QStandardItemModel *model, QIcon icon){ diff --git a/sminputdialog.cpp b/sminputdialog.cpp index f078141..ecd43c2 100644 --- a/sminputdialog.cpp +++ b/sminputdialog.cpp @@ -3,12 +3,15 @@ #include <QCompleter> #include <QHBoxLayout> #include <QVBoxLayout> +#include <QStringListModel> #include "sminputdialog.h" SmInputDialog::SmInputDialog(const QString &label, QWidget *parent) : QDialog(parent){ QLabel *thisL = new QLabel(label); mLE = new QLineEdit; + mCompleter = new QCompleter(this); + mLE->setCompleter(mCompleter); QPushButton *cancelPB = new QPushButton(tr("Cancel")); connect(cancelPB, &QPushButton::clicked, this, &SmInputDialog::reject); QPushButton *acceptPB = new QPushButton(tr("OK")); @@ -30,7 +33,6 @@ void SmInputDialog::setText(QString &text){ mLE->setText(text); } -void SmInputDialog::setCompleter(QCompleter *completer){ - mLE->completer()->deleteLater(); - mLE->setCompleter(completer); +void SmInputDialog::setCompleterModel(const QStringList &model){ + mCompleter->setModel(new QStringListModel(model)); } diff --git a/sminputdialog.h b/sminputdialog.h index 4f2eb7e..43f3e53 100644 --- a/sminputdialog.h +++ b/sminputdialog.h @@ -12,7 +12,7 @@ class SmInputDialog : public QDialog { explicit SmInputDialog(const QString &label, QWidget *parent = nullptr); void setText(QString &text); const QString text() const { return mLE->text(); } - void setCompleter(QCompleter *completer); + void setCompleterModel(const QStringList &model); private: void setupDialog(); |