QT控件大全 二十五 QColorWidgets
来源:互联网 发布:行书字帖 知乎 编辑:程序博客网 时间:2024/05/17 09:35
效果如图:
核心代码:
#ifndef COLOR_SELECTOR_HPP#define COLOR_SELECTOR_HPP#include "color_preview.hpp"#include "color_wheel.hpp"namespace color_widgets {/** * Color preview that opens a color dialog */class QCP_EXPORT ColorSelector : public ColorPreview{ Q_OBJECT Q_ENUMS(UpdateMode) Q_PROPERTY(UpdateMode updateMode READ updateMode WRITE setUpdateMode ) Q_PROPERTY(Qt::WindowModality dialogModality READ dialogModality WRITE setDialogModality ) Q_PROPERTY(ColorWheel::DisplayFlags wheelFlags READ wheelFlags WRITE setWheelFlags NOTIFY wheelFlagsChanged)public: enum UpdateMode { Confirm, ///< Update color only after the dialog has been accepted Continuous ///< Update color as it's being modified in the dialog }; explicit ColorSelector(QWidget *parent = 0); ~ColorSelector(); void setUpdateMode(UpdateMode m); UpdateMode updateMode() const; Qt::WindowModality dialogModality() const; void setDialogModality(Qt::WindowModality m); ColorWheel::DisplayFlags wheelFlags() const;Q_SIGNALS: void wheelFlagsChanged(ColorWheel::DisplayFlags flags);public Q_SLOTS: void showDialog(); void setWheelFlags(ColorWheel::DisplayFlags flags);private Q_SLOTS: void accept_dialog(); void reject_dialog(); void update_old_color(const QColor &c);protected: void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent * event);private: /// Connect/Disconnect colorChanged based on UpdateMode void connect_dialog(); /// Disconnect from dialog update void disconnect_dialog(); class Private; Private * const p; };} // namespace color_widgets#endif // COLOR_SELECTOR_HPP
#include "color_selector.hpp"#include "color_dialog.hpp"#include <QDropEvent>#include <QDragEnterEvent>#include <QMimeData>namespace color_widgets {class ColorSelector::Private{public: UpdateMode update_mode; ColorDialog *dialog; QColor old_color; Private(QWidget *widget) : dialog(new ColorDialog(widget)) { dialog->setButtonMode(ColorDialog::OkCancel); }};ColorSelector::ColorSelector(QWidget *parent) : ColorPreview(parent), p(new Private(this)){ setUpdateMode(Continuous); p->old_color = color(); connect(this,&ColorPreview::clicked,this,&ColorSelector::showDialog); connect(this,SIGNAL(colorChanged(QColor)),this,SLOT(update_old_color(QColor))); connect(p->dialog,&QDialog::rejected,this,&ColorSelector::reject_dialog); connect(p->dialog,&ColorDialog::colorSelected, this, &ColorSelector::accept_dialog); connect(p->dialog,&ColorDialog::wheelFlagsChanged, this, &ColorSelector::wheelFlagsChanged); setAcceptDrops(true);}ColorSelector::~ColorSelector(){ delete p;}ColorSelector::UpdateMode ColorSelector::updateMode() const{ return p->update_mode;}void ColorSelector::setUpdateMode(UpdateMode m){ p->update_mode = m;}Qt::WindowModality ColorSelector::dialogModality() const{ return p->dialog->windowModality();}void ColorSelector::setDialogModality(Qt::WindowModality m){ p->dialog->setWindowModality(m);}ColorWheel::DisplayFlags ColorSelector::wheelFlags() const{ return p->dialog->wheelFlags();}void ColorSelector::showDialog(){ p->old_color = color(); p->dialog->setColor(color()); connect_dialog(); p->dialog->show();}void ColorSelector::setWheelFlags(ColorWheel::DisplayFlags flags){ p->dialog->setWheelFlags(flags);}void ColorSelector::connect_dialog(){ if (p->update_mode == Continuous) connect(p->dialog, SIGNAL(colorChanged(QColor)), this, SLOT(setColor(QColor)), Qt::UniqueConnection); else disconnect_dialog();}void ColorSelector::disconnect_dialog(){ disconnect(p->dialog, SIGNAL(colorChanged(QColor)), this, SLOT(setColor(QColor)));}void ColorSelector::accept_dialog(){ setColor(p->dialog->color()); p->old_color = color();}void ColorSelector::reject_dialog(){ setColor(p->old_color);}void ColorSelector::update_old_color(const QColor &c){ if (!p->dialog->isVisible()) p->old_color = c;}void ColorSelector::dragEnterEvent(QDragEnterEvent *event){ if ( event->mimeData()->hasColor() || ( event->mimeData()->hasText() && QColor(event->mimeData()->text()).isValid() ) ) event->acceptProposedAction();}void ColorSelector::dropEvent(QDropEvent *event){ if ( event->mimeData()->hasColor() ) { setColor(event->mimeData()->colorData().value<QColor>()); event->accept(); } else if ( event->mimeData()->hasText() ) { QColor col(event->mimeData()->text()); if ( col.isValid() ) { setColor(col); event->accept(); } }}} // namespace color_widgets
阅读全文
0 0
- QT控件大全 二十五 QColorWidgets
- QT控件大全 十五 QPot
- QT控件大全 十五 QOpenChart
- QT控件大全二VirtualKeyboard
- QT控件大全 二十 QSlideplug
- QT控件大全 二十一 QPush
- QT控件大全 二十二 QMarkdownTextEdit
- QT控件大全 二十三 QSint
- QT控件大全 二十四 QButtonStyle
- QT控件大全 二十六 QRecentFilesMenu
- QT控件大全 二十七 QSpellCheck
- QT控件大全 二十八 QMultiYearCalender
- QT控件大全 二十九 QPlusExtension
- iOS入门(二十五)基础控件
- Qt编写自定义控件大全
- QT控件大全一AnalogWidgets
- QT控件大全三QLed
- QT控件大全四QMeter
- 共享单车技术含量,一篇文章全说透了!
- 脑机接口技术如何具体实现?
- 丁肇中:人工智能不可能发现相对论,不可能发现量子力学,也不可能发现暗物质
- JavaScript的DOM属性
- 比AlphaGo Zero更强的AlphaZero来了!8小时解决一切棋类!
- QT控件大全 二十五 QColorWidgets
- YTU.3137: 动态规划基础题目之拦截导弹
- 工作中发现的超级好用的办公神器,秒秒钟提高效率
- IE6与CSS样式兼容问题汇总
- org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
- java环境报错(项目报红叉)Java compiler level does not match解决方法
- Android获取屏幕宽度的4种方法
- 配置wamp server3.0.6让局域网用户都可以访问你的服务器
- groovy代码动态加载运行实战