qtbrusheditor.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 435 行
CPP
435 行
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************//*TRANSLATOR qdesigner_internal::QtBrushEditor*/#include "qtbrusheditor.h"#include "qtbrushpatterndialog.h"#include "qtgradientdialog.h"#include "ui_qtbrusheditor.h"#include "abstractbrushmanager.h"#include <qitemdelegate.h>#include <qlineedit.h>#include <qvalidator.h>#include <QContextMenuEvent>#include <QMenu>using namespace qdesigner_internal;namespace qdesigner_internal {class QtBrushEditorPrivate{ QtBrushEditor *q_ptr; Q_DECLARE_PUBLIC(QtBrushEditor)public: void slotPatternChooserClicked(); void slotTextureChooserClicked(); void slotGradientChooserClicked(); void slotChooserClicked(); void slotApplyClicked(); void slotAddToCustomClicked(); void slotRemoveClicked(); void slotItemActivated(QListWidgetItem *item); void slotCurrentItemChanged(QListWidgetItem *item); void slotItemRenamed(QListWidgetItem *item); void slotBrushAdded(const QString &name, const QBrush &brush); void slotBrushRemoved(const QString &name); void slotCurrentBrushChanged(const QString &name, const QBrush &brush); QBrush m_brush; QDesignerBrushManagerInterface *m_brushManager; QMap<QString, QListWidgetItem *> m_brushToItem; QMap<QListWidgetItem *, QString> m_itemToBrush; Ui::QtBrushEditor m_ui;};}void QtBrushEditorPrivate::slotTextureChooserClicked(){ QBrush br; if (m_brush.style() == Qt::TexturePattern) br = m_brush; emit q_ptr->textureChooserActivated(m_ui.textureToolButton, br);}void QtBrushEditorPrivate::slotPatternChooserClicked(){ QBrush br; if (m_brush.style() != Qt::LinearGradientPattern && m_brush.style() != Qt::RadialGradientPattern && m_brush.style() != Qt::ConicalGradientPattern && m_brush.style() != Qt::TexturePattern) { br = m_brush; } else { br = QBrush(QColor::fromRgb(162, 197, 17)); } QtBrushPatternDialog dlg(m_ui.patternToolButton); dlg.setBrush(br); if (dlg.exec() == QDialog::Accepted) { q_ptr->setBrush(dlg.brush()); }}void QtBrushEditorPrivate::slotGradientChooserClicked(){ QtGradientDialog dlg(m_ui.gradientToolButton); const QGradient *gradient = m_ui.brushWidget->brush().gradient(); if (gradient) dlg.setGradient(*gradient); else { QLinearGradient gr(0, 0, 1, 0); gr.setColorAt(0, Qt::red); gr.setColorAt(1.0 / 6, Qt::yellow); gr.setColorAt(2.0 / 6, Qt::green); gr.setColorAt(3.0 / 6, Qt::cyan); gr.setColorAt(4.0 / 6, Qt::blue); gr.setColorAt(5.0 / 6, Qt::magenta); gr.setColorAt(1, Qt::red); dlg.setGradient(gr); } if (dlg.exec() == QDialog::Accepted) { QBrush brush(dlg.gradient()); q_ptr->setBrush(brush); }}void QtBrushEditorPrivate::slotChooserClicked(){ if (m_brush.style() == Qt::LinearGradientPattern || m_brush.style() == Qt::RadialGradientPattern || m_brush.style() == Qt::ConicalGradientPattern) { m_ui.gradientToolButton->animateClick(); } else if (m_brush.style() == Qt::TexturePattern) { m_ui.textureToolButton->animateClick(); } else { m_ui.patternToolButton->animateClick(); }}void QtBrushEditorPrivate::slotApplyClicked(){ QString name = m_brushManager->currentBrush(); if (name.isNull()) return; QBrush brush = m_brushManager->brush(name); q_ptr->setBrush(brush);}void QtBrushEditorPrivate::slotAddToCustomClicked(){ QString name = m_brushManager->addBrush(QApplication::translate("qdesigner_internal::QtBrushEditor", "New Brush", 0, QApplication::UnicodeUTF8), m_brush); m_brushManager->setCurrentBrush(name); if (m_brushToItem.contains(name)) m_ui.listWidget->editItem(m_brushToItem[name]);}void QtBrushEditorPrivate::slotRemoveClicked(){ QString name = m_brushManager->currentBrush(); if (name.isNull()) return; QString newCurrent; QMap<QString, QBrush> brushes = m_brushManager->brushes(); QMap<QString, QBrush>::ConstIterator it = brushes.constFind(name); if (it == brushes.constEnd()) return; // not possible QMap<QString, QBrush>::ConstIterator itCurrent = it; it++; if (it == brushes.constEnd()) { if (itCurrent != brushes.constBegin()) newCurrent = (--itCurrent).key(); } else { newCurrent = it.key(); } m_brushManager->removeBrush(name); m_brushManager->setCurrentBrush(newCurrent);}void QtBrushEditorPrivate::slotItemActivated(QListWidgetItem *item){ if (!m_itemToBrush.contains(item)) return; QString name = m_itemToBrush[item]; QBrush brush = m_brushManager->brush(name); q_ptr->setBrush(brush);}void QtBrushEditorPrivate::slotCurrentItemChanged(QListWidgetItem *item){ QString newCurrent; if (item) { if (!m_itemToBrush.contains(item)) return; newCurrent = m_itemToBrush[item]; } m_brushManager->setCurrentBrush(newCurrent);}void QtBrushEditorPrivate::slotItemRenamed(QListWidgetItem *item){ if (!m_itemToBrush.contains(item)) return; QString oldName = m_itemToBrush[item]; QString newName = item->text(); if (newName == oldName) return; QBrush brush = m_brushManager->brush(oldName); m_brushManager->removeBrush(oldName); QString name = m_brushManager->addBrush(newName, brush); m_brushManager->setCurrentBrush(name);}void QtBrushEditorPrivate::slotBrushAdded(const QString &name, const QBrush &brush){ QListWidgetItem *item = new QListWidgetItem(m_brushManager->brushPixmap(brush), name, m_ui.listWidget); item->setSizeHint(QSize(72, 84)); item->setFlags(item->flags() | Qt::ItemIsEditable); m_itemToBrush[item] = name; m_brushToItem[name] = item; m_ui.listWidget->sortItems();}void QtBrushEditorPrivate::slotBrushRemoved(const QString &name){ if (!m_brushToItem.contains(name)) return; QListWidgetItem *item = m_brushToItem[name]; delete item; m_brushToItem.remove(name); m_itemToBrush.remove(item);}void QtBrushEditorPrivate::slotCurrentBrushChanged(const QString &name, const QBrush &brush){ Q_UNUSED(brush) if (name.isNull()) { m_ui.listWidget->clearSelection(); m_ui.applyButton->setEnabled(false); m_ui.removeButton->setEnabled(false); } if (!m_brushToItem.contains(name)) return; QListWidgetItem *item = m_brushToItem[name]; m_ui.listWidget->setCurrentItem(item); m_ui.applyButton->setEnabled(true); m_ui.removeButton->setEnabled(true);}class QtBrushDelegate : public QItemDelegate{public: QtBrushDelegate(QObject *parent = 0) : QItemDelegate(parent) {} virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;};QWidget *QtBrushDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{ Q_UNUSED(option) Q_UNUSED(index) QLineEdit *le = new QLineEdit(parent); le->setFrame(false); QRegExpValidator *validator = new QRegExpValidator(QRegExp(QLatin1String("([A-Za-z_])([A-Za-z_ 0-9]*)")), le); le->setValidator(validator); return le;}QtBrushEditor::QtBrushEditor(QWidget *parent) : QWidget(parent){ d_ptr = new QtBrushEditorPrivate(); d_ptr->q_ptr = this; d_ptr->m_ui.setupUi(this); d_ptr->m_brushManager = 0; connect(d_ptr->m_ui.patternToolButton, SIGNAL(clicked()), this, SLOT(slotPatternChooserClicked())); connect(d_ptr->m_ui.textureToolButton, SIGNAL(clicked()), this, SLOT(slotTextureChooserClicked())); connect(d_ptr->m_ui.gradientToolButton, SIGNAL(clicked()), this, SLOT(slotGradientChooserClicked())); connect(d_ptr->m_ui.editToolButton, SIGNAL(clicked()), this, SLOT(slotChooserClicked())); d_ptr->m_ui.listWidget->setViewMode(QListView::IconMode); d_ptr->m_ui.listWidget->setMovement(QListView::Static); d_ptr->m_ui.listWidget->setTextElideMode(Qt::ElideRight); d_ptr->m_ui.listWidget->setResizeMode(QListWidget::Adjust); //d_ptr->m_ui.listWidget->setSpacing(2); d_ptr->m_ui.listWidget->setIconSize(QSize(64, 64)); d_ptr->m_ui.listWidget->setItemDelegate(new QtBrushDelegate(this)); d_ptr->m_ui.listWidget->setEditTriggers(QAbstractItemView::EditKeyPressed); connect(d_ptr->m_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotItemActivated(QListWidgetItem *))); connect(d_ptr->m_ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *))); connect(d_ptr->m_ui.listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(slotItemRenamed(QListWidgetItem *))); d_ptr->m_ui.applyButton->setEnabled(false); d_ptr->m_ui.addToCustomButton->setEnabled(false); d_ptr->m_ui.removeButton->setEnabled(false); connect(d_ptr->m_ui.applyButton, SIGNAL(clicked()), this, SLOT(slotApplyClicked())); connect(d_ptr->m_ui.addToCustomButton, SIGNAL(clicked()), this, SLOT(slotAddToCustomClicked())); connect(d_ptr->m_ui.removeButton, SIGNAL(clicked()), this, SLOT(slotRemoveClicked())); d_ptr->m_ui.applyButton->setIcon(QIcon(QLatin1String(":/qtgradienteditor/images/up.png"))); d_ptr->m_ui.addToCustomButton->setIcon(QIcon(QLatin1String(":/qtgradienteditor/images/down.png"))); d_ptr->m_ui.removeButton->setIcon(QIcon(QLatin1String(":/qtgradienteditor/images/editdelete.png")));}QtBrushEditor::~QtBrushEditor(){ delete d_ptr;}void QtBrushEditor::setBrush(const QBrush &brush){ if (d_ptr->m_brush == brush) return; d_ptr->m_brush = brush; d_ptr->m_ui.brushWidget->setBrush(brush); QString currentType; if (d_ptr->m_brush.style() == Qt::LinearGradientPattern || d_ptr->m_brush.style() == Qt::RadialGradientPattern || d_ptr->m_brush.style() == Qt::ConicalGradientPattern) { currentType = tr("Gradient"); } else if (d_ptr->m_brush.style() == Qt::TexturePattern) { currentType = tr("Texture"); } else { currentType = tr("Color Pattern"); }// QString preview = tr("%1 Preview").arg(currentType);// d_ptr->m_ui.previewBox->setTitle(preview);}QBrush QtBrushEditor::brush() const{ return d_ptr->m_brush;}void QtBrushEditor::setBrushManager(QDesignerBrushManagerInterface *manager){ if (d_ptr->m_brushManager == manager) return; if (d_ptr->m_brushManager) { disconnect(d_ptr->m_brushManager, SIGNAL(brushAdded(const QString &, const QBrush &)), this, SLOT(slotBrushAdded(const QString &, const QBrush &))); disconnect(d_ptr->m_brushManager, SIGNAL(brushRemoved(const QString &)), this, SLOT(slotBrushRemoved(const QString &))); disconnect(d_ptr->m_brushManager, SIGNAL(currentBrushChanged(const QString &, const QBrush &)), this, SLOT(slotCurrentBrushChanged(const QString &, const QBrush &))); } d_ptr->m_ui.listWidget->clear(); d_ptr->m_itemToBrush.clear(); d_ptr->m_brushToItem.clear(); d_ptr->m_brushManager = manager; d_ptr->m_ui.applyButton->setEnabled(false); d_ptr->m_ui.removeButton->setEnabled(false); if (!d_ptr->m_brushManager) { d_ptr->m_ui.addToCustomButton->setEnabled(false); return; } d_ptr->m_ui.addToCustomButton->setEnabled(true); QMap<QString, QBrush> brushes = d_ptr->m_brushManager->brushes(); QMap<QString, QBrush>::ConstIterator it = brushes.constBegin(); while (it != brushes.constEnd()) { d_ptr->slotBrushAdded(it.key(), it.value()); it++; } QString current = d_ptr->m_brushManager->currentBrush(); d_ptr->slotCurrentBrushChanged(current, d_ptr->m_brushManager->brush(current)); connect(d_ptr->m_brushManager, SIGNAL(brushAdded(const QString &, const QBrush &)), this, SLOT(slotBrushAdded(const QString &, const QBrush &))); connect(d_ptr->m_brushManager, SIGNAL(brushRemoved(const QString &)), this, SLOT(slotBrushRemoved(const QString &))); connect(d_ptr->m_brushManager, SIGNAL(currentBrushChanged(const QString &, const QBrush &)), this, SLOT(slotCurrentBrushChanged(const QString &, const QBrush &)));}void QtBrushEditor::contextMenuEvent(QContextMenuEvent *e){ QPoint p = d_ptr->m_ui.listWidget->mapFromGlobal(e->globalPos()); if (!d_ptr->m_ui.listWidget->rect().contains(p)) return; QListWidgetItem *item = d_ptr->m_ui.listWidget->itemAt(p); if (!item) return; QMenu menu(d_ptr->m_ui.listWidget); QAction *renameAction = new QAction(tr("Rename\tF2"), &menu); menu.addAction(renameAction); if (menu.exec(e->globalPos(), renameAction) == renameAction) d_ptr->m_ui.listWidget->editItem(item);}#include "moc_qtbrusheditor.cpp"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?