summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2024-11-09 13:17:26 +0100
committerArno <arno@disconnect.de>2024-11-09 13:17:26 +0100
commit6a60dd9a73cf336a67fdce4f8e067953c765fad9 (patch)
treead9ca57296e94b1b795aa588e338d07110b6e1eb
parent714bca79318b828c3ca8af1c9a4e7a65ad5fa578 (diff)
downloadSheMov-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.cpp6
-rw-r--r--sminputdialog.cpp8
-rw-r--r--sminputdialog.h2
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();