QTableView Drag and Drop
-
reuabreliz
- Beiträge: 86
- Registriert: 4. Oktober 2008 17:06
QTableView Drag and Drop
Also ich habe eine Tabelle. Mit einem Model. (Model selber abgeleitet von QAbstractTableModel) Funktioniert super. Also das ganze dient dazu Prüfungen aufzulisten. Also spalten sind dan prüflingsname, prüfername, usw. Nun will ich dass man die Prüfungen mit einer Drag und Drop Funktion reihen kann. Wie kann man eine ganze Zeile also alle Spalten aus dieser Zeile, drag und dropen. Habe noch nie so eine Funktion geschrieben, also bitte um Nachsicht. Also das Drag und Droppen von einzelnen Items geht aber eine ganze Zeile, weiß ich nicht wie ich das machen soll. Könnte mir da bitte wer helfen?
-
reuabreliz
- Beiträge: 86
- Registriert: 4. Oktober 2008 17:06
-
reuabreliz
- Beiträge: 86
- Registriert: 4. Oktober 2008 17:06
Code: Alles auswählen
Qt::DropActions MyTableModel::supportedDropActions() const
{
return Qt::CopyAction;
}-
reuabreliz
- Beiträge: 86
- Registriert: 4. Oktober 2008 17:06
Danke, aber das ist nicht das ganze Model. das ist nur die Funktion für die Drag Funktion.
das ist das ganze Model. Mit dem wirst du aber nicht viel anfangen können.
myTableModel.h
so....
das ist das ganze Model. Mit dem wirst du aber nicht viel anfangen können.
myTableModel.h
Code: Alles auswählen
#ifndef _MYTABLEMODEL_
#define _MYTABLEMODEL_
#include <QAbstractTableModel>
#include <QList>
#include "myPruefungenList.h"
class MyTableModel : public QAbstractTableModel
{
public:
MyTableModel(MyPruefungenList *pruefungen,QList<QString> headerdata, QObject *parent = 0);
void setPruefungen(MyPruefungenList *pruefungen);
int rowCount(const QModelIndex &parent) const; //Gibt die Zeilenzahl der Tabelle zurück
int columnCount(const QModelIndex &parent) const; //Gibt die Spaltenzahl der Tabelle zurück
QVariant data(const QModelIndex &index, int role) const; //Das Herzstück der Tabelle
QVariant headerData(int section, Qt::Orientation orientation,int role) const; //Setzt die Headerdatein einer Tabelle
bool setData(const QModelIndex &index, const QVariant &value, int role); //Wird aufgerufen wenn etwas in der Tabelle verändert wurde und setzt sie dann neu
Qt::ItemFlags flags(const QModelIndex &index) const ; //Setzt die Berechtigungen für jedes Element (z.b.: Editierbar, nichtEditierbar, ...)
bool insertRows( int row = 0, int count = 0, const QModelIndex & parent = QModelIndex());
Qt::DropActions supportedDropActions() const; //Drag und Drop Funktion
MyPruefungenList * getPruefungen();
private:
MyPruefungenList *myPruefungen;
QList<int> vheaderdata;
QList<QString> hheaderdata;
};
#endif
Code: Alles auswählen
#include "myTableModel.h"
#include <QtDebug>
MyTableModel::MyTableModel(MyPruefungenList *pruefungen,QList<QString> headerdata, QObject *parent) : QAbstractTableModel(parent)
{
this->hheaderdata = headerdata;
myPruefungen = pruefungen;
for(int i = 1; i < myPruefungen->getPruefungenList().size(); i++)
{
vheaderdata << i;
}
}
int MyTableModel::rowCount(const QModelIndex & /* parent */) const //Gibt die Zeilenanzahl zurück
{
return myPruefungen->getPruefungenList().count();
}
int MyTableModel::columnCount(const QModelIndex & /* parent */) const //Gibt die Spaltenanzahl zurück
{
return hheaderdata.count();
}
QVariant MyTableModel::data(const QModelIndex &index, int role) const
{
QList<MyPruefungen> pruefungenList = myPruefungen->getPruefungenList();
if (!index.isValid())
return QVariant();
if (role == Qt::TextAlignmentRole)
{
return int(Qt::AlignRight | Qt::AlignVCenter);
}
else if (role == Qt::DisplayRole)
{
switch(index.column())
{
case 0:
if(pruefungenList[index.row()].getPArt() != NULL)
return pruefungenList[index.row()].getPArt();
break;
case 1:
if(pruefungenList[index.row()].getSchueler()->getNName() != NULL)
return pruefungenList[index.row()].getSchueler()->getNName();
break;
case 2:
if(pruefungenList[index.row()].getLehrer1()->getNName() != NULL)
return pruefungenList[index.row()].getLehrer1()->getNName();
break;
case 3:
if(pruefungenList[index.row()].getFach1()->getKBezeichnung() != NULL)
return pruefungenList[index.row()].getFach1()->getKBezeichnung();
break;
case 4:
if(pruefungenList[index.row()].getPDatum().isValid())
return pruefungenList[index.row()].getPDatum().toString("yyyy.MM.dd");
break;
case 5:
if(pruefungenList[index.row()].getPNote())
{
QVariant note = pruefungenList[index.row()].getPNote();
return note.toString();
}
}
}
return QVariant();
}
QVariant MyTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal)
{
if (role == Qt::DisplayRole)
{
if(hheaderdata.size() > section)
return hheaderdata.at(section);
}
}
else
{
if (role == Qt::DisplayRole)
{
if(vheaderdata.size() > section)
return vheaderdata.at(section);
}
}
return QAbstractTableModel::headerData(section, orientation, role); //Zur Absicherung default aufrufen
}
bool MyTableModel::setData(const QModelIndex & index, const QVariant& value, int role)
{
QList<MyPruefungen> pruefungenList = myPruefungen->getPruefungenList();
if (index.isValid() && (role == Qt::EditRole || role == Qt::DisplayRole) && value.toString() != NULL)
{
switch(index.column())
{
case 0:
pruefungenList[index.row()].setPArt(value.toString());
break;
case 1:
pruefungenList[index.row()].getSchueler()->setNName(value.toString());
break;
case 2:
pruefungenList[index.row()].getLehrer1()->setNName(value.toString());
break;
case 3:
pruefungenList[index.row()].getFach1()->setKBezeichnung(value.toString());
break;
case 4:
pruefungenList[index.row()].setPDatum(value.toDate());
break;
case 5:
pruefungenList[index.row()].setPNote(value.toInt());
break;
}
myPruefungen->setPruefungenList(pruefungenList);
myPruefungen->pruefungenEinlesen();
qDebug() << "einlesen------------: " << pruefungenList[0].getPArt();
emit dataChanged(index, index);
return true;
}
return false;
}
Qt::ItemFlags MyTableModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return 0;
switch(index.column())
{
case 0:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
case 1:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
case 2:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
case 3:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
case 4:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
case 5:
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
}
return 0;
}
bool MyTableModel::insertRows( int row, int count, const QModelIndex & parent)
{
row = rowCount(parent);
int end = row;
beginInsertRows(parent,row,end);
myPruefungen->addPruefung(new MyPruefungen());
endInsertRows();
}
MyPruefungenList * MyTableModel::getPruefungen()
{
return myPruefungen;
}
void MyTableModel::setPruefungen(MyPruefungenList *pruefungen)
{
this->myPruefungen = pruefungen;
}
Qt::DropActions MyTableModel::supportedDropActions() const
{
return Qt::CopyAction | Qt::MoveAction;
}
-
reuabreliz
- Beiträge: 86
- Registriert: 4. Oktober 2008 17:06