c++ 如何以编程方式更改QGraphicsLineItem

fumotvh3  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(200)

我正在处理可调整大小和可移动的覆盖项,目前在一个十字准线上。为了使它可调整大小,我需要更改两个QGraphicsLineItems的参数,我的十字准线由组成。但是调用这两行的setLength()setP1()setP2()setLine()等函数没有显示任何效果。请考虑以下代码:

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsRectItem>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(QWidget *parent = 0);
  ~MainWindow();

private:
  Ui::MainWindow    *ui;
  QGraphicsRectItem *_item;
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  QGraphicsScene *scene = new QGraphicsScene(this);
  _item                 = new QGraphicsRectItem(QRectF(0, 0, 100, 100));
  _item->setFlag(QGraphicsItem::ItemIsMovable);
  _item->setPen(QColor(102, 102, 102));

  auto l1 = new QGraphicsLineItem(0, 50, 100, 50, _item);
  auto l2 = new QGraphicsLineItem(50, 0, 50, 100, _item);

  l1->setPen(QColor(10, 255, 10));
  l2->setPen(QColor(10, 255, 10));

  scene->addItem(_item);

  ui->graphicsView->setScene(scene);
  ui->graphicsView->setAlignment(Qt::AlignTop | Qt::AlignLeft);

  ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);

  // make lines longer by 10 on button press
  connect(ui->resize, &QPushButton::clicked, this, [this]() {
    auto childs = _item->childItems();
    if (childs.size() > 0)
    {
      auto line1 = dynamic_cast<QGraphicsLineItem *>(childs.at(0));
      auto line2 = dynamic_cast<QGraphicsLineItem *>(childs.at(1));
      line1->line().setLine(0, 55, 110, 55); //no effect
      line2->line().setLine(55, 0, 55, 110); //no effect
    }
  });
}

MainWindow::~MainWindow() { delete ui; }

因为我还需要处理mousePressEventmouseMoveEvent,所以我停止使用QGraphicsItemGroup。
先谢谢你了。

zvokhttg

zvokhttg1#

请改用QGraphicsLineItem::setLine

//...
line1->setLine(0, 55, 110, 55);
line2->setLine(55, 0, 55, 110);

相关问题