[gelöst] ComboBox in einer Liste
Verfasst: 14. November 2007 18:46
Hallo
Ich habe gerade ein Problem und komme da absolut nicht weiter.
Ich habe eine Liste vom Typ QTreeView, welche in einer Page zum Einsatz kommt vom Typ QWidget. Die Liste wird von einem Model vom Typ QStandardItemModel mit Daten versorgt.
Am Besten ich zeige mal einen Screenshot, damit man sich das vorstellen kann -> ist im Anhang.
Nun möchte ich, dass in der Spalte "Wahlpflichtfach", die in dem Screenshot zu sehen ist, die Daten durch eine ComboBox für den Benutzer editierbar sind. Er soll dort alle Wahlpflichtfächer auswählen können, die in der Datenbank gespeichert sind.
Wie bring ich denn in diese Liste jetzt eine ComboBox in die erste Spalte? Bin völlig ratlos.
Wäre sehr dankbar für jegliche Hilfe.
Hier noch der Code dazu für die QTreeView und das Model (weiß nicht welches von beiden relevant ist für das Problem):
Ich habe gerade ein Problem und komme da absolut nicht weiter.
Ich habe eine Liste vom Typ QTreeView, welche in einer Page zum Einsatz kommt vom Typ QWidget. Die Liste wird von einem Model vom Typ QStandardItemModel mit Daten versorgt.
Am Besten ich zeige mal einen Screenshot, damit man sich das vorstellen kann -> ist im Anhang.
Nun möchte ich, dass in der Spalte "Wahlpflichtfach", die in dem Screenshot zu sehen ist, die Daten durch eine ComboBox für den Benutzer editierbar sind. Er soll dort alle Wahlpflichtfächer auswählen können, die in der Datenbank gespeichert sind.
Wie bring ich denn in diese Liste jetzt eine ComboBox in die erste Spalte? Bin völlig ratlos.
Wäre sehr dankbar für jegliche Hilfe.
Hier noch der Code dazu für die QTreeView und das Model (weiß nicht welches von beiden relevant ist für das Problem):
Code: Alles auswählen
package wpfv.ui;
import java.util.List;
import wpfv.dto.Course;
import wpfv.logic.SelectedCoursesModel;
import com.trolltech.qt.core.Qt.SortOrder;
import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.QModelIndex;
public class SelectedCoursesView extends QTreeView {
// Das Model, auf dem das View basiert
private SelectedCoursesModel model;
/**
* Erzeugt das SelectedCoursesView.
*
* @param model Das Model, auf dem das View basiert.
*/
public SelectedCoursesView(SelectedCoursesModel model) {
super();
this.model = model;
setModel(model);
setRootIsDecorated(false);
setAlternatingRowColors(true);
setSortingEnabled(true);
sortByColumn(0, SortOrder.AscendingOrder);
// Passt die Spalten nach dem Hinzufügen des Datensatzes auf optimale Größe an
resizeColumnToContents(0);
resizeColumnToContents(1);
resizeColumnToContents(2);
resizeColumnToContents(3);
}
/**
* Gibt die ausgewählte Wahlpflichtfachbelegung zurück.
*
* @return Das ausgewählte CourseSelection-Objekt.
*/
public Course getMarked() {
// Holen des markierten Index und Übergabe des Index an SelectedCoursesModel
List<QModelIndex> IndexList = selectedIndexes();
Course markedCourse = model.getMarked(IndexList);
return markedCourse;
}
/**
* Fügt ein neues Wahlpflichtfach hinzu.
*
* @param newCourse Das hinzuzufügende Wahlpflichtfach als Course-Objekt.
* @return true, falls das Hinzufügen erfolgreich war, sonst false.
*/
boolean add(Course newCourse) {
boolean addSuccessful;
// Übergibt neuen Datensatz an Model
addSuccessful = model.add(newCourse);
// Passt die Spalten nach dem Hinzufügen des Datensatzes auf optimale Größe an
resizeColumnToContents(0);
resizeColumnToContents(1);
resizeColumnToContents(2);
resizeColumnToContents(3);
return addSuccessful;
}
}
Code: Alles auswählen
package wpfv.logic;
import java.util.*;
import wpfv.dto.Course;
import wpfv.dto.Student;
import wpfv.ui.StudentsPage;
import com.trolltech.qt.core.Qt.Orientation;
import com.trolltech.qt.core.Qt.MatchFlags;
import com.trolltech.qt.core.Qt.MatchFlag;
import com.trolltech.qt.core.*;
import com.trolltech.qt.gui.*;
public class SelectedCoursesModel extends QStandardItemModel {
// Enhält immer alle Einträge, welche auch in der Datenbank gespeichert sind.
// Wird dann zum Abgleich benötigt.
private LinkedList<Course> dbList;
// Enthält die aktuelle Liste der Wahlpflichtfachbelegungen,
// also auch mit den aktuellen Änderungen. Muss immer aktuell
// gehalten werden.
private LinkedList<Course> actualList;
/**
* Erzeugt ein Wahlpflichtfachbelegungen-Model.
*/
public SelectedCoursesModel() {
// Erzeuge Tabelle
super(0, 4);
setHeaderData(0, Orientation.Horizontal, tr("Wahlpflichtfach"));
setHeaderData(1, Orientation.Horizontal, tr("Dozent"));
setHeaderData(2, Orientation.Horizontal, tr("Aktuelle Teilnehmer"));
setHeaderData(3, Orientation.Horizontal, tr("Maximale Teilnehmer"));
// Erzeuge die benötigten Listen
dbList = new LinkedList<Course>();
actualList = new LinkedList<Course>();
// Erstmaliges Befüllen
load();
}
/**
* Befüllen des Models durch komplettes Auslesen der Datenbanktabelle.
*/
private void load() {
int i = 0; // Zählvariable
Student focusedStudent; // Student für den die Wahlpflichtfachbelegung stattfindet
// Liest alle Wahlpflichtfachbelegung-Datensätze des gewählten Studenten aus
if (Core.loggedInStudent != null) {
focusedStudent = Core.loggedInStudent;
}
else {
focusedStudent = StudentsPage.listView.getMarked();
}
Course[] allSelectedCourses = Core.courseSelectionsDataConnect.readSelectedCourses(focusedStudent);
// Liest die Anzahl der Zeilen aus SelectedCoursesModel aus und entfernt alle Einträge
removeRows(0, rowCount());
// Legt neue Zeile an und fügt Course in neu erstellte Zeile sowie die Liste ein
for(Course oneCourse : allSelectedCourses) {
insertRow(i);
setData(index(i, 0), oneCourse.getName());
setData(index(i, 1), oneCourse.getLecturer());
setData(index(i, 2), oneCourse.getUpperLimit());
setData(index(i, 3), oneCourse.getUpperLimit());
// dbList befüllen
dbList.add(oneCourse);
// Auch in die actualList einfügen für Backtracing der Änderungen
actualList.add(oneCourse);
i++;
}
// Sortiert das Model nach dessen Befüllung
sort(0);
}
/**
* Auslesen des Datensatzes an Stelle 'Index' und Erzeugung eines Wahlpflichtfachbelegung-Objekts.
*/
public Course getMarked(List<QModelIndex> IndexList) {
// Nach diesem Namen wird gesucht
String searchedName = data(IndexList.get(0)).toString();
// Suche den markierten Course in der actualList
for (int index = 0; index < actualList.size(); index++) {
if (actualList.get(index).getName().equals(searchedName)) {
return actualList.get(index); // Element gefunden
}
}
return null;
}
/**
* Eigenschaften der Felder festlegen.
*/
public Qt.ItemFlags flags(QModelIndex index) {
return new Qt.ItemFlags(Qt.ItemFlag.ItemIsSelectable, Qt.ItemFlag.ItemIsEnabled);
}
}