C++ 在Qt中选择元素

C++ 在Qt中选择元素,c++,qt,C++,Qt,我想让图形视图中的实体可以选择,就像我们通常选择拖动的东西一样。用于拖动问题。我将橡胶带功能用作: ui->graphicsView->setDragMode(QGraphicsView::RubberBandDrag); 对于可选择的实体,在每个插槽(用于绘制线、圆等的插槽)中,我设置了标志,但项目未被选中。 这是代码: void MainWindow::drawCircle(){ ui->graphicsView->setScene(scene);

我想让图形视图中的实体可以选择,就像我们通常选择拖动的东西一样。用于拖动问题。我将橡胶带功能用作:

   ui->graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
对于可选择的实体,在每个插槽(用于绘制线、圆等的插槽)中,我设置了标志,但项目未被选中。 这是代码:

void MainWindow::drawCircle(){
    ui->graphicsView->setScene(scene);
    item2 = new circle;
    scene->addItem(item2);
    qDebug() << "Circle Created";
   item2->setFlag(QGraphicsItem::ItemIsSelectable);
void主窗口::drawCircle(){
ui->graphicsView->setScene(场景);
第2项=新循环;
场景->附加项(第2项);
qDebug()设置标志(QGraphicsItem::ItemIsSelectable);

如何使实体可选择?

您不需要在每个插槽中调用setFlag(QGraphicsItem::ItemIsSelectable)。 创建QGraphicsItem时,应使用指向对象的指针设置适当的标志:-

QGraphicsItem* pItem = new QGraphicsItem(parent);
pItem->setFlag(QGraphpicsItem::ItemIsSelectable);
或者在继承的QGraphicsItem的构造函数中

如果您使用的是从QGraphicsItem继承的项,则需要正确定义其boundingRect函数。如果项的形状不规则,则还可以重写该形状函数

如果操作正确,如RubberBandDrag的状态:-

将出现橡皮筋。拖动鼠标将设置橡皮筋几何图形,并且橡皮筋覆盖的所有项目都将被选中。对于非交互式视图,此模式处于禁用状态

此外,您似乎对如何使用QGraphicsView/QGraphicscene系统感到困惑。QGraphicsView可以被视为一个观察世界的窗口,这就是QGraphicscene

创建一个场景,只需将场景设置为视图一次,然后将项目添加到场景中。接下来,用户将与QGraphicsView和场景交互,而不是与主窗口交互

主窗口只是QGraphicsView的一个容器。事实上,你根本不需要主窗口,除非QGraphicsView/场景是带有其他小部件的大型应用程序的一部分

当用户在QGraphicsView上单击鼠标时,其标志设置为可选择和可移动的项目可以在场景中拖动。如果您需要更多行为,可以覆盖QGraphicsView的鼠标事件(mouseMoveEvent、MouseSpresseEvent、mouseReleaseEvent),甚至覆盖单个项目中的事件


我建议看一下。

是的,我使用的是边界矩形,但我没有理解:(你能给我一个演示,让我抓住你吗。