Suche in QtableView
Suche in QtableView
Hallo zusammen,
ich habe einen QtableView erstellt, wo ich mir Messadatenbank in einem Table anzeige.
So weit so gut.
Meine Frage ist:
Wenn ich in der Tabelle einen Suchfunktion schreibe (die mir einfach nach einen bestimmten String sucht), worauf soll ich achten?
Wie sieht es mit der Kombinationtasten (CTRL+F) aus?
Danke
ich habe einen QtableView erstellt, wo ich mir Messadatenbank in einem Table anzeige.
So weit so gut.
Meine Frage ist:
Wenn ich in der Tabelle einen Suchfunktion schreibe (die mir einfach nach einen bestimmten String sucht), worauf soll ich achten?
Wie sieht es mit der Kombinationtasten (CTRL+F) aus?
Danke
Re: Suche in QtableView
Ich fange erst mal mit der einfachste Variante:
Ich habe einen Textfield, wo ich meine Suchende String eintippen kann.
dann einen Butten "Search"
wenn ich auf dieses Button drücke und der textfield nich leer dann rufe ich einen Funktion "searchItem(Qstring & item)" von der DataDelegate
Hier einen Codeabschnitt:
MyView: HeaderFile
DataDelegate : Cpp
Ich habe einen Textfield, wo ich meine Suchende String eintippen kann.
dann einen Butten "Search"
wenn ich auf dieses Button drücke und der textfield nich leer dann rufe ich einen Funktion "searchItem(Qstring & item)" von der DataDelegate
Hier einen Codeabschnitt:
MyView: HeaderFile
Code: Alles auswählen
namespace Ui {
class MyTable;
}
class MyTable: public QDialog
{
Q_OBJECT
public:
explicit MyTable(QWidget *parent = 0);
void setColumnWidth();
~MyTable(void);
public slots:
void updateMyTable();
void search();
private:
Ui::MyTable *ui;
DataDelegate *model;
};
MyView : Cpp
[code]
.....
Void MyTable()
{
if (!ui->lineFind->text().isEmpty())
{
model->searchItem(ui->lineFind->text());
}
}
Header File: DataDelegate:
[code]
class DataDelegate:public QSqlRelationalTableModel
{
public:
DataDelegate(QObject *parent = 0);
QVariant data(const QModelIndex &index, int role) const;
~DataDelegate(void);
void searchItem(QString &item);
....
};
Code: Alles auswählen
void DataDelegate::searchItem(QString &item)
{
// mir fehlt der einsatz wie ich meine Suche fortsetzen und dann in meine View als selektiert markiere
}
Re: Suche in QtableView
Ist überhaupt meinen Ansatz richtig oder habe ich einen denkfehler?
Re: Suche in QtableView
Schau Dir mal die Klasse QSortFilterProxyModel an.galilio hat geschrieben:Ist überhaupt meinen Ansatz richtig oder habe ich einen denkfehler?
Re: Suche in QtableView
Ich komme leider nicht so weiter ....
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Suche in QtableView
Ich würde nicht im View suchen sondern direkt im Model.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Suche in QtableView
und wie soll ich meine Suche in Model fortsetzen?
Auf welche Basis sollte meine Suche?
Was ich meine, ob es die Suche in eine bestimmte splte begrenzen soll + sql abfragen?
Ist das was du meinst?
Mein Model sieht so aus:
DataDelegate : Cpp
Auf welche Basis sollte meine Suche?
Was ich meine, ob es die Suche in eine bestimmte splte begrenzen soll + sql abfragen?
Ist das was du meinst?
Mein Model sieht so aus:
Code: Alles auswählen
class DataDelegate:public QSqlRelationalTableModel
{
public:
DataDelegate(QObject *parent = 0);
QVariant data(const QModelIndex &index, int role) const;
~DataDelegate(void);
void searchItem(QString &item);
....
};
Code: Alles auswählen
void DataDelegate::searchItem(QString &item)
{
// mir fehlt der einsatz wie ich meine Suche fortsetzen und dann in meine View als selektiert markiere
}
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Suche in QtableView
Bau ein eigenes Model, halte dort die Daten und dann kannst du dort auch ordentlich suchen. Setze davor noch ein QSortFilterProxyModel und du kannst die ganze Suche dort unterbringen und sogar noch die Spalten sortieren.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Suche in QtableView
Hallo Christian,
danke erst mal für deine Tipps.
Folgende habe ich gemacht :
Ist das was du meinst oder soll ich mir extra eine neue Klasse, die von QSortFilterProxyModel erbt und neue Methoden (Als Virtual)schreiben ?
Das ober beispiel funktioniert aber nur bedingt, da es die Suche nur in der erste Spalte durgeführt ist.
danke erst mal für deine Tipps.
Folgende habe ich gemacht :
Code: Alles auswählen
void MyTable::handleFind()
{
if (!ui->lineFind->text().isEmpty())
{
QSortFilterProxyModel *proxy;
proxy = new QSortFilterProxyModel(this);
proxy->setSourceModel(model);
proxy->setFilterFixedString(ui->lineFind->text());
ui->tableView->setModel(proxy);
model->select();
}
}
Das ober beispiel funktioniert aber nur bedingt, da es die Suche nur in der erste Spalte durgeführt ist.
Re: Suche in QtableView
Qt hat seine sehr gute Doku - da findest Du auch die Lösung für Dein Problem:galilio hat geschrieben: Das ober beispiel funktioniert aber nur bedingt, da es die Suche nur in der erste Spalte durgeführt ist.
filterKeyColumn : int
This property holds the column where the key used to filter the contents of the source model is read from.
The default value is 0. If the value is -1, the keys will be read from all columns.
Access functions:
int filterKeyColumn() const
void setFilterKeyColumn(int column)
Re: Suche in QtableView
Ich finde nichts aber einen Hinweis, wird mir schon weiterbringen.
Danke und Sorry für die blöde Fragen
Danke und Sorry für die blöde Fragen
Re: Suche in QtableView
galilio hat geschrieben:Ich finde nichts.
Code: Alles auswählen
setFilterKeyColumn( int )Kein Problem. Es fangen alle 'klein' an.galilio hat geschrieben:Danke und Sorry für die blöde Fragen
Re: Suche in QtableView
Hallo danke
Es hat funktioniert.
Ich habe noch eine Frage.
Wie kann ich die Tabelle wieder zu den defaultView zurückkehre?
Es hat funktioniert.
Ich habe noch eine Frage.
Wie kann ich die Tabelle wieder zu den defaultView zurückkehre?
Re: Suche in QtableView
Zunächst einmal würde ich die Suchfunktion nicht als Member der TableView deklarieren, sondern als Member des Widgets, in dem die Tabelle dargestellt wird. Außerdem muss nicht mit jedem Aufruf der Suchfunktion ein neues ProxyModel auf dem Heap angelegt werden. Das ProxyModel kann z.B. im Konstruktor des Widgets erzeugt werden:galilio hat geschrieben:Hallo danke
Es hat funktioniert.
Ich habe noch eine Frage.
Wie kann ich die Tabelle wieder zu den defaultView zurückkehre?
Code: Alles auswählen
myWidget::myWidget(....)
{
...
//proxy muss als Member im Header deklariert werden, da es von anderen Member-Funktionen verwendet wird
proxy = new QSortFilterProxyModel( this );
proxy->setSourceModel( model );
ui->tableView->setModel( proxy );
//Das Eingabefeld, in dem der Suchbegriff eingegeben wird, wird mit einem passenden Slot verbunden
connect ( suchButton, SIGNAL ( textChanged ( const QString & ) ), this, SLOT ( slotSuchen ( const QString & ) ) );
...
}
Im Slot wird dann der Suchbegriff an das ProxyModel übergeben:
Code: Alles auswählen
void myWidget::slotSuchen( const QString &suchbegriff )
{
proxy->setFixedString( suchbegriff );
}
Re: Suche in QtableView
Obwohl ich jetzt nicht am Platz bin, danke ich dir MichaelS.
Da es bald weinachten ist, wünsche ich dir und alle beteiligte in dieses Forum alle guten zu Weinachten.
Besten Grüße aus der Bergen.
Da es bald weinachten ist, wünsche ich dir und alle beteiligte in dieses Forum alle guten zu Weinachten.
Besten Grüße aus der Bergen.