Qt开源作品23-颜色拾取器
2023-09-11 14:18:39 时间
一、前言
在做很多项目的UI界面的时候,相信绝大部分人都有过抄袭别人的UI界面尤其是颜色的时候,毕竟十个程序员九个没有审美,或者说审美跟一坨屎一样,大家主要的精力以及擅长点都是在写功能实现具体功能上面,这个事情怎么说呢,这确实是程序员的主要职责,但是在大部分的小公司,UI也都是需要程序员自己去搞定的,自己想不出来怎么办,借鉴咯,不知道颜色值怎么办,用颜色拾取器点一下咯。
Qt内置的grabWindow方法,可以指定句柄获取对应的颜色,所以如果要对屏幕取得颜色值的话,传入整个屏幕的句柄即可,屏幕的句柄在Qt中的表示是QApplication::desktop()->winId(),要实时获取怎么办呢,当然最简单的办法就是开个定时器咯,定时器不断调用这个方法,获取屏幕鼠标坐标和颜色值。
二、代码思路
void ColorWidget::showColorValue()
{
if (!pressed) {
return;
}
int x = QCursor::pos().x();
int y = QCursor::pos().y();
txtPoint->setText(tr("x:%1 y:%2").arg(x).arg(y));
QString strDecimalValue, strHex, strTextColor;
int red, green, blue;
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);
#else
QScreen *screen = QApplication::primaryScreen();
QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);
#endif
if (!pixmap.isNull()) {
QImage image = pixmap.toImage();
if (!image.isNull()) {
if (image.valid(0, 0)) {
QColor color = image.pixel(0, 0);
red = color.red();
green = color.green();
blue = color.blue();
QString strRed = tr("%1").arg(red & 0xFF, 2, 16, QChar('0'));
QString strGreen = tr("%1").arg(green & 0xFF, 2, 16, QChar('0'));
QString strBlue = tr("%1").arg(blue & 0xFF, 2, 16, QChar('0'));
strDecimalValue = tr("%1, %2, %3").arg(red).arg(green).arg(blue);
strHex = tr("#%1%2%3").arg(strRed.toUpper()).arg(strGreen.toUpper()).arg(strBlue.toUpper());
}
}
}
if (red > 200 && green > 200 && blue > 200) {
strTextColor = "10, 10, 10";
} else {
strTextColor = "255, 255, 255";
}
QString str = tr("background-color: rgb(%1);color: rgb(%2)").arg(strDecimalValue).arg(strTextColor);
labColor->setStyleSheet(str);
txtRgb->setText(strDecimalValue);
txtWeb->setText(strHex);
}
三、效果图
四、开源主页
- 以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。
- 本开源项目已经成功升级到V2.0版本,分门别类,图文并茂,保你爽到爆。
- Qt开源武林秘籍开发经验,看完学完,20K起薪,没有找我!
相关文章
- 如何评价 Qt 的发展前景?
- qt创建多层目录_Qt多工程多目录的编译案例
- Qt中使用信号与槽进行类与类之间的通信(父窗口直接调用函数触发子窗口信号的情况)
- QT开发:QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection'...
- qt中sendEvent()、postEvent()用法
- 【QT】Qt 给已经开发好的程序快速封装成动态库
- 【QT】Qt Creator生成动态库(DLL)并调用
- 【QT】Qt creator连接MySQL数据库 - 增删改查
- 【QT】Qt使用QJson生成json文件并保存
- 【QT】Qt多版本交叉编译所遇到的问题以及如何解决(重在思路过程)
- 基于QT(C++)+Oracle实现的(界面)教务管理系统【100010664】
- QT基础——QML及其相关的qt模块
- Qt编写物联网管理平台40-类型种类
- 关于Qt数据库开发的一些冷知识
- Qt编写可视化大屏电子看板系统30-模块8物料管理
- Qt编写安防视频监控系统57-子模块1设备列表
- Qt开源作品35-秘钥生成器
- Qt开源作品31-屏幕截图控件
- Qt开源作品27-鼠标定位十字线
- Qt开源作品18-无边框背景透明窗体
- Qt开源作品14-导航按钮控件
- Qt开源作品3-串口调试助手
- Qt开源作品2-视频流播放vlc内核
- Qt编写地图综合应用12-路线查询
- Qt编写自定义控件29-颜色选取面板
- Qt编写数据可视化大屏界面电子看板11-自定义控件
- Qt编写网络调试助手(TCP客户端+TCP服务端+UDP服务端)终极版开源
- QT目录模型QDirModel的使用(一个model同时连接tree,list,table)
- Qt 使用msvc编译器出现乱码如何解决?字符串中存在空格?
- Qt之QRoundProgressBar(圆形进度条)
- Qt之自定义界面(窗体缩放-跨平台终极版)
- 报错 qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found
- Qt编程之QImage类小结
- 详解 QT 源码之 Qt 事件机制原理