-
QT ListView
Hallo Leute,
ich schlage mich schon geraume zeit mit der QListView und dessen Items rum.:rolleyes:
auch wenn ich mit qt recht gut klar komme, hab ich da so meine verständnis probleme.
ich habe mir ein QListView erstellt.
habe ca. 195 parent QListViewItems und die haben jeweils 7 Kinder.
nun möchte ich selectionsänderung wissen, wo ich mich in der liste befinde und welchen wert mein item hat. (bzw. die werte der ersten 4 kinder des parents abfragen)
mit dem signal selectionChanged() bin ich schon mal so weit, das ich listevent abfangen kann.
mit QListViewItem* i = QListView::selectedItem() dachte ich nun, das ich das aktuelle item abfragen kann.
aber was und wie frage ich ab. ich hab kein plan mehr.
danke im vorraus
-
Ich mach immer eine Subclass von QListViewItem mit einem Datenfeld, das ich dann auslesen kann.
-
äh, und wie bekommt du den wert des item in dein datenfeld?
(warscheinlich blöde frage, aber ich habe heute soviel gegrübelt, das mir jetzt die einfachsten dingen unklar sind)
-
Verstehe ich dich richtig: Du hast ein Listview mit einer Anzahl Items, zu jedem Item gehören ein paar Daten. Wenn jetzt ein Item ausgewählt wird, sollen die entsprechenden Daten in anderen Widgets angezeigt werden?
-
-
Bitteschön:
Code:
#include <qlistview.h>
#include <qapplication.h>
#include <qvbox.h>
#include <qlineedit.h>
class MyListViewItem : public QListViewItem
{
public:
MyListViewItem(const QString & display, const QString & data, QListView* parent);
const QString & data() const { return _data; }
private:
QString _data;
};
MyListViewItem::MyListViewItem(const QString & display, const QString & data, QListView* parent) : QListViewItem(parent, display), _data(data)
{
}
class MainWindow : public QVBox
{
Q_OBJECT
public:
MainWindow(QWidget* parent = 0);
private slots:
void itemSelected(QListViewItem* );
private:
QListView* listview;
QLineEdit* datadisplay;
};
MainWindow::MainWindow(QWidget* parent) : QVBox(parent)
{
listview = new QListView(this);
datadisplay = new QLineEdit(this);
listview->addColumn("Entry");
new MyListViewItem("Axel", "Axel Jäger", listview);
new MyListViewItem("Klaus", "Klaus Meyer", listview);
connect(listview, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(itemSelected(QListViewItem*)));
}
void MainWindow::itemSelected(QListViewItem* itm)
{
MyListViewItem* mitm = (MyListViewItem*)itm;
datadisplay->setText(mitm->data());
}
#include "qlistview.moc.cpp"
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
MainWindow mw;
app.setMainWidget(&mw);
mw.show();
return app.exec();
}
Du musst dir halt noch den Moc-Code erzeugen lassen.
-
genau dieses: "datadisplay->setText(mitm->data());" hab ich gesucht.
ich habs geschnackellt.
Danke Dir:D
-
hab jetzt ein problem mit dem konstruktor der MyListViewItem Klasse.
So wie du es gelistet hast, erstellt du 2 Items. Ich habe aber 1 Item und das ist "parent" für 7 weitere Items. Die sieben haben also nicht die Liste als parent, sonder der 1 Item.
Dafür brauch ich doch zwei Konstruktoren, oder ?
__________________________EDIT:___________________ __________
Ich habs selber gefunden
Code:
MyListViewItem::MyListViewItem(const QString & display,
const QString & data, QListView* parent) : QListViewItem(parent, display), _data(data)
{
}
MyListViewItem::MyListViewItem(const QString & display,
const QString & data, QListViewItem* after) : QListViewItem(after, display), _data(data)
{
}
-