QT初探(QT+VS2010)

来源:互联网 发布:.net门户网站源码 编辑:程序博客网 时间:2024/06/11 00:32

配置方法网上很多,就不详述了。基本的ui样式也在qt designer中绘制好了。

首先探究如何让按钮响应事件。在Qt Creator自带的教程中,有讲解说通过右键点击按钮来添加signal和slot。但是我并没有右键找到,而是在designer右侧的工具栏位置找到“信号/槽编辑器”这个单独的菜单。通过“+”号新建,然后在每个选项中选择需要的类和对象即可。其中signal就是发生的动作,slot是响应后执行的函数。具体机制网上搜索有很多,这里有一篇http://www.cnblogs.com/MuyouSome/p/3515941.html。

我希望通过点击菜单,而在视图中显示一张图片。仅仅根据名称,我在视图中添加了QGraphicsView。查找官网上的reference,说QGraphicsView一般和QGraphicsScene一起使用。在创建了QGraphicsScene类后,可以通过addItem()添加已有的QGraphicsItem类对象,或者通过addEllipse()等函数直接添加形状。去查了下QGraphicsItem,好像没有绘制一张图片的功能。于是网上搜了下,有人说可以用QPixmap这个类。去reference查,类描述中说,qt有四个处理image数据的类:QImage,QPixmap,QBitmap,QPicture,其中QPixmap被设计和优化成利于在屏幕上显示image的,而QImage是针对I/O操作的。通常如果需要对图片进行特定操作,就使用QImage载入图片,操作完成后转换成QPixmap来显示。但如果不需要进行操作,也可以直接加载成为QPixmap,QPixmap有通过图片路径初始化的函数。绘制的方法由网络提供:QPixmap pixmap;QPainter painter(pixmap);QGraphicsScene::render(painter,....);

在进行图片操作之前,还需要打开文件。qt提供了QFileDialog类进行文件选择(http://blog.csdn.net/lpdpzc/article/details/9010801)。似乎在对话框弹出时主进程是阻塞的?见http://www.fengfly.com/plus/view-171411-1.html中例程,亲测也是如此。

完成这步还是需要信号与槽。虽然qt designer中有信号/槽编辑器,但暂时没有成功使用,而是手动添加QObject::cnnect函数。在此对于qt在vs中自动生成的一些文件进行了更多了解。qt在vs自动生成的文件包括:ui_projectname.h,其中的类包括了使用designer设计的所有组件;双击projectname.ui可以打开designer,在designer中设计修改组件,会在ui_projectname.h中自动更改,但好像不是很灵敏,有时需要编译一下才改;main.cpp为程序入口;projectname.h和projectname.cpp是连接ui和vs程序的窗口类,其中实例了ui,我把QObject::connect函数用在这个类(projectname类,在projectname.h中)的初始化函数中。因为使用到的QFileDialog类需要传入父窗口,而这个类是“最父”的窗口,直接传入"this"很方便,所以把slot的函数也写在这个类里。而在main函数中会自动生成这个类的实例和显示窗口的show()函数。connect具体使用例子:QObject::connect (ui.actionOpenPicture,SIGNAL(triggered()),this,SLOT(openImage()));而slot的函数在声明的时候得使用关键字slot:public slot:void openImage();

获得图片路径后要显示图片,使用图片路径初始化QPixmap类,然后实例一个QGraphicsScene类,使用这个类初始化通过designer生成的QGraphicsView类。使用QGraphicsScene::addPixmap添加QPixmap实例,使用QGraphicsView::show显示出来,具体见http://zhidao.baidu.com/link?url=_83D7iW5qJw1-zHC4Jh1xIQKE_qCeThnd54FB5EkHcDPq8aUQuBoRP8B7MV65G0Y14ZX9GPWjAXhSX0h3XuQ9a。图片显示出来后,如果图片太大,会出现显示界面有滚动条的情况,这个问题之后再解决。




 

0 0