QT 进度条、滑动条、调色板、取色器

一、简述

       记--QT 进度条、滑动条简单的使用例子,调色板练习。

       例子1:链接: https://pan.baidu.com/s/1NBv2-ptbcOEB3IYhBeCguQ 提取码: b86q 

       例子2:链接: https://pan.baidu.com/s/1RDsbQ9agAVJYPnWCabEBug 提取码: 66he

二、例子1 进度条例子

         2.1  效果:

        2.2  工程结构:

                  

布局:

         2.3  源文件

    ProgressDemo.pro文件

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = ProgressDemo
TEMPLATE = appSOURCES += main.cpp\mainwindow.cppHEADERS  += mainwindow.hFORMS    += mainwindow.ui

    mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_horizontalSlider_valueChanged(int value);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

    main.cpp文件

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

    mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);//ui->progressBar->setMinimum(0);//设置进度条的最小值//ui->progressBar->setMaximum(100);//设置进度条的最大值ui->progressBar->setValue(0);//设置进度条的当前值ui->horizontalSlider->setMinimum(0);//设置水平滑动条的最小值ui->horizontalSlider->setMaximum(100);//设置水平滑动条的最大值ui->horizontalSlider->setValue(0);//设置水平滑动条的当前值}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_horizontalSlider_valueChanged(int value)//当滑动条的值改变时 执行此槽函数
{//value是滑动条的值,也可以这样获取int value = ui->horizontalSlider->value();//获取水平滑动条的值ui->progressBar->setValue(value);//设置进度条的值
}

三、例子2 滑动条例子---调色板

3.1 效果

取色器:鼠标左键或右键单击,取色完成。

3.2 工程结构

布局:

3.3 源文件

SliderDemo.pro文件

QT       += core gui
RC_ICONS += img/palette.icogreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = SliderDemo
TEMPLATE = appSOURCES += main.cpp\mainwindow.cppHEADERS  += mainwindow.hFORMS    += mainwindow.uiRESOURCES += \res.qrc

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTint m_r;//红色的值int m_g;//绿色的值int m_b;//蓝色的值QPixmap m_pixmap;//全屏截图,截图频繁会单只鼠标卡顿public:explicit MainWindow(QWidget *parent = 0);~MainWindow();bool m_isPicColor;//指示当前是否进行屏幕取色void setColor();//设置颜色static void PickupColor(int x, int y);//获取鼠标位置的1个像素 x和y是鼠标的位置static MainWindow* st_this;//静态的对象指针,用来设置成员值(设置颜色)private slots://槽函数void on_horizontalSliderR_valueChanged(int value);//红色滑动条的值改变了就会调用void on_horizontalSliderG_valueChanged(int value);//绿色滑动条的值改变了就会调用void on_horizontalSliderB_valueChanged(int value);//蓝色滑动条的值改变了就会调用void on_btnEditColor_clicked();//编辑颜色 按钮 的响应函数void on_spinBoxR_valueChanged(int value);//红色spinBox数值微调框的值改变了就会调用void on_spinBoxG_valueChanged(int value);//绿色spinBox数值微调框的值改变了就会调用void on_spinBoxB_valueChanged(int value);//蓝色spinBox数值微调框的值改变了就会调用void on_btnPickupColor_clicked();//取色private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

