Seite 1 von 1

drag&drop auf Modellen

Verfasst: 2. Juli 2009 10:11
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;
}