Hallo,
ich entwickle gerade ein Adressbuch mit Hilfe von Qt. Wenn der User ein Name als neuer Kontakt eingibt möchte ich eine Liste einblenden, die Namen Vorschläge über schon existierenden Kontakte beinhaltet. z.B gibt der User der Name "Adrian", so müssen auch die Namen "Edrian", "Addriian", "Adrien"... angezeigt werden falls diese in die Kontakte schon existieren. So möchte ich eine Legitime Tipp Fehler ausschließen und doppel Namen vermeiden.
Im klar Text möchte ich eine "prozentuale String-Übereinstimmung" implementieren. Kann Qt sowas machen, bzw. wie kann ich das am besten implementieren ?
Vielen Dank im Voraus
mugi
QString vergleich
-
- Beiträge: 113
- Registriert: 31. März 2011 17:19
- Wohnort: Aachen
- Kontaktdaten:
Re: QString vergleich
Hi,
ich meine, dass das mit einem QLineEdit möglich ist. Du kannst dort einen QCompleter setzen, der direkt während der Eingabe "Treffer/Vorschläge" anzeigt:
Den Completer müsstest Du dann über diese Methode so einstellen können, dass er deinen Wünschen entspricht:
http://doc.qt.nokia.com/4.7-snapshot/qc ... ivity-prop
Probiere es mal aus. Ich denke, dass es so klappen könnte.
Hier kurz ein Beispielcode:
Hier wäre noch eine alternative Möglichkeit, jedes Mal, wenn der Text in einem QLineEdit geändert wurde, einen eigenen Slot aufzurufen, der direkt den Inhalt überprüft. Allerdings ist die Laufzeit sicherlich nicht gerade optimal.
Beste Grüße,
Marcus
ich meine, dass das mit einem QLineEdit möglich ist. Du kannst dort einen QCompleter setzen, der direkt während der Eingabe "Treffer/Vorschläge" anzeigt:
Den Completer müsstest Du dann über diese Methode so einstellen können, dass er deinen Wünschen entspricht:
http://doc.qt.nokia.com/4.7-snapshot/qc ... ivity-prop
Probiere es mal aus. Ich denke, dass es so klappen könnte.
Hier kurz ein Beispielcode:
Code: Alles auswählen
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStringList>
#include <QCompleter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStringList Names;
Names << "Edrian" << "Addriian" << "Adrien";
QCompleter *Completer = new QCompleter(Names);
Completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->lineEdit->setCompleter(Completer);
}
MainWindow::~MainWindow()
{
delete ui;
}
Hier wäre noch eine alternative Möglichkeit, jedes Mal, wenn der Text in einem QLineEdit geändert wurde, einen eigenen Slot aufzurufen, der direkt den Inhalt überprüft. Allerdings ist die Laufzeit sicherlich nicht gerade optimal.
Code: Alles auswählen
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStringList>
#include <QCompleter>
QStringList Names;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Names << "Edrian" << "Addriian" << "Adrien";
/*** Alternative 1 ***/
// QCompleter *Completer = new QCompleter(Names);
// Completer->setCaseSensitivity(Qt::CaseInsensitive);
// ui->lineEdit->setCompleter(Completer);
/*** Ende Alternative 1 ***/
/*** Alternative 2 ***/
connect(ui->lineEdit, SIGNAL(textEdited(QString)),
this, SLOT(showString(QString)));
}
void MainWindow::showString(QString str)
{
ui->textEdit->clear();
for(int i=0; i<Names.length(); ++i)
{
if(Names.at(i).contains(str))
ui->textEdit->append(Names.at(i));
else continue;
}
}
/*** Ende Alternative 2 ***/
MainWindow::~MainWindow()
{
delete ui;
}
Marcus
Re: QString vergleich
Danke sehr
das wird aber leider nicht funktionieren falls die ersten Buchstaben unterschiedlich sind (etwa im Falle von "Emanual" und "Imanual")
das wird aber leider nicht funktionieren falls die ersten Buchstaben unterschiedlich sind (etwa im Falle von "Emanual" und "Imanual")
-
- Beiträge: 113
- Registriert: 31. März 2011 17:19
- Wohnort: Aachen
- Kontaktdaten:
Re: QString vergleich
Hi,
ich weiß. Die zweite Variante findet zumindest mehr Treffer. Du könntest es natürlich noch so machen, dass Du das erste Zeichen des übergebenen Strings ignorierst. Dann könntest Du deinem Vorhaben vielleicht etwas näher kommen.
Beste Grüße,
Marcus
ich weiß. Die zweite Variante findet zumindest mehr Treffer. Du könntest es natürlich noch so machen, dass Du das erste Zeichen des übergebenen Strings ignorierst. Dann könntest Du deinem Vorhaben vielleicht etwas näher kommen.
Beste Grüße,
Marcus
Re: QString vergleich
Du solltest dir anschauen wie Rechtschreibkorrekturen das machen. Sourcescode von aspell/myspell liegen offen, evtl. kannst du die aber auch direkt verwenden.
Wobei ich sagen muss, dass so eine Korrektur nicht gerade Benutzerfreundlich ist (auch wenn der Gedanke sicher gut gemeint ist). Der Sinn eines Adressbuches ist ja eben der, unterschiedliche Menschen mit unterschiedlichen Namen darin abzulegen (also: die Kontakte, nicht die Menschen ). Wenn ich "Bernd" tippe, die Software aber meint der Kerl heißt "Bernhard" oder "Gerd", oder "Brandon" und das mit einem fetten Popup kund tut, ich weiß nicht was ich tun würde ^^
Wobei ich sagen muss, dass so eine Korrektur nicht gerade Benutzerfreundlich ist (auch wenn der Gedanke sicher gut gemeint ist). Der Sinn eines Adressbuches ist ja eben der, unterschiedliche Menschen mit unterschiedlichen Namen darin abzulegen (also: die Kontakte, nicht die Menschen ). Wenn ich "Bernd" tippe, die Software aber meint der Kerl heißt "Bernhard" oder "Gerd", oder "Brandon" und das mit einem fetten Popup kund tut, ich weiß nicht was ich tun würde ^^