Qt graphic item日记

今天在用用graphic view 加入graphic item的时候要引入一个context menu,自然就要对context menu上的action进行slot处理,但是graphic item不是从qobject继承下来的,所以这里就需要多重继承,再次添加一个对qobject的继承,所有涉及到qobject的修改就要重新qmake,因为这时候需要重新构造meta文件,这些都不是问题,这些搞好之后就问题出现了,说meta文件里有一系列的错误,原来qt在多重继承的时候要求qobject放在第一位置,修改之后可以编译了,但是会给一个warning,再跟踪下去,原来graphic
view有专门提供一个graphic object的东西来替代graphic item + qobject的结构,折腾了一圈原来这么简单就可以解决了,好多时候就是这样的,知道就知道,不知道就不知道,和逻辑的推测关系不大,越是面向应用层的东西越有这样的特点,知识点零碎,要掌握的细节很多。

这些弄好了,可以编译通过了,运行发现一个crash的bug,好像是graphic object的指针出了问题,考虑到一个地方做了reinterpret_cast的操作比较可疑,google之后果然如此,涉及到多态的情况最好还是用dynamic_cast,换过之后就OK了。

时间: 2024-10-17 20:54:05

Qt graphic item日记的相关文章

Qt for iOS,Qt 与Objective C混合编程

项目设置 既然要聊 Qt 混合 OC 编程,首先要简单介绍一下 Objective C .我只有一句话:Go,问搜索引擎去.因为我所知实在有限,怕误导了您.当然如果您不怕,往下看吧. OC源文件介绍 首先我要说一下 Objective C 的源文件,后缀是.m 或 .mm ,在 .mm 文件里,可以直接使用 C++ 代码.所以,我们要混合 Qt 代码与 OC 代码,就需要在 Qt 项目里加入 mm 文件. pro 文件配置 Qt SDK for Mac ,安装之后, Qt Creator 会使用

Qt学习之路

  Qt学习之路_14(简易音乐播放器) Qt学习之路_13(简易俄罗斯方块) Qt学习之路_12(简易数据管理系统) Qt学习之路_11(简易多文档编辑器) Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理) Qt学习之路_9(Qt中Item Widget初步探索) Qt学习之路_8(Qt中与文件目录相关操作) Qt学习之路_7(线性布局和网格布局初步探索) Qt学习之路_6(Qt局域网聊天软件) Qt学习之路_5(Qt TCP的初步使用) Qt学习之路

细说Qt中的MVC (一)

好久不写博客了,最近写了不少Qt相关的代码,在此总结一下个人对Qt中MVC的一点理解.MVC全称是 Model View Controller,是一种非常非常流行的架构模式,相关MVC具体的,网上已经非常非常详尽了,不赘述了. 关于Qt中的MVC 其实Qt中的MVC并不叫MVC,而是叫“MVD”,Qt中没有Controller的说法,而是使用了另外一种抽象:Delegate (委托),其行为和传统的MVC是相同的.写过C#的同学肯定对delegate就不陌生了,这里delegate的用法就是负责

qt下面例子学习(部分功能)

from aa import Ui_Formfrom PyQt4.Qt import *from PyQt4.QtCore import *from PyQt4.QtGui import *from sys import *class A(QWidget,Ui_Form):    def __init__(self):        super(A,self).__init__()        self.setupUi(self)        self.Button.clicked.conn

Qt Quick实现的涂鸦程序

之前一直以为 Qt Quick 里 Canvas 才可以自绘,后来发觉不是,原来还有好几种方式都可以绘图!可以使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染),可以构造QSGNode 来绘图,还可以使用 QPainter !哇, QPainter 我很熟悉啊.于是,我用 QPainter 结合 QML 实现了一个简单的涂鸦程序: PaintedItem .它有下列功能: 设置线条宽度 设置线条颜色 设置背景颜色 清除涂鸦 无限级undo 程序很简陋,效果如下: 图1 Pai

QT Model View Controller 使用和认识

MVC全称是 Model View Controller,是一种非常非常流行的架构模式,相关MVC具体的,网上已经非常非常详尽了,不赘述了. 关于Qt中的MVC 其实Qt中的MVC并不叫MVC,而是叫"MVD",Qt中没有Controller的说法,而是使用了另外一种抽象: Delegate (委托) ,其行为和传统的MVC是相同的.写过C#的同学肯定对delegate就不陌生了,这里delegate的用法就是负责协调Model和View之间的数据.其思想如下图所示: Model是唯一

Qt Widgets——动作类与小部件菜单项

本文主要涉及以下三个类: QAction ——QWidgetAction QActionGroup QAction可称为动作类,它一般可当作菜单中的项组成菜单,也可作为工具栏上的按钮,它主要由图标.文本及快捷键三部分组成.QActionGroup用于将QAction分组,设置组内各QAction的互斥性质(exclusive ),设置后,组内的动作,在外观上形成多选框(不互斥)或单选框(互斥).QWidgetAction继承自QAction,它可将自定义的小部件插入到菜单项中,用于QSystem

Qt Quick快速入门之qml与C++交互

C++中使用qml对象,直接使用findChild获取qml对象,然后调用setProperty方法设置属性,当然必须在加载qml之后才能使用,不然findChild找不到对象,用法如下. engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QObject * text_Msg = engine.rootObjects()[0]->findChild<QObject*>("text_Msg");

Qt Quick开发教程4-QML拖放

在文本/富文本编辑器中,常用到拖放动作. import QtQuick 2.2 import "../shared" as Examples Rectangle { id: item property string display property alias dropEnabled: acceptDropCB.checked color: dropArea.containsDrag ? "#CFC" : "#EEE" ColorAnimatio