gpt4 book ai didi

qt - 在 QT 5 中拖动 QWidget

转载 作者:行者123 更新时间:2023-12-04 14:29:14 25 4
gpt4 key购买 nike

我必须制作类似 iOS 界面的东西,可以拖动图标的 3x3 字段来改变它们的位置,然后将它记住在 XML 文件中。

我决定使用 Grid 类(QWidget 是父类)作为容器,而我自己的继承自 QWidget 的类作为元素。

现在我正在尝试学习如何为 QWidget 执行拖放操作,但似乎您只能拖放到 QWidget 上,但无法拖动它。

不可能吗?这个东西怎么搬?

最佳答案

拖动小部件并不容易。大量的编码你必须自己做。

来自 Qt Docs :

void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton
&& iconLabel->geometry().contains(event->pos())) {

QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;

mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);
drag->setPixmap(iconPixmap);

Qt::DropAction dropAction = drag->exec();
...
}
}

这意味着,当您的小部件收到要拖动它的消息时,例如就像鼠标按下一样,它必须创建一个 QDrag 对象。

在 QDrag 对象中,您可以设置一个像素图,它代表您拖动的小部件。如果此时隐藏您的小部件,就好像您的鼠标指针“捕获”了小部件一样。

此外,您还需要一个 QMimeData 对象。您可以在其中放置描述您的小部件的各种数据。在您的用例中,允许您识别小部件的东西。因为,这里是困难的部分:你必须自己移动。

作为网格的父级的小部件接收放置事件并从 mime 数据读取,哪个小部件希望我移动。它从 QDropEvent 获取要移动小部件的点。这就是您必须编码的内容:网格布局中的实际重新定位。并且不要忘记更新xml。

关于qt - 在 QT 5 中拖动 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com