QT 进度条、滑动条、调色板、取色器
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 进度条、滑动条、调色板、取色器相关推荐
- QSlider 拖动滑动条使用valueChanged(int value)信号重复调用槽函数问题解决
使用三个槽,防止滑动的时候重复调用,只有滑动停止才会去改变这个值 //mydialog.h #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDi ...
- Python Qt GUI设计:QSlider滑动条类(基础篇—16)
QSlider控件提供了一个垂直或水平的滑动条,滑动条是一个用于控制有界值的典型控件,它允许用户沿水平或垂直方向在某一范围内移动滑块,并将滑块所在的位置转换成一个合法范围内的整数值. 有时候这种方式比 ...
- Qt QSS之QSlider滑动条美化
首先什么是qss呢?QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量copy了CSS的功能,只不过QSS的可以看作是CSS简化版,要弱很 ...
- FFmpeg开发(九)——Qt视频播放器之快进滑动条(参考了暴风影音、迅雷影音)
FFmpeg开发(九)--Qt视频播放器之快进滑动条(参考了暴风影音.迅雷影音) 上一篇介绍了使用多线程 FFmpeg开发(八)--Qt视频播放器之多线程的使用(参考了暴风影音.迅雷影音) 本播放器系 ...
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- QT+OpenCV综合示例:图像混合(滑动条)
QT+OpenCV综合示例:图像混合(滑动条) 1.代码: 2.运行结果: 0)Widget_op.ui (界面文件)设计: 1.代码: 1)opencv_imwrite_Q.pro 添加: INCL ...
- IOS 开发 UIProgress 和 UISlidre 进度条和滑动条组件
进度条和滑动条组件非常常见,在ios中进度条组件是无法响应事件的.滑动条可响应事件.但是这两个组件均不可设置高度,可设置x,y,width 进度条属性 名称 类型 说明 默认值 progressVie ...
- qt 进度条最小_QT:圆形进度条设计
QT版本:win32 QT Creator5.9.9 在QT中只有横条状的进度条,目前需要使用圆形状进度条显示进度,只能自己设计一个,可以显示圆弧.圆圈和中心文本. 设计思路: ①设计一个QWidge ...
- SeekBar进度条滑动调节屏幕亮度
1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...
最新文章
- 全球最小人工心脏在华中科大完成植入:58岁患者术后精神状态良好
- Spring boot 入门篇
- C/C++中的##用法
- Android下集成Paypal支付
- opencv 通过网络连接工业相机_Raspberry Pi上的OpenVINO,OpenCV和Movidius NCS
- js进阶 12-5 jquery中表单事件如何使用
- 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景
- Evaluating Student Writing
- 【渝粤题库】陕西师范大学200111中学语文教学法 作业(专升本)
- [FineReport]高级条件分组、斜线、自动查询、控件编辑属性、条件属性
- minio搭建图床 配合typora实现写博客图片自动上传
- php去掉工作日,2014年工作日计算(去除法定假日和周六日,但包括调休日)
- 斗罗大陆壁纸图片高清小舞146集八段摔杨无敌
- 需求:定义老师和学生类,然后写代码测试;最后找到老师类和学生类当中的共性内容,抽出一个父类,用继承的方式改写代码,并进行测试
- 基于参考辐射源/定标的校正算法
- windows远程android传输文件,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)-Go语言中文社区...
- ARM嵌入式linux培训班视频 全集
- ROS麦克纳姆轮底盘制作(上)
- 攻防世界 sql注入
- EfficientDeRain
热门文章
- 大数据测试之ETL测试
- 【FTK Imager篇】FTK Imager中文设置教程
- 定义一个名为Circle的类,其中含有double型的成员变量centerX 和centerY表示圆心坐标,radius表示圆的半径。
- 博客网页bootstra
- 示波器的三种触发模式详解
- 为了更有效率地偷钱,Android root木马开始试水短信扣费诈骗
- elastic:Another Kibana instance appears to be migrating the index
- S7-1200程序博图V15伺服轴控制西门子V90PN S7 -1200程序博图V15伺服轴控制西门子V90PN
- cube函数matlab_冈萨雷斯图像处理Matlab函数汇总
- 数据结构第二版(朱昌杰版)习题2答案