Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4235599
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-07-25 16:10:23

工程代码:
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头文件中添加

  1. class MainWindow : public QMainWindow
  2. {
  3. private:
  4.     Ui::MainWindow *ui;

  5. public slots: //add me 自己添加
  6.     void print();
  7. };

在 mainwindow.cpp
  构造函数中
  1. MainWindow::MainWindow(QWidget *parent) :
  2.     QMainWindow(parent),
  3.     ui(new Ui::MainWindow)
  4. {
  5.     ui->setupUi(this);
  6.     print(); // 添加
  7. }
实现 print()函数
  1. void MainWindow::print()
  2. {
  3.     //cursor 光标 获取光标坐标
  4.     int x = QCursor::pos().x();
  5.     int y = QCursor::pos().y();
  6.     //将int 装换成 string 类型
  7.     QString text = QString("Pos: %1, %2\n").arg(x).arg(y);

  8.     //grabWidget 截取窗口的画布部分
  9.     //grabWindow 截取f窗口
  10.     /* pix=pixmap.grabWindow(this->winId(),0,0,-1,-1);
  11.     this->winId()为获得当前窗口ID
  12.    我们这里QApplication::desktop()->winId() 获取当前窗口ID (x,y,1,1)(1,1)长宽
  13.    QPixmap::grabWindow(WId window, intff x = 0, int y = 0, int width = -1, int height = -1 ) [static]
  14.      */
  15.   // QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(), x, y, 1, 1);
  16.     QPixmap pixmap = QPixmap::grabWindow(winId(),x,y,1,1);
  17.     if (!pixmap.isNull())
  18.     {
  19.         QImage image = pixmap.toImage();//bitmap 转换为 qimage类型,失败返回 null
  20.         if (!image.isNull()) //判断转换是否成功
  21.         {
  22.             if (image.valid(0, 0)) //坐标是正确的话,返回 true
  23.             {
  24.                 QColor color = image.pixel(0, 0);//返回图片 坐标的颜色
  25.                 text += QString("RGB: %1, %2, %3").arg(color.red()).arg(color.green()).arg(color.blue());
  26.             }
  27.         }
  28.     }

  29.     ui->label->setText(text);
  30.     /*This static function calls a slot after a given time interval.
  31.     这个函数,调用一个 函数,在ms 时间间隔之后*/
  32.     QTimer::singleShot(50, this, SLOT(print()));
  33. }






阅读(1787) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~