我们用鼠标按下界面上的一个按钮,它会发射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);