Qt 随鼠标位置显示图片RGB数值

本文介绍了在Qt环境中如何处理鼠标事件,特别是鼠标双击事件,以及如何显示鼠标位置和获取像素颜色。通过重写mouseMoveEvent和mouseDoubleClickEvent函数,可以实现实时显示鼠标在图像上的坐标,并显示所选像素的RGB值。同时,展示了如何从QMouseEvent中获取坐标信息并更新UI界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们用鼠标按下界面上的一个按钮,它会发射clicked()单击信号,但是,它怎么知道自己被按下的呢,那就是通过鼠标事件处理的。
在Qt中处理事件有多种方法,不过最常用的是重写Qt事件处理函数。
【qt系列教程】第9篇基础(九)Qt键盘、鼠标事件的处理

void MouseEvent::mouseDoubleClickEvent( QMouseEvent * e )//鼠标双击事件响应
{
	QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
	if(e->button()==Qt::LeftButton){
	statusBar()->showMessage (tr("Mouse Left Button Double Clicked:")+str);
	}
	else if(e->button()==Qt::RightButton){
	statusBar()->showMessage (tr("Mouse Right Button Double Clicked:")+str);
	}
	else if(e->button()==Qt::MidButton){
	statusBar()->showMessage (tr("Mouse Middle Button Double Clicked:")+str);
	}
}

【博客园】qt鼠标事件总结(坐标,跟踪,点击判断)
看这段就让我感觉是中断回调函数这样…

图片
每一张图片都是由像素点组成,每一个像素都有三个通道:红,绿,蓝,还有一个alpha通道来保存透明度(JPEG格式的图片不支持透明)
0是黑,255是白
其实标准的灰度图就是每个像素点的三个通道的值一样或者近似,我们的策略就是将每个像素的每个通道的值都调成一样,取R,G,B值为三者的算数平均数就可以了,比如原色是RGB(169,204,69), 那么最终的RGB就是(169+204+69)/3 = 147.
菜鸟试水
显示图片

QLabel *lb = new QLabel(this);
lb->setPixmap(QPixmap::fromImage(pool));
lb->adjustSize();

lb->show();

写一个这样的子函数,
QString::number()是强制类型转换

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
        ui->showX->setText(QString::number(event->x()));//以窗口左上角为0点
        ui->showY->setText(QString::number(event->y()));

//    ui->showX->setText(QString::number(QCursor().pos().x()));//以电脑屏幕左上角为0点
//    ui->showY->setText(QString::number(QCursor().pos().y()));

//  ui->showdata->setText(tr("(%1,%2)").arg(event->x()).arg(event->y())); //哦。。一个标签显示两个变量是这么搞的 不好意思丢人了
//arg()是QString类中的一个静态函数,使用它就可以在字符串中使用变量了。所以就不用那个强制类型转换了
    QColor pixcolor=QColor(pool.pixel(event->x(),event->y()));//有pool.pixelColor()不知道干嘛的
    ui->showR->setText("R"+QString::number(pixcolor.red()));
    ui->showG->setText("G"+QString::number(pixcolor.green()));
    ui->showB->setText("B"+QString::number(pixcolor.blue()));
}

必须得在MainWindow的头文件里写上函数声明,protected类型

protected:
    void mouseMoveEvent(QMouseEvent *event);

在这里插入图片描述

【优快云】QT 实时显示鼠标所指的坐标 && 监测键盘事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值