找回密码
 立即注册
收起左侧

关于QGraphicsScene类的问题

11
回复
9746
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2018-11-28 17:08:04 显示全部楼层 |阅读模式
1Qter豆
我在使用QgraphicsItem类建立流程图界面时,鼠标点击其中某个Item,左键添加横向新Item,程序运行都没问题,调试也没问题,但是QGraphicsView始终不显示新建的Item

这是新建Item的函数
m_scene = new CustomScene;
        //m_scene2 = new QGraphicsScene();
        QGraphicsRectItem *m_item = new QGraphicsRectItem();
        m_item->setRect(0, 0, 100, 100);
        //m_item->setPos(1000, 1000);
        m_item->setBrush(QBrush(QColor(Qt::gray)));
        m_item->setPen(QPen(QBrush(Qt::black), 20));
        m_item->setFlag(QGraphicsItem::ItemIsFocusable);
        m_scene->addItem(m_item);



这是main.cpp
QApplication a(argc, argv);
       
        CustomScene scene;
        scene.setSceneRect(-100, -230, 5000, 5000);//scene的起点坐标和长宽(长宽足够大才可以出现滚动条)
       
        //scene.setSceneRect(0, 0, 60, 60);
        CustomView view;
        view.setScene(&scene);
        //view.setAlignment(Qt::AlignHCenter);
        view.centerOn(0, 0);


        //view.setFixedSize(720, 720);
        view.setGeometry(200, 200, 700, 700);//相对于桌面屏幕的坐标位置以及窗口大小
       
        //view.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);//横向滚动条
        view.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);//竖向滚动条
        //view->verticalScrollBar()->setSliderPosition(0);
        view.show();
        return a.exec();





各位大佬,求帮助,小白搞得很艰难

回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-11-28 23:40:33 显示全部楼层
您的view在(200,200)处,item在(0,0)处,view能看到item吗?
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-29 08:16:17 显示全部楼层
baizy77 发表于 2018-11-28 23:40
您的view在(200,200)处,item在(0,0)处,view能看到item吗?

您好,坐标问题我试了很多,可是还是不行。在这个函数之前我在鼠标事件里面定义过一个Scene,用来addItem竖向的多个Item,现在我需要在横向在添加Item,所以又定义了一个m_Scene。对于这个问题我怀疑的是这两个scene是不是会冲突(这两个scene是在同一个CustomScene类下不同的函数里面定义)

点评

你想你的item在view里显示,你得把你的scene添加到view里啊  详情 回复 发表于 2018-11-29 08:37
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2018-11-29 08:37:08 显示全部楼层
zgzlinux 发表于 2018-11-29 08:16
您好,坐标问题我试了很多,可是还是不行。在这个函数之前我在鼠标事件里面定义过一个Scene,用来addItem ...

你想你的item在view里显示,你得把你的scene添加到view里啊
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-29 08:47:43 显示全部楼层
wdmxtk002 发表于 2018-11-29 08:37
你想你的item在view里显示,你得把你的scene添加到view里啊

我的主函数main.cpp里面有view.setScene(&scene);这个啊,这个不就是把CustomScene(自定义类,继承于QGraphicsScene)所有的scene都包括了吗

点评

你的自定义类和你实例化出来的实例是两个概念,每一个view实例只能同时管理一个scene,在你的main函数里添加这样的测试代码: QGraphicsView view; QGraphicsScene scene; view.setScene(&scene); v  详情 回复 发表于 2018-11-29 15:12
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2018-11-29 15:12:43 显示全部楼层
zgzlinux 发表于 2018-11-29 08:47
我的主函数main.cpp里面有view.setScene(&scene);这个啊,这个不就是把CustomScene(自定义类,继承于QGr ...

你的自定义类和你实例化出来的实例是两个概念,每一个view实例只能同时管理一个scene,在你的main函数里添加这样的测试代码:
    QGraphicsView view;
    QGraphicsScene scene;
    view.setScene(&scene);
    view.show();
    QGraphicsRectItem * item = new QGraphicsRectItem(QRectF(0,0,10,10));
    scene.addItem(item);
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-30 08:16:41 显示全部楼层
wdmxtk002 发表于 2018-11-29 15:12
你的自定义类和你实例化出来的实例是两个概念,每一个view实例只能同时管理一个scene,在你的main函数里 ...

可能还是对QGraphicsScene这个类理解不够深刻,在添加竖向item过程中我定义了一个m_scene,点击scene界面时会new出来指定间距的item,同时main函数还是QGraphicsScene scene。现在我需要点击任意一个item后可以添加横向的items,使用的还是m_scene,但是添加没效果。你让我添加的测试代码我试了,是可以的。所以还是很困惑

点评

建议加深对C++基础的理解,然后网上不是有教程,QT自带的关于view和scene框架例子都好好看看,慢慢就理解了  详情 回复 发表于 2018-11-30 08:42
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2018-11-30 08:42:17 显示全部楼层
zgzlinux 发表于 2018-11-30 08:16
可能还是对QGraphicsScene这个类理解不够深刻,在添加竖向item过程中我定义了一个m_scene,点击scene界面 ...

建议加深对C++基础的理解,然后网上不是有教程,QT自带的关于view和scene框架例子都好好看看,慢慢就理解了
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-11-30 10:41:32 显示全部楼层
新建item的接口定义以及调用的代码能否贴一下?新建item时,所用的scene应该与选中item的scene是同一个,否则你的view上绑定的scene是你选中item所在的scene。
也就是说,新建item的接口中,不应再new 一个scene,应该取你选中item的scene。然后向这个scene添加item。
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-30 15:26:40 显示全部楼层
baizy77 发表于 2018-11-30 10:41
新建item的接口定义以及调用的代码能否贴一下?新建item时,所用的scene应该与选中item的scene是同一个,否 ...

     问题已经解决嘞,解决思路是和你的一样,之前一直没显示就是scene不一样了(虽然当时声明啥的觉得都一样)。
     当时出现问题时就是觉得两次添加item的scene不一样了,可是不知道具体是哪里,最后才找到scene的声明和定义出了问题。
     基础不行,还得努力,谢谢各位大佬的帮助!
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-11-30 15:37:15 显示全部楼层
baizy77 发表于 2018-11-30 10:41
新建item的接口定义以及调用的代码能否贴一下?新建item时,所用的scene应该与选中item的scene是同一个,否 ...

大佬,顺便再问一个问题,QGraphicsRectItem可以贴图图片吗,比如我形成的矩形框我想左半部分贴图图片,右半部分添加文字。我现在采用的方式是直接在里面添加QGraphicsPixmapItem和QGraphicsTextItem,通过坐标强行结合在一起,傻瓜式做法,有没有更简便的方法啊

点评

还有一个方法是编写自己的item类,提供接口设置图片、文本。需要实现boundingRect()、paint()、shape()接口。  详情 回复 发表于 2018-12-2 11:27
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-12-2 11:27:50 显示全部楼层
zgzlinux 发表于 2018-11-30 15:37
大佬,顺便再问一个问题,QGraphicsRectItem可以贴图图片吗,比如我形成的矩形框我想左半部分贴图图片, ...

还有一个方法是编写自己的item类,提供接口设置图片、文本。需要实现boundingRect()、paint()、shape()接口。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了