QT中颜色选择器QColorDialog的重新实现
来源:互联网 发布:易语言聊天室源码 编辑:程序博客网 时间:2024/06/05 02:45
重新实现的颜色选择器如下图所示:
颜色的渐变都是通过拉渐变或者是直接在paintevent中画出来的,根据hsv和rgb两种颜色类型之间的转化来实现。
重载QSlider来实现颜色条花了不少时间,经过别人指点后才恍然大悟,主要还是对这些类的用法和类的实现原理不熟悉造成的,下来得好好的熟悉下。
重载QSlider实现颜色滚动条的代码如下:
QPainter painter(this); if(this->orientation() == Qt::Horizontal) { const int offset = 5; QRect rect = this->rect(); rect.setHeight(rect.height() - 5); QRect sliderRect = rect.adjusted(offset,0,-offset,-rect.height()/2); painter.setPen(QPen(Qt::black, 0.5)); painter.setBrush(back); painter.drawRect(sliderRect); painter.setBrush(gradient()); painter.drawRect(sliderRect); const double k = (double)(value() - minimum()) / (maximum()-minimum()); int x = (int)((rect.width()-2*offset) * k) + offset; QPoint tickPts[] = { QPoint(x,sliderRect.bottom()+1), QPoint(x-offset,rect.bottom()-1), QPoint(x+offset,rect.bottom()-1), }; painter.setBrush(Qt::white); painter.drawPolygon(tickPts,3); return; } this->setFixedWidth(25); const int offset = 5; QRect rect = this->rect(); QRect sliderRect = QRect(rect.left()+offset, rect.top()+offset, rect.right()-2*offset,rect.bottom()-2*offset); const double k = (double)(value() - minimum()) / (maximum()-minimum()); int y = (int)((rect.height()-2*offset) * (1-k)) + offset; QPoint tickTop[] = { QPoint(sliderRect.left(), y), QPoint(rect.left(), y - offset), QPoint(rect.left(), y + offset) }; painter.setPen(QPen(Qt::black, 0.5)); painter.drawPolygon(tickTop, 3); painter.setBrush(back); painter.drawRect(sliderRect); painter.setBrush(gradient()); painter.drawRect(sliderRect); QPoint tickPts[] = { QPoint(sliderRect.right()+1, y), QPoint(rect.right(), y - offset), QPoint(rect.right(), y + offset) }; painter.setBrush(Qt::white); painter.drawPolygon(tickPts,3);
详细项目源码已经上传了,需要的可以去瞅瞅,版本QT5.3.
GitHub下载:点击打开链接
CSDN下载:点击打开链接
2 0
- QT中颜色选择器QColorDialog的重新实现
- JavaScript实现的颜色选择器
- android 数字选择器中文字颜色透明度渐变的实现
- QT笔记之QColorDialog
- [Qt练习]QColorDialog
- VC实现类似Windows的颜色选择器
- 【Android】ColorPickerDialog 自定义颜色选择器的实现
- 关于安卓颜色选择器的实现
- PyQt5:QColorDialog颜色对话框(20)
- Qt标准对话框之QColorDialog
- Qt标准对话框之QColorDialog
- Win8.1 App 在xaml中实现颜色选择器的功能
- qt实现重新登录
- QColorDialog
- Android的颜色选择器
- (9)QColorDialog--颜色选择对话框
- Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试
- Qt中进度条的颜色设置
- 本科教育忽略的黄金C++<2> 顺序容器
- MySQL基本操作(六):建表,插入多条记录,更新表中特定数据
- 关于直接在Windows下编译java
- mysql之插入、更新、删除
- ios免签名开发
- QT中颜色选择器QColorDialog的重新实现
- 如何提高VS2010的性能,VS2010不再卡
- C/S和B/S以及三层结构
- 单点登录cas常见问题(三) - 单点登出时,子系统是否同步登出?
- 如何设置字体
- Java排序算法:快速排序
- oracle参数之DEFERRED_SEGMENT_CREATION
- mysql之索引
- CodeForces 600B 二分