Я пытаюсь понять, как данные передаются при использовании перетаскивания в Qt. Из того, что я понял из примеров, которые я изучал, вы сначала определяете виджет как перетаскиваемый путем переопределения методов, унаследованных от QWidget
.
В реализации переопределенного метода в примерах, которые я рассмотрел, создается указатель на объект QMimeData
и сохраняется информация в нем путем вызова setText(const QString &text)
и setData(const QByteArray &data)
. Они хранят информацию в объекте QByteArray
с оператором <<
:
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << labelText << QPoint(ev->pos() - rect().topLeft());
QMimeData *mimeData = new QMimeData;
mimeData->setData("application/x-fridgemagnet", itemData);
mimeData->setText(labelText);
В определении метода dropEvent()
в виджете, который принимает отбрасывания, обе эти переменные были получены с помощью оператора >>
:
QString text;
QPoint offset;
dataStream >> text >> offset;
В методе setData()
application / x-fridgemagnet был передан в качестве аргумента типа MIME. Это было определено где-то еще или это просто то, что вы можете придумать?
Как я могу сохранить и получить пользовательский объект внутри QMimeData
объекта? Я попробовал это:
dataStream << labelText << QPoint(ev->pos() - rect().topLeft()) << myObject;
и попытался получить его так:
myClass myObject;
dataStream >> text >> offset >> myObject;
Но это не сработало, говорит theres "нет совпадения с оператором >>". Любые советы, что мне делать?