如何在QGraphicsView中移动QWidget?

oon

我想在QGraphicsView中移动QPushButton或某种QWidget,例如QListWidet,QTableWidget等。

因此,我使用了QGraphicsProxyWidget。

然后,我单击了小部件并拖动。但是它并没有动。

如何移动QWidget?

这是我的代码。

ui->graphicsView->setGeometry(0,0,geometry().width(),geometry().height());
scene = new QGraphicsScene(0, 0, geometry().width(), geometry().height(), this);

ui->graphicsView->setScene(scene);

btn =new QPushButton(NULL);
QGraphicsProxyWidget *proxy = scene->addWidget(btn);
proxy->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);
scene->addItem(proxy);

你能告诉我怎么了吗?

谢谢。

斯科普恰诺夫

原因

在您的情况下,您无法移动按钮,因为尽管使代理服务器可移动,但按钮会以不同方式处理鼠标输入,以实现其单击功能。换句话说,在鼠标按下时,如何区分移动动作和点击动作?

我的解决方案是使按钮成为更大的QGraphicsRectItem的一部分后者将用作可拖动的句柄,即,如果用户与按钮交互-单击,但是如果QGraphicsRectItem的其他部分(未被按钮覆盖)与之交互,则可以四处移动按钮。

这是一个示例,确切显示了如何执行此操作:

auto *item = new QGraphicsRectItem(0, 0, 75, 40);
auto *proxy = new QGraphicsProxyWidget(item);
auto *btn = new QPushButton(tr("Click me"));

btn->setGeometry(0, 0, 77, 26);

item->setFlag(QGraphicsItem::ItemIsMovable);
item->setBrush(Qt::darkYellow);

proxy->setWidget(btn);
proxy->setPos(0, 15);
proxy->setFlags(QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemIsSelectable);

scene->addItem(item);

注意:要进行此工作,重要的是将的父项设置proxyitem

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章