main.cpp文件

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>//颜色对话框
#include <QMouseEvent>//鼠标事件
#include <QPoint>//点(坐标位置)
#include <QDebug>
#include <QScreen>
#include <Windows.h>MainWindow* MainWindow::st_this = nullptr;//初始化静态指针MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setFixedSize(this->width(), this->height());//固定窗口大小st_this = this;m_r = 255;//初始化颜色值m_g = 255;m_b = 255;this->setWindowIcon(QIcon(":/images/img/palette.ico"));//设置可执行程序图标ui->centralWidget->setMouseTracking(true);//开启鼠标实时追踪,用来实时的获取鼠标的位置setMouseTracking(true);//开启鼠标实时追踪,为了节省资源默认状态下是要鼠标按下才捕捉m_isPicColor = false;
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::setColor()//设置颜色
{//设置label的颜色QString style = QString("background-color: rgb(%1, %2, %3);").arg(m_r).arg(m_g).arg(m_b);ui->labelColor->setStyleSheet(style);//获取RGB十六进制形式QString strRHex = QString::number(m_r, 16).toUpper();//将r的十六进制形式 转为字符串形式(大写)QString strGHex = QString::number(m_g, 16).toUpper();QString strBHex = QString::number(m_b, 16).toUpper();//设置Hex这一列标签ui->labelRHex->setText("0x" + strRHex);ui->labelGHex->setText("0x" + strGHex);ui->labelBHex->setText("0x" + strBHex);//将颜色值设置到lineEdit,可以直接复制颜色值ui->lineEditColorValue->setText(QString("RGB(%1,%2,%3),HEX(0x%4%5%6)").arg(m_r).arg(m_g).arg(m_b).arg(strRHex).arg(strGHex).arg(strBHex));
}void MainWindow::on_horizontalSliderR_valueChanged(int value)//滑动条的值发生变化时执行
{m_r = value;ui->spinBoxR->setValue(m_r);//同步更新设置spinBox数值微调框setColor();
}void MainWindow::on_horizontalSliderG_valueChanged(int value)
{m_g = value;ui->spinBoxG->setValue(m_g);//同步更新设置spinBox数值微调框setColor();
}void MainWindow::on_horizontalSliderB_valueChanged(int value)
{m_b = value;ui->spinBoxB->setValue(m_b);//同步更新设置spinBox数值微调框setColor();
}void MainWindow::on_btnEditColor_clicked()//编辑颜色按钮
{QColor color =  QColorDialog::getColor(Qt::white, this, "请选择颜色");//打开颜色对话框ui->horizontalSliderR->setValue(color.red());//设置红色滑动条的值ui->horizontalSliderG->setValue(color.green());//设置绿色滑动条的值ui->horizontalSliderB->setValue(color.blue());//设置蓝色滑动条的值
}void MainWindow::on_spinBoxR_valueChanged(int value)//数值微调控件的值发生变化时执行
{ui->horizontalSliderR->setValue(value);//同步更新滑动条的值,这里不用调用setColor(),滑动条的值改变了就会调用,并设置m_r,m_g,m_b
}void MainWindow::on_spinBoxG_valueChanged(int value)
{ui->horizontalSliderG->setValue(value);//同步更新滑动条的值,这里不用调用setColor,滑动条的值改变了就会调用
}void MainWindow::on_spinBoxB_valueChanged(int value)
{ui->horizontalSliderB->setValue(value);//同步更新滑动条的值,这里不用调用setColor,滑动条的值改变了就会调用
}void MainWindow::PickupColor(int x, int y)//获取鼠标位置的1个像素 x和y是鼠标的位置
{QRgb rgb = MainWindow::st_this->m_pixmap.toImage().pixel(x, y);//获取Pixmap指定位置的像素的rgb数据,这个Pixmap只有一个像素,其实获取的就是鼠标位置的像素//设置label的颜色QString style = QString("background-color: rgb(%1, %2, %3);").arg(qRed(rgb)).arg(qGreen(rgb)).arg(qBlue(rgb));MainWindow::st_this->ui->labelColor->setStyleSheet(style);if(!MainWindow::st_this->m_isPicColor)//取色结束才调整控件,不然可能导致鼠标卡顿{MainWindow::st_this->on_horizontalSliderR_valueChanged( qRed(rgb) );MainWindow::st_this->on_horizontalSliderG_valueChanged( qGreen(rgb) );MainWindow::st_this->on_horizontalSliderB_valueChanged( qBlue(rgb) );}}//实现在窗口之外也能捕获鼠标
HHOOK mouseHook = NULL;//鼠标钩子
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{if(nCode == HC_ACTION) //当nCode等于HC_ACTION时,lParam参数是指向EVENTMSG结构的指针,该结构包含有关从系统队列中删除的消息的信息{MSLLHOOKSTRUCT *mouse = (MSLLHOOKSTRUCT *) lParam;//鼠标相关信息//相关类型在winuser.hif(wParam == WM_MOUSEMOVE)//鼠标移动{MainWindow::PickupColor(mouse->pt.x, mouse->pt.y);//移动显示当前取到的颜色//return false;//返回false,继续分发事件。返回真,即屏蔽掉这些事件,鼠标操作受到限制}//鼠标右键按下 或 鼠标左键按下 取色完成else if(wParam == WM_RBUTTONDOWN || wParam == WM_LBUTTONDOWN){//卸载鼠标钩子UnhookWindowsHookEx(mouseHook);MainWindow::st_this->m_isPicColor = false;//取色结束MainWindow::PickupColor(mouse->pt.x, mouse->pt.y);//设置最后取色,包括滑动条控件的值}}return CallNextHookEx(mouseHook,nCode,wParam,lParam);//否则,如果返回给下一个钩子子程处理
}void MainWindow::on_btnPickupColor_clicked()//拾取颜色(屏幕取色)
{if(!m_isPicColor)//准备捕获全局鼠标动作,开启屏幕取色{//注册鼠标钩子mouseHook = SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);}m_isPicColor = true;//进行屏幕取色//截取全屏图像QScreen *screen = QGuiApplication::primaryScreen();m_pixmap = screen->grabWindow(0);//0代表桌面qDebug()<<"开启屏幕取色";
}

四、总结

4.1 设置应用图标

4.1.1  准备.ico文件, 并添加到资源文件。

4.1.2  在.pro文件添加:RC_ICONS += img/palette.ico     (注意实际的路径)

4.1.3 设置图标

方式1:代码方式设置:

this->setWindowIcon(QIcon(":/images/img/palette.ico"));//设置可执行程序图标

方式2:在属性栏中直接设置

4.2 监测全局鼠标事件(HOOK方式)

//实现在窗口之外也能捕获鼠标         头文件Windows.h
HHOOK mouseHook = NULL;//鼠标钩子
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{if(nCode == HC_ACTION) //当nCode等于HC_ACTION时,lParam参数是指向EVENTMSG结构的指针,该结构包含有关从系统队列中删除的消息的信息{MSLLHOOKSTRUCT *mouse = (MSLLHOOKSTRUCT *) lParam;//鼠标相关信息//相关类型在winuser.hif(wParam == WM_MOUSEMOVE)//鼠标移动{MainWindow::PickupColor(mouse->pt.x, mouse->pt.y);//移动显示当前取到的颜色//return false;//返回false,继续分发事件。返回真,即屏蔽掉这些事件,鼠标操作受到限制}//鼠标右键按下 或 鼠标左键按下 取色完成else if(wParam == WM_RBUTTONDOWN || wParam == WM_LBUTTONDOWN){//卸载鼠标钩子UnhookWindowsHookEx(mouseHook);MainWindow::st_this->m_isPicColor = false;//取色结束MainWindow::PickupColor(mouse->pt.x, mouse->pt.y);//设置最后取色,包括滑动条控件的值}}return CallNextHookEx(mouseHook,nCode,wParam,lParam);//否则,如果返回给下一个钩子子程处理
}

4.3 实现取色器:取鼠标位置的像素信息

取鼠标位置的像素信息==》取全屏图片的指定位置像素的rgb信息 (鼠标的位置==》指定的位置)

QRgb rgb = m_pixmap.toImage().pixel(x, y);//获取Pixmap指定位置的像素的rgb数据,这个Pixmap只有一个像素,其实获取的就是鼠标位置的像素

截全屏幕的图片

QScreen *screen = QGuiApplication::primaryScreen();
m_pixmap = screen->grabWindow(0);//0代表桌面

QT 进度条、滑动条、调色板、取色器相关推荐

  1. QSlider 拖动滑动条使用valueChanged(int value)信号重复调用槽函数问题解决

    使用三个槽,防止滑动的时候重复调用,只有滑动停止才会去改变这个值 //mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDi ...

  2. Python Qt GUI设计:QSlider滑动条类(基础篇—16)

    QSlider控件提供了一个垂直或水平的滑动条,滑动条是一个用于控制有界值的典型控件,它允许用户沿水平或垂直方向在某一范围内移动滑块,并将滑块所在的位置转换成一个合法范围内的整数值. 有时候这种方式比 ...

  3. Qt QSS之QSlider滑动条美化

    首先什么是qss呢?QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量copy了CSS的功能,只不过QSS的可以看作是CSS简化版,要弱很 ...

  4. FFmpeg开发(九)——Qt视频播放器之快进滑动条(参考了暴风影音、迅雷影音)

    FFmpeg开发(九)--Qt视频播放器之快进滑动条(参考了暴风影音.迅雷影音) 上一篇介绍了使用多线程 FFmpeg开发(八)--Qt视频播放器之多线程的使用(参考了暴风影音.迅雷影音) 本播放器系 ...

  5. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  6. QT+OpenCV综合示例:图像混合(滑动条)

    QT+OpenCV综合示例:图像混合(滑动条) 1.代码: 2.运行结果: 0)Widget_op.ui (界面文件)设计: 1.代码: 1)opencv_imwrite_Q.pro 添加: INCL ...

  7. IOS 开发 UIProgress 和 UISlidre 进度条和滑动条组件

    进度条和滑动条组件非常常见,在ios中进度条组件是无法响应事件的.滑动条可响应事件.但是这两个组件均不可设置高度,可设置x,y,width 进度条属性 名称 类型 说明 默认值 progressVie ...

  8. qt 进度条最小_QT:圆形进度条设计

    QT版本:win32 QT Creator5.9.9 在QT中只有横条状的进度条,目前需要使用圆形状进度条显示进度,只能自己设计一个,可以显示圆弧.圆圈和中心文本. 设计思路: ①设计一个QWidge ...

  9. SeekBar进度条滑动调节屏幕亮度

    1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...

