工程代码:
1. 没有使用ui自动建立 colorSnapTest.rar 2. 使用ui界面自动建立 pos_rgb.rar
如下图中,pos_rgb就是我们使用ui界面的,所以工程中含有ui这个资源文件, colorsnaptest是没有使用自动建立ui的,所以没有ui这个资源文件
比较两个工程代码不同点:
带ui的工程,因为自动产生了ui界面,可以在ui界面中设置布局,而不带ui的,我们需要在程序中设置布局
功能描述:
1.鼠标随机移动要某点,就会显示 当期坐标、 rgb颜色
软件流程:
1. 设置ui界面 label
2. 获取光标坐标 int x = QCursor::pos().x();
3. 截取窗口 QPixmap pixmap = QPixmap::grabWindow(winId(),x,y,1,1);
4. 将bitmap图片转换为 qimage类型
QImage image = pixmap.toImage();
5. 获取qimage图片rgb QColor color = image.pixel(0, 0);//返回图片 坐标的颜色
6. 显示 label 内数值
7. 调用QTimer::singleShot(50, this, SLOT(print()));,每隔50ms调用槽函数
下面的代码主要是 ui界面的
1. 建立工程
2. 主要代码
mainwindow.h头文件中添加
-
class MainWindow : public QMainWindow
-
{
-
private:
-
Ui::MainWindow *ui;
-
-
public slots: //add me 自己添加
-
void print();
-
};
在 mainwindow.cpp
构造函数中
- MainWindow::MainWindow(QWidget *parent) :
-
QMainWindow(parent),
-
ui(new Ui::MainWindow)
-
{
-
ui->setupUi(this);
-
print(); // 添加
-
}
实现 print()函数
- void MainWindow::print()
-
{
-
//cursor 光标 获取光标坐标
-
int x = QCursor::pos().x();
-
int y = QCursor::pos().y();
-
//将int 装换成 string 类型
-
QString text = QString("Pos: %1, %2\n").arg(x).arg(y);
-
-
//grabWidget 截取窗口的画布部分
-
//grabWindow 截取f窗口
-
/* pix=pixmap.grabWindow(this->winId(),0,0,-1,-1);
-
this->winId()为获得当前窗口ID
-
我们这里QApplication::desktop()->winId() 获取当前窗口ID (x,y,1,1),(1,1)长宽
-
QPixmap::grabWindow(WId window, intff x = 0, int y = 0, int width = -1, int height = -1 ) [static]
-
*/
-
// QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(), x, y, 1, 1);
-
QPixmap pixmap = QPixmap::grabWindow(winId(),x,y,1,1);
-
if (!pixmap.isNull())
-
{
-
QImage image = pixmap.toImage();//bitmap 转换为 qimage类型,失败返回 null
-
if (!image.isNull()) //判断转换是否成功
-
{
-
if (image.valid(0, 0)) //坐标是正确的话,返回 true
-
{
-
QColor color = image.pixel(0, 0);//返回图片 坐标的颜色
-
text += QString("RGB: %1, %2, %3").arg(color.red()).arg(color.green()).arg(color.blue());
-
}
-
}
-
}
-
-
ui->label->setText(text);
-
/*This static function calls a slot after a given time interval.
-
这个函数,调用一个 函数,在ms 时间间隔之后*/
-
QTimer::singleShot(50, this, SLOT(print()));
-
}
阅读(1830) | 评论(0) | 转发(1) |