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

qt4.8.7选中QGraphicsItem对象获得焦点时怎么改变lineEdit的文本?

4
回复
6600
查看
[复制链接]

尚未签到

来源: 2018-11-28 00:02:16 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 信长大明神 于 2018-11-28 00:33 编辑


中间是一个QGraphicsView内嵌一个QGraphicsScene,可以通过左侧的按钮添加自定义的QGraphicsItem到scene中。
我想在选中一个item的同时,刷新右侧控件的内容。

但是QGraphicsItem不支持发信号,没有办法通知主界面更新。

然后我又试了重写主窗口鼠标点击事件,只要点击鼠标就更新。但是只有在主窗口空白部分才能捕获到事件

请问用什么办法才能实现我要的功能
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

肯定可以把信号传出去的,新增后再手动继承qobject类,qt的预处理器没有为这个类生成moc文件,需要把临时文件删除后重新构建。
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2018-11-28 00:02:17 显示全部楼层
信长大明神 发表于 2018-11-28 11:42
获取选中事件没有问题,关键问题是item和scene不能发送signal给主窗口。

我给item添加了QObject继承,但 ...

肯定可以把信号传出去的,新增后再手动继承qobject类,qt的预处理器没有为这个类生成moc文件,需要把临时文件删除后重新构建。
回复

使用道具 举报

累计签到:955 天
连续签到:1 天
2018-11-28 08:39:57 显示全部楼层
qgraphicsItem类有一个虚函数itemChange,你可以通过重写这个函数来获取item选中事件,然后再通知主界面,这样比较繁琐。qgraphicsscene有一个信号叫selectionchanged,你可以处理这个信号,找出你选中的item。方法很多,自己选择适合自己程序的。
回复

使用道具 举报

尚未签到

2018-11-28 11:42:10 显示全部楼层
wdmxtk002 发表于 2018-11-28 08:39
qgraphicsItem类有一个虚函数itemChange,你可以通过重写这个函数来获取item选中事件,然后再通知主界面, ...

获取选中事件没有问题,关键问题是item和scene不能发送signal给主窗口。

我给item添加了QObject继承,但是报错“undefined reference to vtable”,一直找不到原因,重构建都不行。后来重新创建一个类,就好了,莫名其妙。。。感觉是有什么文件残留

继承了QObject就可以发signal了

点评

肯定可以把信号传出去的,新增后再手动继承qobject类,qt的预处理器没有为这个类生成moc文件,需要把临时文件删除后重新构建。  详情 回复 发表于 2018-11-28 17:35
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-11-30 10:44:43 显示全部楼层
本帖最后由 baizy77 于 2018-11-30 10:46 编辑

可以重写scene的mousereleaseevent(),在里面通过scene的items接口获取鼠标单击处的图元,然后通过QApplication::postEvent()接口发出事件,需要编写自定义的事件类。postEvent()的接收者就是右侧的属性窗或者lineedit(最好用属性窗或者widget封装一下这些lineedit)。属性窗需要用自定义类,并重写bool event(QEvent* e);接口,在该接口内部,解析event,并获取所需数据,更新到lineedit。
回复

使用道具 举报

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

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