最新文章

  1. 全球最小人工心脏在华中科大完成植入:58岁患者术后精神状态良好
  2. Spring boot 入门篇
  3. C/C++中的##用法
  4. Android下集成Paypal支付
  5. opencv 通过网络连接工业相机_Raspberry Pi上的OpenVINO,OpenCV和Movidius NCS
  6. js进阶 12-5 jquery中表单事件如何使用
  7. 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景
  8. Evaluating Student Writing
  9. 【渝粤题库】陕西师范大学200111中学语文教学法 作业(专升本)
  10. [FineReport]高级条件分组、斜线、自动查询、控件编辑属性、条件属性
  11. minio搭建图床 配合typora实现写博客图片自动上传
  12. php去掉工作日,2014年工作日计算(去除法定假日和周六日,但包括调休日)
  13. 斗罗大陆壁纸图片高清小舞146集八段摔杨无敌
  14. 需求:定义老师和学生类,然后写代码测试;最后找到老师类和学生类当中的共性内容,抽出一个父类,用继承的方式改写代码,并进行测试
  15. 基于参考辐射源/定标的校正算法
  16. windows远程android传输文件,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)-Go语言中文社区...
  17. ARM嵌入式linux培训班视频 全集
  18. ROS麦克纳姆轮底盘制作(上)
  19. 攻防世界 sql注入
  20. EfficientDeRain

热门文章

  1. 大数据测试之ETL测试
  2. 【FTK Imager篇】FTK Imager中文设置教程
  3. 定义一个名为Circle的类,其中含有double型的成员变量centerX 和centerY表示圆心坐标,radius表示圆的半径。
  4. 博客网页bootstra
  5. 示波器的三种触发模式详解
  6. 为了更有效率地偷钱,Android root木马开始试水短信扣费诈骗
  7. elastic:Another Kibana instance appears to be migrating the index
  8. S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN
  9. cube函数matlab_冈萨雷斯图像处理Matlab函数汇总
  10. 数据结构第二版(朱昌杰版)习题2答案