ah, jetzt verstehe ich, was Du meintest, QTreeView wollte ich verwenden. Inzwischen habe ich das Problem gelöst: ich habe schlichtweg vergessen, die RegExpr für das Modell über das Edit jeweils zu setzten.
Allerdings habe ich nun ein anderes Problem.
Code: Alles auswählen
class Widget
: public QDialog, private Ui::Widget
{
Q_OBJECT
public:
Widget(QWidget* parent = 0);
private slots:
void selectionChanged(const QString& string);
void selectedItem(const QModelIndex& index);
void clearSelection();
private:
QStringListModel* sourceModel;
QSortFilterProxyModel* proxyModel;
bool onceSelected;
};
Widget::Widget(QWidget* parent)
: QDialog(parent),
onceSelected(false)
{
setupUi(this);
QStringList list;
list << "Homer Simpson"
<< "Marge Simpson"
<< "Bart Simpson"
<< "Liesa Simpson"
<< "Maggie Simpson"
<< "Philip J. Fry"
<< "Turanga Leela"
<< "Bender Bieger Rodriguez"
<< "Professor Hubert J. Farnsworth";
sourceModel = new QStringListModel(list, this);
sourceView->setModel(sourceModel);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(sourceModel);
proxyModel->setDynamicSortFilter(true);
proxyModel->setFilterKeyColumn(0);
proxyView->setModel(proxyModel);
connect(editSelection, SIGNAL(textEdited(const QString&)),
this, SLOT(selectionChanged(const QString&)));
connect(clearButton, SIGNAL(clicked()),
this, SLOT(clearSelection()));
connect(proxyView, SIGNAL(activated(const QModelIndex&)),
this, SLOT(selectedItem(const QModelIndex&)));
}
void Widget::selectionChanged(const QString& string)
{
if(!onceSelected)
{
editSelection->clear();
editSelection->setText(string);
qDebug() << ".";
onceSelected = true;
}
proxyModel->setFilterRegExp(
QRegExp(string, Qt::CaseInsensitive,
QRegExp::Wildcard));
}
Ich habe im Designer einen Text in das QLineEdit editSelection geschrieben, welches beim ersten eingeben eines Buchstaben diesen Text für den Rest der Dialog Object Existens löscht. Aus irgendwelchen Gründen klappt dies aber nicht - die Ausgabe enthält zwei Punkte (selectionChanged wird demnach 2x aufgerufen) und der Text ist nicht weg; es wird einfach mein String/Buchstabe eingefügt/angehängt. Gelegentlich stürzt es auch ab, das gab es auch schon. Wo ist der Fehler??
Weiterhin wollte ich, dass beim Anklicken mi der Maus der Text ebenfalls verschwindet, habe aber kein Signal dafür in der Doku gefunden. Wenn es per Mausevent gehen muss, wie gehts das konkret? Ich müsste ja irgendwie wissen, das mein QLineEdit den Mouseevent bekommen hat.
Vielen Dank
Olaf