Qt实例-UCF数据标注5之绘图控件的选择

来源:互联网 发布:qq空间刷留言软件 编辑:程序博客网 时间:2024/06/16 04:50

QGraphicsView、QLabel可以完成RGB图像的显示。

QImage完成对图像的读取load函数

问题描述1:变量的生命周期,当new创建对象的时候,最重要的在于什么时候销毁对象

问题描述2:如何使用QGraphicsView?



注:上述两幅图转载自:http://blog.csdn.net/taiyang1987912/article/details/38681969


问题描述3:QGraphicsView空间里面实现缩放功能:

参考两篇,第一是如何实现缩放http://www.cnblogs.com/foohack/p/4536025.html

第二是如何发射信号,定义槽函数,以及连接的问题https://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html


问题描述4:当在QGraphicsView控件之外滑动滚轮实现缩放,但是鼠标进入控件内部,则拉动右侧滑动条,不能实现滑动。

由此可见,滚轮的事件首先被谁给截取了?

去掉滚动条可以添加如下语句:

    graphicsview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);    graphicsview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

而下面的两条语句是获取滚动条当前是否开启以及其所处位置

    graphicsview->sizeAdjustPolicy();    graphicsview->horizontalScrollBar();
虽然去掉了滚动条,但是实际上进入到控件里面,当向上滑动时,先是把图片滑动最顶部,不能再滑动时,在对图像进行放大的操作,往下滑动时,也是一样。

*****************************

    graphicsview->setDragMode(QGraphicsView::RubberBandDrag);//实现左右键能够画框框    graphicsview->setDragMode(QGraphicsView::ScrollHandDrag);//当鼠标进入控件内,变成手的形状,左键按下不松,可以实现对图片的拖动,右键无反应

*****************************

问题描述5:

MyQGraphicsView::MyQGraphicsView()MyQGraphicsView::MyQGraphicsView(QWidget *parent)MyQGraphicsView::MyQGraphicsView(QWidget *parent): QGraphicsView(parent)
这三个语句的内涵是不一样,其中第一个作为构造函数,初始化时,无法加入this指针,当作为窗口的一个成员变量时,显示图像时,弹出窗口,第三句是可以直接把控件嵌入在窗口上,而第二句有问题,会出现警告。

问题描述6:提示链接错误,某个函数内emit的信号没有被引用到

后谷歌到如下博客


转载自:http://blog.sina.com.cn/s/blog_607142c90100lgz6.html

首先在声明的开始加入Q_OBJECT,第二步执行qmake,再重新构建所有项目,即可运行。

问题描述7:鼠标移动时没有反应,后来发现需要改成如下判别语句

if (event->buttons() & Qt::LeftButton)
event->button()==Qt::LeftButton
是有问题的,进不了if内部

问题描述8:

paintevent事件,this->viewport()->update()调用绘图事件,可是在鼠标响应里面调用此语句来调用事件,可是明明没有调用绘图事件,有时候绘图事件也会被调用,其内部机理还需进一步厘清。先搞懂this->viewport()->update()。

现在直接在鼠标事件里面进行处理。

问题描述9:

QMetaObject::connectSlotsByName: No matching signal for on_pushButton_4_clicked()

这类提示,只需要不要已on开头,这是系统命名的方式,若去掉on_则不会有该提示。

参考网址:http://blog.csdn.net/restraint/article/details/9956449

问题描述10:

为什么QImage当Load后,画方框无问题,如果没有载入图片,直接从Mat转换得到QImage,画方框时,就会自动变成白色。

graphicsview->image = (QImage((const unsigned char*)(cv_img_rgb.data),cv_img_rgb.cols,cv_img_rgb.rows,cv_img_rgb.cols*cv_img_rgb.channels(),QImage::Format_RGB888));

必须先保存成图片在读取,才没有问题

问题描述11:

这个错误既然一直看不出,哎。。。

y=(uint)((my_h+x)/alpha);x=(uint)((my_v+y)/alpha);