drag&drop auf Modellen

Alles rund um die Programmierung mit Qt
Antworten
trusch
Beiträge: 27
Registriert: 22. Juni 2009 09:38

drag&drop auf Modellen

Beitrag von trusch »

Hallo,

in dem Dndaddressbookmodel Beispiel ist nach dem übergeben des QByteArrays und auslesen mittels QDataStream die Stringliste line leer.
Das QDataStream müsste doch eigentlich Stringlisten verarbeiten können?

Hier werden das QByteArray erzeugt:

Code: Alles auswählen

QMimeData *DndAddressbookModel::mimeData( const QModelIndexList &indexes) const
{
  QMimeData *mimeData = new QMimeData();

  QList<int> rows;
  foreach (QModelIndex index, indexes)
    if (index.isValid())
      if (!rows.contains(index.row())) 
        rows += index.row();

  QByteArray encodedData;
  QDataStream stream(&encodedData, QIODevice::WriteOnly);

  foreach(int row, rows)
      stream << addressBook.at(row+1);

  mimeData->setData("application/x-osp.text.csv", encodedData);
  return mimeData;
}
Die QList lines ist leer:

Code: Alles auswählen

bool DndAddressbookModel::dropMimeData(const QMimeData *data,
				   Qt::DropAction action, int row,
				   int column, const QModelIndex &parent)
{

  Q_UNUSED(column);
  Q_UNUSED(parent);

  if (action == Qt::IgnoreAction)
    return true;

  if (!data->hasFormat("application/x-osp.text.csv"))
    return false;

  // workaround für Bug in Qt 4.1.2
  if (row == -1)
    row = rowCount();

  QByteArray encodedData = data->data("application/x-osp.text.csv");
  QDataStream stream(&encodedData, QIODevice::ReadOnly);
  QList<QStringList> lines;

  while (!stream.atEnd())
    stream >> lines;

  int rows = lines.count();
  insertRows(row, rows, QModelIndex());
  foreach(QStringList line, lines) {
    addressBook.replace(row+1, line);
    row++;
  }
  return true;
}
Antworten