【发布时间】:2011-01-19 19:43:26
【问题描述】:
我试图了解在 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);
在接受drop的小部件中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;
但它不起作用,说“与'operator >>'不匹配”。关于我应该怎么做的任何提示?
【问题讨论】:
标签: c++ qt drag-and-drop mime-types