Qmimedata *mimeDate = new Qmimedata 显示不允许使用不完整类型
时间: 2024-02-01 15:12:20 浏览: 26
这个错误通常是因为在代码中使用了未定义的类或结构体。在这种情况下,可能是因为你没有在代码中包含必要的头文件或者没有正确声明类或结构体。请确保你在代码中包含了 `Qmimedata` 这个类的头文件,并且已经正确声明了这个类。如果这些都没问题,那可能是因为你的代码存在语法错误或其他问题导致编译器无法识别这个类。请检查你的代码并排查问题。
相关问题
QMimeData *mimeData = new QMimeData;不允许使用不完整的类型
这个错误通常是由于没有包含所需的头文件引起的。请确保您已经包含了定义 `QMimeData` 类型的头文件。例如,在使用 `QMimeData` 类型之前,您需要在代码中包含以下行:
```cpp
#include <QMimeData>
```
如果您已经包含了正确的头文件并且仍然遇到此错误,请确保您的代码中没有语法错误或其他错误。
void VisionGlobalScene::slotActCopy()//复制 { QList<QGraphicsItem*> items = selectedItems(); SPListXObject objList; ShapeList shapes; for each (QGraphicsItem * item in items) { Graphics* graphics = dynamic_cast<Graphics*>(item); if (graphics) { TestBoxGraphics* testBox = qobject_cast<TestBoxGraphics*>(graphics); if (testBox) objList.append(testBox->testBox()); else shapes.append(graphics->shape()); } } QMimeData* mimeData = 0; if (objList.size() > 0) mimeData = XObject::MimeDataList(objList); if (shapes.size() > 0) { if (!mimeData) mimeData = new QMimeData; QByteArray encodedData; QDataStream stream(&encodedData, QIODevice::WriteOnly); stream << shapes; mimeData->setData("vision/shape_list", encodedData); } // 创建剪贴板对象 QClipboard* clipboard = QApplication::clipboard(); clipboard->setMimeData(mimeData); } 这段代码加上详细注释
```
void VisionGlobalScene::slotActCopy()//复制
{
// 获取选中的图形项
QList<QGraphicsItem*> items = selectedItems();
SPListXObject objList; // 创建一个对象列表
ShapeList shapes; // 创建一个形状列表
// 遍历选中的图形项
for each (QGraphicsItem * item in items) {
Graphics* graphics = dynamic_cast<Graphics*>(item);
if (graphics) {
// 如果是 TestBoxGraphics 类型的图形项,将其添加到对象列表中
TestBoxGraphics* testBox = qobject_cast<TestBoxGraphics*>(graphics);
if (testBox)
objList.append(testBox->testBox());
else
shapes.append(graphics->shape()); // 否则将其形状添加到形状列表中
}
}
QMimeData* mimeData = 0;
// 如果对象列表中有对象,则创建对象的 MIME 数据
if (objList.size() > 0)
mimeData = XObject::MimeDataList(objList);
// 如果形状列表中有形状,则创建形状的 MIME 数据
if (shapes.size() > 0) {
if (!mimeData)
mimeData = new QMimeData;
QByteArray encodedData;
QDataStream stream(&encodedData, QIODevice::WriteOnly);
stream << shapes;
mimeData->setData("vision/shape_list", encodedData);
}
// 创建剪贴板对象
QClipboard* clipboard = QApplication::clipboard();
clipboard->setMimeData(mimeData);
}
```
这段代码是一个用于复制选中的图形项的槽函数。首先,它通过调用 `selectedItems()` 获取当前场景中选中的图形项。然后,它遍历选中的图形项,将其中的 `TestBoxGraphics` 类型的图形项添加到对象列表 `objList` 中,将其他类型的图形项的形状添加到形状列表 `shapes` 中。
接着,根据对象列表和形状列表是否为空,创建相应的 MIME 数据。如果对象列表不为空,则调用 `XObject::MimeDataList()` 创建对象的 MIME 数据。如果形状列表不为空,则创建一个新的 `QMimeData` 对象,并将形状列表编码为字节数组,并设置其数据类型为 "vision/shape_list"。
最后,通过 `QApplication::clipboard()` 创建剪贴板对象,并将创建的 MIME 数据设置到剪贴板上。这样,用户就可以通过粘贴操作将复制的图形项粘贴到其他地方。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)