Ich bin erst seit 3 Wochen an QT dran und soll von der Arbeit aus ein Projekt umsetzen.
Hierbei handelt es sich um ein UI, unter anderem mit einer Tabelle.
Die Tabelle befindet sich in einem Splitter und wird als
Code: Alles auswählen
tabelle = new QTableView();
In der Tabelle werden in den ersten beiden Spalten Strings angezeigt und die restlichen Spalten(dynamisch) werden mit Int Werten gefüllt.
Dazu habe ich ein Modell generiert( in Datei a2) und die üblichen Funktionen überschrieben.(wie in den Doku-Beispielen gezeigt)
Code: Alles auswählen
class cTableModel : public QAbstractTableModel
{
public:
cTableModel(QString filename,QObject *parent = 0);
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
QVariant headerData(int section, Qt::Orientation, int role) const;
QStringList* qsl1;
QStringList* qsl2;
QList<QString> ql1;
QList<QString> ql2;
QList<QString> ql3;
QVector<int> iVector;
Soweit so gut.
Damit wird das File ausgelesen,und die Tabelle wird korrekt angezeigt.
Zusätzlich sollen jetzt die Int-Werte vom Benutzer Editierbar sein, die Strings nicht.
Dazu wieder in der Doku gelesen und ein Delegate gebastelt(Datei a3).
Das SpinBox Beispiel ist eig schon fast dass, was ich möchte.
Code: Alles auswählen
class cItemDelegate : public QItemDelegate {
Q_OBJECT
public:
cItemDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
Code: Alles auswählen
w2QTV1 = new QTableView();
cTM = new cTableModel();
w2QTV1->setModel(cTM);
cItemDelegate* delegate = new cItemDelegate(this);
w2QTV1->setItemDelegate(delegate);
In der Firme machte jemand schon etwas ähnliches mit einer Datenbank.
Dazu implementierte derjenige auch einen Ableitung von QTableView-> cTableView.
Mir liegen leider nur teilweise die Dateien vor, aber logischerweise müsste dann auch
Code: Alles auswählen
tabelle = new QTableView();
im Konstruktor in Datei a1 stehen.
Muss ich das auch machen, und wenn ja, was müsste dort ca rein oder ist mein Fehler ganz woanders?
Sehe zur Zeit den Wald vor lauter Bäumen nicht:(.