Qt-demo-chip

来张程序图
主要练习类:
1-QGraphicsItem
2-QGraphicsView
3-QGraphicsScene

在这里插入图片描述

注意点-1:

在写view类的时候,找不到头文件,这里要在pro文件中加这2句

qtHaveModule(printsupport): QT += printsupport
qtHaveModule(opengl): QT += opengl
知识点-1:

Qt绘图三层结构:从上到下分别是:
QGraphicsView->QGraphicsScene->QGraphicsItem

知识点-2:

想要拖拽场景或者拖拽元素,只要设置一下场景的属性就可以

void View::togglePointerMode()
{
    graphicsView->setDragMode(selectModeButton->isChecked()
                              ? QGraphicsView::RubberBandDrag
                              : QGraphicsView::ScrollHandDrag);
    graphicsView->setInteractive(selectModeButton->isChecked());
}
知识点-3

想要场景元素绘制时有抗锯齿效果,或者使用opengl显示,也只要设置一下场景属性就可以

void View::toggleOpenGL()
{
#ifndef QT_NO_OPENGL
    graphicsView->setViewport(openGlButton->isChecked() ? new QGLWidget(QGLFormat(QGL::SampleBuffers)) : new QWidget);
#endif
}

void View::toggleAntialiasing()
{
    graphicsView->setRenderHint(QPainter::Antialiasing, antialiasButton->isChecked());
}
知识点-4

放大、缩小、旋转场景,通过QMatrix修改场景属性实现

void View::setupMatrix()
{
    qreal scale = qPow(qreal(2), (zoomSlider->value() - 250) / qreal(50));

    QMatrix matrix;
    matrix.scale(scale, scale);
    matrix.rotate(rotateSlider->value());

    graphicsView->setMatrix(matrix);
    setResetButtonEnabled();
}
知识点-5

通过QPrinter打印场景到pdf

void View::print()
{
#if !defined(QT_NO_PRINTER) && !defined(QT_NO_PRINTDIALOG)
    QPrinter printer;
    QPrintDialog dialog(&printer, this);
    if (dialog.exec() == QDialog::Accepted) {
        QPainter painter(&printer);
        graphicsView->render(&painter);
    }
#endif
}
知识点-6

boundingRect和shape()是用来做碰撞检测的boundingRect一定要自己实现。
参考文档
https://blog.csdn.net/weixin_39583140/article/details/93599949
QT自定义图形项中的boundingRect()和shape()函数的理解

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可峰科技

生活不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值