QListWidget dynamisch anlegen

Alles rund um die Programmierung mit Qt
Antworten
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

QListWidget dynamisch anlegen

Beitrag von aed »

Hallo zusammen,

ich würde gerne eine Liste anlegen in die dann das Programm je nach bedarf Items hinzufügen kann.
Nun will ich mit klick auf den Icon eine Funktion ausführen.
(Konkret: Ich will von verschiedenen FTP Servern Dateien laden. Der FTP Server soll nur in der Liste sein wenn er online ist)

Ist hier das List Widget die richtig? Wie funktioniert das mit den Funktionsaufrufen wenns dynamisch ist?
Kann ich da das ItemClicked() Signal verwenden?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QListWidget dynamisch anlegen

Beitrag von franzf »

Ich weiß nicht wirklich, was an deiner Verwendung dynamisch ist. Dass die Liste nicht statisch im Designer gefüllt ist? Sowas ist eigentlich eher die Ausnahme. Items zur Laufzeit hinzufügen ist ja eben durch addItem möglich. Die Art der Befüllung ist dann auch fürs Clicken unwichtig. "itemClicked" ist ein Signal von QListWidget.

Von welchem Icon redest du?
Wann können FTP-Server down gehen?
Sollen die dann aus der Liste gestrichen werden oder kommen die dann erst gar nicht rein?
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: QListWidget dynamisch anlegen

Beitrag von aed »

Als dynaschmisch seh ich des dann wenn während der laufzeit Items hinzugefügt und evtl auch wieder gelöscht werden bzw. inaktiv gesetzt werden.
Dann kann ich doch sicher durch klick auf diese Items die ich hinzugefügt habe eine Funktion aufrufen. nur wie?

Zu deinen Fragen:
-Icon war ein tippfehler --> lösche icon setze Item ;-)
-Ftp Server sind down wenn sie keine Internetverbindung haben. (sorry für die dumme Antwort)
Wir haben einige FTP Server auf denen Messdaten liegen, die nicht immer online sind. Mein kleines Program soll dann, in einem gewissen IP bereich nach FTP servern suchen die online sind und diese dann in Qlist Widget schreiben so das man durch "klick" auf den einzelnen daten von ihm laden und anzeigen kann.
-Nunja es wäre von Vorteil wenn einmal gefundene Server in der liste verbleiben aber halt inaktiv (setFlat() etc.) gezeigt werden.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QListWidget dynamisch anlegen

Beitrag von franzf »

aed hat geschrieben:Dann kann ich doch sicher durch klick auf diese Items die ich hinzugefügt habe eine Funktion aufrufen. nur wie?
In dem du an das SIGNAL(itemClicked(QListWidgetItem*)) einen SLOT anhängst, der mit dem übergebenen Item dann was anstellt?
Wir haben einige FTP Server auf denen Messdaten liegen, die nicht immer online sind. Mein kleines Program soll dann, in einem gewissen IP bereich nach FTP servern suchen die online sind und diese dann in Qlist Widget schreiben so das man durch "klick" auf den einzelnen daten von ihm laden und anzeigen kann.
und wo ist das Problem?
Nunja es wäre von Vorteil wenn einmal gefundene Server in der liste verbleiben aber halt inaktiv (setFlat() etc.) gezeigt werden.
Regelmäßig pollen, ob die Server in der Liste noch online sind, wenn nicht item deaktivieren. Auch hier: Wo ist das konkrete Problem?
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: QListWidget dynamisch anlegen

Beitrag von aed »

Meine Frage war ob das die richtige Klasse ist und wie genau ich das mit dem Signal bzw. Slot mache. Woher weis ich mit was ich den anhängen soll. gibts da irgendein Beispiel. Die Doku hilft mir hier nicht recht weiter.

wenn ich jezt 10 FTP Server habe, dann brauche ich ja theoretisch 10 Connects (bzw. Funktionsaufrufe)?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QListWidget dynamisch anlegen

Beitrag von franzf »

Wieso 10 connects?!? 10 Server = 10 Items im ListWidgets. QListWidgetItem ist kein QObject, hat daher auch keine SIGNALS. Du connectest das itemClicked()-Signal des QListWidgets auf einen SLOT. Wird das Signal ausgelöst, wird dein Slot aufgerufen. Dabei bekommst du als Parameter das Item auf das geclickt wurde. Im SLOT kannst du dann die Daten dieses Items abfragen. So kommst du an deinen Server.

Code: Alles auswählen

// irgendwo in MainWindow:
connect(listWidget, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(on_listWidget_itemClicked(QListWidgetItem*)));

void
MainWindow::on_listWidget_itemClicked(QListWidgetItem* item)
{
    QString serverUrl = item->text();
    machWasMitServer(serverUrl);
}
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: QListWidget dynamisch anlegen

Beitrag von aed »

Ah das klingt ja gut.
Habs gleich mal eingefügt aber er meckert beim connect: error: expected constructor, destructor, or type conversion before '(' token

gibt der dann bei "item" den Buttontext mit oder?
Zuletzt geändert von aed am 1. September 2011 09:59, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QListWidget dynamisch anlegen

Beitrag von franzf »

Wie sieht dein connect aus? Existiert denn auch das QListWidget-Objekt mit dem Namen?
Bitte die komplette Fehlermeldung + die komplette Methode posten, in der der Connect steht.
aed
Beiträge: 26
Registriert: 18. August 2011 13:50

Re: QListWidget dynamisch anlegen

Beitrag von aed »

Ah, hab den Fehler gefunden. Hab QListWidget *liste= new QListWidget; vergessen. :roll:
Wenn ichs jetzt in eine Funktion reinschreib funktionierts soweit :D nur nicht ohne funktion was aber nicht weiter schlimm ist.
Antworten