Kombinationsfeld mit Kontrollkästchen?
Ich versuche, die Elemente in einer ComboBox
überprüfbar ist. Ich versuchte dies:
http://programmingexamples.net/wiki/Qt/ModelView/ComboBoxOfCheckBoxes
wo ich Unterklassen QStandardItemModel
- und re-implementiert die flags()
- Funktion, um die Elemente, die überprüfbar ist. Dann habe ich dieses Modell, um die ComboBox
. Leider eine checkbox nicht angezeigt wird mit den Elementen. Kann jemand sehen, wo ich schief gelaufen?
InformationsquelleAutor David Doria | 2011-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie eine check-state sowie macht Sie überprüfbar?
In meinem Beispiel unten, diese Zeile ist wichtig:
Wenn es weggelassen wird, werden die Kontrollkästchen nicht Rendern, da es nicht die eine gültige check-Staat zu machen.
Das Beispiel zeigt ein Kontrollkästchen in einer combobox, Liste und Tabelle, so konnte ich es nicht zu funktionieren auf den ersten, so dass ich versucht, verschiedene Ansichten.
test.cpp
test.pro
Sie tun müssen, wird es in das Modell, Unterklasse
QAbstractListModel
und implementierenrowCount
,data
,flags
undsetData
. Stellen Sie sicher, dass das Modell behandeltQt::CheckStateRole
Rolle. InsetData
können Sie feuern Ihre Signale als Modelle sind QObject abgeleitet.Es ist sogar leichter als das :). Ohne Unterklassen erforderlich: connect(this->Modell, SIGNAL(dataChanged ( const QModelIndex& const QModelIndex&)), this, SLOT(slot_changed())); mit: void MainWindow::slot_changed() { std::cout << "hervorgehoben werden." << std::endl; if(this->Artikel->checkState() == Qt::Unchecked) { std::cout << "nicht aktiviert!" << std::endl; } else if(this->Artikel->checkState() == Qt::Checked) { std::cout << "Checked!" << std::endl; } }
Das Beispiel ist hier erhältlich: programmingexamples.net/wiki/Qt/ModelView/ComboBoxOfCheckBoxes
InformationsquelleAutor Silas Parker
Ich habe eine kleine Ergänzung.
Wenn man kompiliert die skyhisi code dann die combobox auf Mac OS X
sieht nicht so combobox mit native Checkboxen. Man kann es sehen
auf dem screenshot.
Getestet mit qt-4.8.5 und 5.1.1.
Wie es scheint, Qt zeichnet diese steuert von selbst. Unser team hat
fanden die folgende Problemumgehung, durch reinen Zufall. Sie können eine Unterklasse
QStyledItemDelegate
und implementierenpaint()
diese Weise:Anschließend können Sie diese delegieren, um das Kombinationsfeld, indem Sie die folgenden Zeilen zu skyhisi code:
ComboBox installiert mit dieser Delegat sieht aus wie folgt:
Unter Windows kann es eine andere Ausgabe: text der Checkboxen hat geklebt hintergrund oder gestrichelte Rahmen um ein Element:
Ändern das Aussehen kann man folgende Zeile hinzufügen, um die Farbe einfach überschrieben
vor der Zeile QStyledItemDelegate::paint(painter_, refToNonConstOption, index_)
(im code-Beispiel diese Zeile wurde auskommentiert):
Ergebnis:
oder anstelle von "Punkt 0" nicht ausgewählt wurden, sollten wir sehen, "Item1,Item2": eine Verkettung von allen das ausgewählte Element im Kombinationsfeld. Hat jemand weiß, ob es machbar?
Ich habe eine sub-Klasse eine QComboBox, dass Aktualisierungen der sichtbare text je nach Auswahl (und einige andere Funktionen) gist.github.com/mistic100/c3b7f3eabc65309687153fe3e0a9a720
InformationsquelleAutor gshep
Habe ich versucht, dieses Beispiel auf Linux Mint, aber ich kann nicht machen Sie das Kontrollkästchen sichtbar.
Ich hatte zur Umsetzung der
SubclassOfQStyledItemDelegate
Klasse und setzen die Delegierten auf das Kontrollkästchen, wie Neptilo und gshep geraten.InformationsquelleAutor perimeno
Können Sie versuchen, diese mit
QListView
:InformationsquelleAutor Sergio Cabral