在实际工程开发中遇到的实际问题,目前来进行一下总结:
工程需要:点击某个区域内的图片,之后在【主区域】内显示改图片。
点击【选择区域】中的图片,图片会显示到【主区域】中。
点击选择区域的第一张图片【未添加资源内容】
(图片均为500x280像素,工程要求规格,所以演示图片放大到主区域的时候分辨率会较低。)
会出现以下效果
以上内容分为【示例x】及【logo】,六张图片,均是添加到资源中的。
【未添加资源内容】是未添加到资源中的图片,是给予绝对路径后调用的图片。
主要思路是使用
void mousePressEvent(QMouseEvent *event);
mousepressEvent事件,判断鼠标点击的区域,如果在区域中,进行图片的切换。
主线程.h中的内容
/***绘图线程***/
#include "imagethread.h"
#include
#include
#include
//线程锁
#include
//路径
#include
#include
//鼠标事件
#include
#include
protected:
void mousePressEvent(QMouseEvent *event);
主线程.cpp中的内容
鼠标点击相应的区域后,鼠标的坐标会传递给下端代码中的x,y,之后x,y进行if判断中,判断鼠标点击的到底是哪儿个区域,是否是在【选择区域】的六个图片中。如果是,则发送信号,执行在绘图线程中的槽函数。(一下程序段中的数据均与【选择区域】的六张图片的位置有关)
关于绘图线程和绘图线程的设置之后后补充。
void MainWindow::mousePressEvent(QMouseEvent *event)
{
int x = event->x();
int y = event->y();
//第一列15,177,第二列195,357.5
if(x>15&&x<177)//第一列
{
if(y>145&&y<236)//第一行
{
emit picturefrist();//第一张
}
else if(y>310&&y<401)//第二行
{
emit picturethree();//第三张
}
else if(y>475&&y<566)//第三行
{
emit picturefive();//第五行
}
}
else if(x>195&&x<357.5)//第二列
{
if(y>145&&y<236)//第一行
{
emit picturesecond();//第二张
}
else if(y>310&&y<401)//第二行
{
emit picturefour();//第四张
}
else if(y>475&&y<566)//第三行
{
emit picturesix();//第六张
}
}
// qDebug()<<"i"<
本人另外开了一个线程进行绘图
主线程.h部分
private:
Ui::MainWindow *ui;
imagethread *imT;//绘图线程,将绘图线程的头文件包含在主线程中,变成预处理的形式
主线程.cpp初始化部分
/*********************************线程image*********************************************/
//imagethread *imT;
//QThread *imgthread;
imT = new imagethread;//分配空间
imgthread = new QThread(this);//指定父对象,子线程
imT->moveToThread(imgthread);//自定义线程加入子线程
//启动image子线程
imgthread->start();//一开始就启动,执行等级更高
//启动线程
connect(this,&MainWindow::sendblinkpaper,imT,&imagethread::drawblink);//一开始,就画空白部分就好
//初始化一下
emit sendblinkpaper();
connect(imT,&imagethread::imagepass,this,&MainWindow::getimage);//将画好的内容传递一下
connect(this,&MainWindow::sendrealpaper,imT,&imagethread::drawtrue);//绘制已经拍到的图片
/*************切换图片的信号和槽*************/
connect(this,&MainWindow::picturefrist,imT,&imagethread::pfrist);
connect(this,&MainWindow::picturesecond,imT,&imagethread::psecond);
connect(this,&MainWindow::picturethree,imT,&imagethread::pthree);
connect(this,&MainWindow::picturefour,imT,&imagethread::pfour);
connect(this,&MainWindow::picturefive,imT,&imagethread::pfive);
connect(this,&MainWindow::picturesix,imT,&imagethread::psix);
/*************切换图片的信号和槽*************/
/*********************************线程image*********************************************/
绘图线程.cpp的设置
void imagethread::drawblink()
{
//定义QImage绘图设备
QImage imageblink(1200,680,QImage::Format_ARGB32);//画幅大小,透明大小
QPainter p(&imageblink);
// p.drawPixmap(0,0,1200,680,QPixmap(":/image/ubk.png"));//画个背景
//示例图片1(使用图片像素规格为500x280像素)
QRectF targetf(15,145,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcef(0,0,500,280);//源文件图片需要显示的大小
QImage iamgef;
iamgef.load("C:/Users/Administrator/Desktop/w1.jpg");//打开指定目录的照片
p.drawImage(targetf,iamgef,sourcef);//起始坐标,需要置入的照片
//示例图片2(使用图片像素规格为500x280像素)
QRectF targets(195,145,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sources(0,0,500,280);//源文件图片需要显示的大小
QImage iamges(":/image/2.png");
p.drawImage(targets,iamges,sources);//起始坐标,需要置入的照片
//示例图片3(使用图片像素规格为500x280像素)
QRectF targett(15,310,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcet(0,0,500,280);//源文件图片需要显示的大小
QImage iamget(":/image/3.png");
p.drawImage(targett,iamget,sourcet);//起始坐标,需要置入的照片
//示例图片4(使用图片像素规格为500x280像素)
QRectF targetfour(195,310,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcefour(0,0,500,280);//源文件图片需要显示的大小
QImage iamgefour(":/image/4.png");
p.drawImage(targetfour,iamgefour,sourcefour);//起始坐标,需要置入的照片
//示例图片5(使用图片像素规格为500x280像素)
QRectF targetfive(15,475,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcefive(0,0,500,280);//源文件图片需要显示的大小
QImage iamgefive(":/image/5.png");
p.drawImage(targetfive,iamgefive,sourcefive);//起始坐标,需要置入的照片
//示例图片6(使用图片像素规格为500x280像素)
QRectF targetsix(195,475,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcesix(0,0,500,280);//源文件图片需要显示的大小
QImage iamgesix(":/image/6.png");
p.drawImage(targetsix,iamgesix,sourcesix);//起始坐标,需要置入的照片
//示例图片logo(使用图片像素规格为500x280像素)
QRectF targetlogo(375,155,725,406);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcelogo(0,0,500,280);//源文件图片需要显示的大小
QImage iamgelogo(":/image/logo.png");
p.drawImage(targetlogo,iamgelogo,sourcelogo);//起始坐标,需要置入的照片
emit imagepass(imageblink);
}
其中:
QRectF targetf(15,145,162.5,91);//在前界面中显示大小的尺寸,前两个值是图片左上角的初始坐标值,之后是长和宽
QRectF sourcef(0,0,500,280);//源文件图片需要显示的大小
QImage iamgef;
iamgef.load("C:/Users/Administrator/Desktop/w1.jpg");//打开指定目录的照片
p.drawImage(targetf,iamgef,sourcef);//起始坐标,需要置入的照片
为打开未添加到【资源】中图片的方法。