QT QGraphicsProxyWidget对象可选择或移动的一些tricks
我在QT图形视图框架中使用QGraphicsProxyWidget嵌入widget,但是无法使其和其它的QGraphicsItem一样可以选择或移动,使用如下语句无效:
1
2 3 4 5 6 7 8 9 10 11 12 |
// Create new QGraphicsScene and assign to graphicsView
scene = new QGraphicsScene(this); ui->graphicsView->setScene(scene); // Create widget and add to scene // Make selectable |
于是,我尝试继承QGraphicsProxyWidget获得自己的ProxyWidget,并通过重写鼠标事件响应函数来实现,在具体的实现中我尝试过调用QGraphicsProxyWidget的鼠标事件函数,也尝试过调用QGraphicsItem的鼠标事件函数,但是仅仅能捕获鼠标按下事件(mousePressEvent),其它诸如移动和释放均无法响应。
紧接着,我去Stack Overflow上查找解决方案,倒是有一些方案,纯属tricks性的现在总结如下:
实例1:给代理widget设置一个比其大一点的父类QGraphicsWidget充当拖拽处理效果
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
int main(int argc, char *argv[])
{ QApplication a(argc, argv); QGraphicsScene scene; view.setFixedSize(QSize()); return a.exec(); |
实例2:给代理widget设置一个比其大一点的QGraphicsRectItem充当窗口标题栏样式的拖拽处理效果
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
int main(int argc, char *argv[])
{ QApplication a(argc, argv); QGraphicsScene scene; ); view.setFixedSize(QSize()); return a.exec(); |
实例3:给代理widget设置一个比其大一点的QGraphicsRectItem充当边缘的拖拽处理效果
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
int main(int argc, char *argv[])
{ QApplication a(argc, argv); QGraphicsScene scene; auto *dial= new QDial(); // The widget dial->setGeometry(); view.setFixedSize(QSize()); return a.exec(); |
勉勉强强可以实现拖拽的效果吧!
更直接的效果请期待后续博文深入研究!
QT QGraphicsProxyWidget对象可选择或移动的一些tricks的更多相关文章
- QT 实现QGraphicsProxyWidget对象可选择或移动(item管理实现)
上篇博文<QT QGraphicsProxyWidget对象可选择或移动的一些tricks>介绍了实现QT QGraphicsProxyWidget对象可选择或移动的一些小的第三方技巧,但 ...
- Qt持久性对象进行序列化
Mfc和Java中自定义类的对象都可以对其进行持久性保存,Qt持久性对象进行序列化当然也是必不可少的.不过这个问题还真困扰了我很长时间……Mfc通过重写虚函数Serialize().Java则是所属的 ...
- Qt持久性对象进行序列化(同时比较了MFC与Java的方法)
Mfc和Java中自定义类的对象都可以对其进行持久性保存,Qt持久性对象进行序列化当然也是必不可少的.不过这个问题还真困扰了我很长时间……Mfc通过重写虚函数Serialize().Java则是所属的 ...
- 哪一个不是EL定义的隐式对象?(选择1项)
哪一个不是EL定义的隐式对象?(选择1项) A cookie B.pageContext C.attributes D initParam 解答:C 1)pageContext:JSP 页的上下文.它 ...
- Qt jsoncpp 对象拷贝、删除、函数调用 demo
/*************************************************************************************************** ...
- Qt 元对象系统(Meta-Object System)(不管是否使用信号槽,都推荐使用)
Qt 元对象系统(Meta-Object System) Qt的元对象系统基于如下三件事情: 类:QObject,为所有需要利用原对象系统的对象提供了一个基类. 宏:Q_OBJECT,通常可以声明在类 ...
- 为基于OpenCV的图像处理程序编写界面—关于QT\MFC\CSharp的选择以及GOCW的介绍
基于OpenCV编写图像处理项目,除了算法以外,比较重要一个问题就是界面设计问题.对于c++语系的程序员来说,一般来说有QT/MFC两种考虑.QT的确功能强大,特别是QML编写andr ...
- 【4opencv】为基于OpenCV的图像处理程序编写界面—关于QT\MFC\CSharp的选择以及GOCW的介绍
基于OpenCV编写图像处理项目,除了算法以外,比较重要一个问题就是界面设计问题.对于c++语系的程序员来说,一般来说有QT/MFC两种考虑.QT的确功能强大,特别是QML编写andr ...
- Qt界面对象的事件调用
QMetaObject::invokeMethod(m_mainToolBarItem, "change2DesktopMode", Q_ARG(QVariant, m_curMo ...
随机推荐
- Sublime Text2/3怎样在Mac OSX中配置CTags插件
参考地址: http://jingyan.baidu.com/article/48206aeafba820216ad6b3f5.html
- [转载]WPF控件拖动
这篇博文总结下WPF中的拖动,文章内容主要包括: 1.拖动窗口 2.拖动控件 Using Visual Studio 2.1thumb控件 2.2Drag.Drop(不连续,没有中间动画) 2.3拖动 ...
- go语言简述
Go是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go语言被设计成一门应用于搭建web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言.对于高性能分布式系统领域而言,Go语 ...
- 全国地区的省份、城市、区县 最新Sql脚本
IF (EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_Province]') AND type =' ...
- 线段树 + 区间更新 ----- HDU 4902 : Nice boat
Nice boat Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- layer mobile 指定URL连接 弹全屏
var url_a = $("#"+id).attr("alt"); //打开新页面 var pageii = layer.open({ type: 1, bt ...
- Yum 安装并设置 MySQL
本质上都是设置一个yum源,然后yum安装即可. 不过添加yum源有两个方法,一种是自己新建一个 /etc/yum.repos.d/mysql-community.repo :另一种是使用MySQ ...
- 使用Maven创建Java项目
在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...
- 手机web——自适应网页设计(html/css控制)http://mobile.51cto.com/ahot-409516.htm
http://mobile.51cto.com/ahot-409516.htm 一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的? 其实并不难. 首先,在网页代码的 ...
- Python_问题收录总结
python IndentationError: unindent does not match any outer indentation level的问题 用python编个作业,我先用的note ...