实现TOOLBAR中颜色对话框的添加
2016-07-13 16:27
579 查看
如图所示:
取自QT本来的一个例子添加:
下面是代码:
void MainWindow::createToolbars()
{
//! [25]
editToolBar = addToolBar(tr("Edit"));
editToolBar->addAction(deleteAction);
editToolBar->addAction(toFrontAction);
editToolBar->addAction(sendBackAction);
//editToolBar->addAction(itemColorAction);
editToolBar->addWidget(m_colorButton_test);
PopupColorButton* m_colorButton_test;
取自QT本来的一个例子添加:
下面是代码:
void MainWindow::createToolbars()
{
//! [25]
editToolBar = addToolBar(tr("Edit"));
editToolBar->addAction(deleteAction);
editToolBar->addAction(toFrontAction);
editToolBar->addAction(sendBackAction);
//editToolBar->addAction(itemColorAction);
editToolBar->addWidget(m_colorButton_test);
<pre name="code" class="cpp">m_colorButton_test = new PopupColorButton(); itemColorAction_test = new QAction(QIcon(":/images/itemColor.png"), tr("&ItemColor"),this); itemColorAction_test->setShortcut(tr("ItemColor")); itemColorAction_test->setStatusTip(tr("Item Color set")); m_colorButton_test->setDefaultAction(itemColorAction_test); connect(m_colorButton_test, SIGNAL(colorChanged(const QColor&)), this, SLOT(textColor_test(const QColor&))); connect(itemColorAction_test, SIGNAL(triggered()), this, SLOT(itemColorChanged_test()));
<pre name="code" class="cpp">void MainWindow::textColor_test(const QColor& col) { if (!col.isValid()) return; scene->setItemColor(col); }
void MainWindow::itemColorChanged_test() { fillAction = qobject_cast<QAction *>(sender()); fillColorToolButton->setIcon(createColorToolButtonIcon( ":/images/floodfill.png", qvariant_cast<QColor>(fillAction->data()))); fillButtonTriggered(); }QAction *itemColorAction_test;
PopupColorButton* m_colorButton_test;
<pre name="code" class="cpp">colorToolBtn.h #ifndef QTN_POPUPCOLORBUTTON_H #define QTN_POPUPCOLORBUTTON_H #include <QToolButton> #include <QStylePainter> #include <QStyleOptionToolButton> #include <QMouseEvent> #include <QColorDialog> class QStyleOption; class PopupColorButton : public QToolButton { Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor) public: PopupColorButton(QWidget* parent = 0); virtual ~PopupColorButton(); public: const QColor& color() const; void setColor(const QColor& color); public: virtual QSize sizeHint() const; Q_SIGNALS: void colorChanged(const QColor& color); protected: virtual void paintEvent (QPaintEvent* event); virtual void mousePressEvent(QMouseEvent* event); protected: QColor m_color; }; #endif // QTN_POPUPCOLORBUTTON_H
colorToolBtn.cpp: #include "colorToolBtn.h" PopupColorButton::PopupColorButton(QWidget* parent) : QToolButton(parent) { setPopupMode(MenuButtonPopup); m_color = Qt::color0; } /*! \brief Destructor of PopupColorButton. */ PopupColorButton::~PopupColorButton() { } /*! \brief Returns the current selected color. */ const QColor& PopupColorButton::color() const { return m_color; } /*! \brief Sets the specified \a color and select specified color button. */ void PopupColorButton::setColor(const QColor& color) { if (color != m_color) { m_color = color; update(); } } /*! \reimp */ QSize PopupColorButton::sizeHint() const { return QToolButton::sizeHint(); } /*! \reimp */ void PopupColorButton::paintEvent(QPaintEvent* painter) { QToolButton::paintEvent(painter); QStylePainter p(this); QStyleOptionToolButton opt; initStyleOption(&opt); if (opt.icon.isNull()) return; if (!m_color.isValid()) return; QRect rect(opt.rect); QSize sizeIcon = opt.iconSize; int widthIndicator = style()->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt, this); rect.setHeight(sizeIcon.height()/5); rect.adjust(2, 0, -(widthIndicator+4), 0); rect.translate(0, opt.rect.bottom()-(rect.height()+2)); p.fillRect(rect, m_color); } /*! \reimp */ void PopupColorButton::mousePressEvent(QMouseEvent* e) { QStyleOptionToolButton opt; initStyleOption(&opt); if (e->button() == Qt::LeftButton && (popupMode() == MenuButtonPopup)) { QRect popupr = style()->subControlRect(QStyle::CC_ToolButton, &opt, QStyle::SC_ToolButtonMenu, this); if (popupr.isValid() && popupr.contains(e->pos())) { QColor col = QColorDialog::getColor(m_color, this); if (!col.isValid()) return; if (col != m_color) { m_color = col; update(); emit colorChanged(m_color); } return; } } QToolButton::mousePressEvent(e); }
相关文章推荐
- (第13讲)哈希表的开放地址法中的线性探测
- Same-origin security policy
- 【iOS】网络操作与AFNetworking
- nginx如何设置自定义404页面
- UVa 10106 Product
- 自我介绍和决心书
- C# 委托、事件
- oracle日期函数2!
- 将博客搬至CSDN
- the service threw an unknown exception in SCOM 2012
- CocoaPods安装
- 部署FIM 2010 R2—1先决条件准备
- 部署FIM 2010 R2—2服务账号和其他准备
- 部署FIM 2010 R2—3安装FIM 2010 R2 Service and Portal
- 部署FIM 2010 R2—4安装FIM 2010 R2 Synchronization Service
- PowerPC的字节序问题
- 部署FIM 2010 R2—5配置Synchronization Service
- 部署FIM 2010 R2——6安装和配置PCNS
- Docker在Ubuntu的部署实践
- 部署FIM 2010 R2——7验证不同林之间相同用户名密码同步