• 7757阅读
  • 6回复

求助:关于QGraphicScene绘制的问题 [复制链接]

上一主题 下一主题
离线zdmflies
 

只看楼主 倒序阅读 楼主  发表于: 2012-02-26

scene = new mGraphicScene(0,0,1000,1000);
QPixmap backpix;
backpix.load(".\\back.jpg");
scene->setBackgroundBrush(QBrush(QColor(192,192,192),backpix));
view = new mGraphicView;
view->setScene(scene);
view->setRenderHints(QPainter::Antialiasing
                         | QPainter::TextAntialiasing);
view->setContextMenuPolicy(Qt::ActionsContextMenu);
view->centerOn(view->width()/2,view->height()/2);
setCentralWidget(view);
如上,mGraphicScene继承自QGraphicsScene   mGraphicView继承自QGraphicsView
问题是1、我想绘制网格线和在窗口边界绘制标尺,如图,该如何实现呢
2、我想通过响应鼠标事件来实现QGraphicsItem的属性更改,应该在哪里重载什么函数??
3、我重载了mGraphicView的drawBackground和drawForeground为什么没有调用呢???
先谢谢各位啦.............................................
离线米饭拌面

只看该作者 1楼 发表于: 2012-02-27
你这个View是固定不动的么?

item主要重载的函数是paint函数 绘制都在这里面

重载了mGraphicView的drawBackground和drawForeground为什么没有调用, 这个就、、、再试试吧 不过这两个函数 你基本用不到

QQ:32336134
离线robertkun

只看该作者 2楼 发表于: 2012-02-29
'标尺可以加在view里,因为view也是一个widget ..
                                              简单的生活使人快乐!
离线phu727
只看该作者 3楼 发表于: 2012-03-07
楼主有没有找到方法阿,我正好也需要阿,
离线zdmflies

只看该作者 4楼 发表于: 2012-03-08
回 2楼(robertkun) 的帖子
怎么加在view里面呀,我这有一个比较简单的模型,希望能给做个例子,谢啦!! z.rar (74 K) 下载次数:22 ,但是在我这个例子里 标尺总是不能和scene的实际位置对齐,求解决。。。。
离线robertkun

只看该作者 5楼 发表于: 2012-03-09

  1. //************************************* TRuler.h
  2. #pragma once
  3. #include <QLabel>
  4. enum TDirection
  5. {
  6. T_Hor,
  7. T_Ver,
  8. };
  9. class TRuler : public QLabel
  10. {
  11. Q_OBJECT
  12. public:
  13. TRuler(TDirection dire, QWidget* parent = NULL);
  14. virtual ~TRuler();
  15. protected:
  16. virtual void paintEvent ( QPaintEvent * ev);
  17. private slots:
  18. void slot_horValueChanged(int);
  19. void slot_verValueChanged(int);
  20. void slot_verRangeChanged(int,int);
  21. private:
  22. TDirection mDire;
  23. int mHorOffset;
  24. int mVerOffset;
  25. int mMaxVerOffset;
  26. };
  1. //************************************* TRuler.cpp
  2. #include "TRuler.h"
  3. #include <QPainter>
  4. TRuler::TRuler( TDirection dire, QWidget* parent /*= NULL*/ )
  5. : QLabel(parent)
  6. , mDire(dire)
  7. , mHorOffset(0)
  8. , mVerOffset(0)
  9. , mMaxVerOffset(0)
  10. {
  11. setStyleSheet(QString::fromUtf8("background-color: rgb(85, 255, 0);"));
  12. if(mDire == T_Hor)
  13. {
  14. setFixedHeight(20);
  15. }
  16. else
  17. {
  18. setFixedWidth(20);
  19. }
  20. }
  21. TRuler::~TRuler()
  22. {
  23. }
  24. void TRuler::paintEvent( QPaintEvent * ev )
  25. {
  26. QPainter painter(this);
  27. painter.save();
  28. if(mDire == T_Hor)
  29. {
  30. for(int i=0; i<width(); ++i)
  31. {
  32. if(i%50 == 0)
  33. {
  34. painter.drawLine(QLineF(QPointF(i,height()-5),QPointF(i,height())));
  35. painter.drawText(QPointF(i, height()/2), QString::number(i+mHorOffset));
  36. }
  37. }
  38. }
  39. else
  40. {
  41. for(int i=0; i<=height(); ++i)
  42. {
  43. if((height()-i)%50 == 0)
  44. {
  45. QTransform tf = painter.transform();
  46. tf.translate(width()/2,i);
  47. tf.rotate(-90);
  48. painter.setTransform(tf);
  49. painter.drawLine(QLineF(QPointF(0,0),QPointF(0,5)));
  50. painter.drawText(QPointF(0, 0), QString::number(height()-i+mVerOffset));
  51. painter.resetTransform();
  52. }
  53. }
  54. }
  55. painter.restore();
  56. QLabel::paintEvent(ev);
  57. }
  58. void TRuler::slot_horValueChanged( int value )
  59. {
  60. mHorOffset = value;
  61. update();
  62. }
  63. void TRuler::slot_verValueChanged( int value )
  64. {
  65. mVerOffset = mMaxVerOffset - value;
  66. update();
  67. }
  68. void TRuler::slot_verRangeChanged( int minVal, int maxVal )
  69. {
  70. mMaxVerOffset = maxVal;
  71. }

给QGraphicsView 添加标尺.
具体代码:
testEvent.zip (5 K) 下载次数:28
                                              简单的生活使人快乐!
离线zdmflies

只看该作者 6楼 发表于: 2012-03-12
多谢!!!
快速回复
限100 字节
 
上一个 下一个