[gelöst] Children Liste nach Namen sortieren

Alles rund um die Programmierung mit Qt
Antworten
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

[gelöst] Children Liste nach Namen sortieren

Beitrag von 101 »

Hallo Zusammen,

ich habe ein Frame mit PushButtons. Die PushButtons kann ich ja mit

Code: Alles auswählen

frame->children()
in eine Liste auslesen.

Meine Frage:
Ist es möglich die in der Liste enthaltenen Items

Code: Alles auswählen

(QPushButton(0xe2de34, name = "PushButton_01"), ...)
nach Namen zu sortieren bzw. möchte ich die Pointer auf diese PushButtons nach der Namenssortierung in eine neue QList abspeichern.
D.h. Der Pointer auf PushButton_01 ist das erste Element in der neuen Liste, der Pointer auf PushButton_02 ist das zweite, u.s.w..

Ist dies überhaupt machbar, wenn ja wie?
Zuletzt geändert von 101 am 2. Dezember 2009 08:00, insgesamt 3-mal geändert.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Mach dir ne Map mit Key = objectName und value = QPushbutton * und pack dir die Items da rein.
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Wie kann ich auf diese Items aus der "children-Liste" zugreifen?
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Was liefert dir denn findChildren?
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Code: Alles auswählen

(QPushButton(0xec1878, name = "PushButton_03") ,  QPushButton(0xe6b668, name = "PushButton_04") ,  QPushButton(0xe6baa8, name = "PushButton_01") , ... ) 
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Das ist die augabe von qDebug() << findChildren<QPushButton *>()
.... und wenn dir die Spitzen Klammern anschaust weisst auch was der Rückgaberwert dein Fkt ist ;-)

Eine Liste voller Pointer auf Pushbuttons!
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Wie kann ich diese Liste nach den Namen der PushButtons sortieren?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ohne Anspruch auf Korrektheit:

Code: Alles auswählen

bool btnLess(QPushButton* left, QPushButton* right) {
    return left->objectName() < right->objectName();
}

void sortBtnListAscending( QList<QPushButton*>& buttons ) {
    qSort(buttons.begin(), buttons.end(), btnLess);
}
selbes Vorgehen für absteigend sortieren.
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Funktioniert! :D

Ist aber ganz schön heftig! Ginge es auch ohne die Hilfsfunktion "btnLess"?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

101 hat geschrieben:Funktioniert! :D

Ist aber ganz schön heftig! Ginge es auch ohne die Hilfsfunktion "btnLess"?
Nö, geht nicht ohne. Ohne würdest du die Adressen der pointer vergleichen, und das bringt dir beim Vergleichskriterium "objectName" nicht weiter...
Antworten