我正在处理可调整大小和可移动的覆盖项,目前在一个十字准线上。为了使它可调整大小,我需要更改两个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; }
因为我还需要处理mousePressEvent
和mouseMoveEvent
,所以我停止使用QGraphicsItemGroup。
先谢谢你了。
1条答案
按热度按时间zvokhttg1#
请改用
QGraphicsLineItem::setLine
: