paletteeditor.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 638 行 · 第 1/2 页
CPP
638 行
break; case QPalette::Window: m_palette.setBrush(QPalette::Disabled, QPalette::Base, br); m_palette.setBrush(QPalette::Disabled, QPalette::Window, br); idxBegin = PaletteModel::index(QPalette::Base, 0); break; case QPalette::Highlight: //m_palette.setBrush(QPalette::Disabled, QPalette::Highlight, c.dark(120)); break; default: m_palette.setBrush(QPalette::Disabled, r, br); break; } } emit paletteChanged(m_palette); emit dataChanged(idxBegin, idxEnd); return true; } if (index.column() == 0 && role == Qt::EditRole) { uint mask = m_palette.resolve(); const bool isMask = qVariantValue<bool>(value); const int r = index.row(); if (isMask) mask |= (1 << r); else { m_palette.setBrush(QPalette::Active, static_cast<QPalette::ColorRole>(r), m_parentPalette.brush(QPalette::Active, static_cast<QPalette::ColorRole>(r))); m_palette.setBrush(QPalette::Inactive, static_cast<QPalette::ColorRole>(r), m_parentPalette.brush(QPalette::Inactive, static_cast<QPalette::ColorRole>(r))); m_palette.setBrush(QPalette::Disabled, static_cast<QPalette::ColorRole>(r), m_parentPalette.brush(QPalette::Disabled, static_cast<QPalette::ColorRole>(r))); mask &= ~(1 << index.row()); } m_palette.resolve(mask); emit paletteChanged(m_palette); const QModelIndex idxEnd = PaletteModel::index(r, 3); emit dataChanged(index, idxEnd); return true; } return false;}Qt::ItemFlags PaletteModel::flags(const QModelIndex &index) const{ if (!index.isValid()) return Qt::ItemIsEnabled; return Qt::ItemIsEditable | Qt::ItemIsEnabled;}QVariant PaletteModel::headerData(int section, Qt::Orientation orientation, int role) const{ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { if (section == 0) return tr("Color Role"); if (section == groupToColumn(QPalette::Active)) return tr("Active"); if (section == groupToColumn(QPalette::Inactive)) return tr("Inactive"); if (section == groupToColumn(QPalette::Disabled)) return tr("Disabled"); } return QVariant();}QPalette PaletteModel::getPalette() const{ return m_palette;}void PaletteModel::setPalette(const QPalette &palette, const QPalette &parentPalette){ m_parentPalette = parentPalette; m_palette = palette; const QModelIndex idxBegin = index(0, 0); const QModelIndex idxEnd = index(m_roleNames.count() - 1, 3); emit dataChanged(idxBegin, idxEnd);}QPalette::ColorGroup PaletteModel::columnToGroup(int index) const{ if (index == 1) return QPalette::Active; if (index == 2) return QPalette::Inactive; return QPalette::Disabled;}int PaletteModel::groupToColumn(QPalette::ColorGroup group) const{ if (group == QPalette::Active) return 1; if (group == QPalette::Inactive) return 2; return 3;}//////////////////////////BrushEditor::BrushEditor(QDesignerFormEditorInterface *core, QWidget *parent) : QWidget(parent), m_button(new QtColorButton(this)), m_changed(false), m_core(core) { QLayout *layout = new QHBoxLayout(this); layout->setMargin(0); layout->addWidget(m_button); connect(m_button, SIGNAL(colorChanged(const QColor &)), this, SLOT(brushChanged())); setFocusProxy(m_button);}void BrushEditor::setBrush(const QBrush &brush){ m_button->setColor(brush.color()); m_changed = false;}QBrush BrushEditor::brush() const{ return QBrush(m_button->color());}void BrushEditor::brushChanged(){ m_changed = true; emit changed(this);}void BrushEditor::textureChooserActivated(QWidget *parent, const QBrush &initialBrush){ FindIconDialog dialog(m_core->formWindowManager()->activeFormWindow(), parent); QString file_path; QString qrc_path; QPixmap pixmap = initialBrush.texture(); if (!pixmap.isNull()) { file_path = m_core->iconCache()->pixmapToFilePath(pixmap); qrc_path = m_core->iconCache()->pixmapToQrcPath(pixmap); } dialog.setPaths(qrc_path, file_path); if (dialog.exec()) { file_path = dialog.filePath(); qrc_path = dialog.qrcPath(); if (!file_path.isEmpty()) { pixmap = m_core->iconCache()->nameToPixmap(file_path, qrc_path); } }}bool BrushEditor::changed() const{ return m_changed;}//////////////////////////RoleEditor::RoleEditor(QWidget *parent) : QWidget(parent), m_label(new QLabel(this)), m_edited(false){ QHBoxLayout *layout = new QHBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); layout->addWidget(m_label); m_label->setAutoFillBackground(true); m_label->setIndent(3); // ### hardcode it should have the same value of textMargin in QItemDelegate setFocusProxy(m_label); QToolButton *button = new QToolButton(this); button->setToolButtonStyle(Qt::ToolButtonIconOnly); button->setIcon(createIconSet(QLatin1String("resetproperty.png"))); button->setIconSize(QSize(8,8)); button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding)); layout->addWidget(button); connect(button, SIGNAL(clicked()), this, SLOT(emitResetProperty()));}void RoleEditor::setLabel(const QString &label){ m_label->setText(label);}void RoleEditor::setEdited(bool on){ QFont font; if (on == true) { font.setBold(on); } m_label->setFont(font); m_edited = on;}bool RoleEditor::edited() const{ return m_edited;}void RoleEditor::emitResetProperty(){ setEdited(false); emit changed(this);} //////////////////////////ColorDelegate::ColorDelegate(QDesignerFormEditorInterface *core, QObject *parent) : QItemDelegate(parent), m_core(core){ }QWidget *ColorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const{ QWidget *ed = 0; if (index.column() == 0) { RoleEditor *editor = new RoleEditor(parent); connect(editor, SIGNAL(changed(QWidget *)), this, SIGNAL(commitData(QWidget *))); //editor->setFocusPolicy(Qt::NoFocus); //editor->installEventFilter(const_cast<ColorDelegate *>(this)); ed = editor; } else { BrushEditor *editor = new BrushEditor(m_core, parent); connect(editor, SIGNAL(changed(QWidget *)), this, SIGNAL(commitData(QWidget *))); editor->setFocusPolicy(Qt::NoFocus); editor->installEventFilter(const_cast<ColorDelegate *>(this)); ed = editor; } return ed;}void ColorDelegate::setEditorData(QWidget *ed, const QModelIndex &index) const{ if (index.column() == 0) { const bool mask = qVariantValue<bool>(index.model()->data(index, Qt::EditRole)); RoleEditor *editor = static_cast<RoleEditor *>(ed); editor->setEdited(mask); const QString colorName = qVariantValue<QString>(index.model()->data(index, Qt::DisplayRole)); editor->setLabel(colorName); } else { const QBrush br = qVariantValue<QBrush>(index.model()->data(index, BrushRole)); BrushEditor *editor = static_cast<BrushEditor *>(ed); editor->setBrush(br); }}void ColorDelegate::setModelData(QWidget *ed, QAbstractItemModel *model, const QModelIndex &index) const{ if (index.column() == 0) { RoleEditor *editor = static_cast<RoleEditor *>(ed); const bool mask = editor->edited(); model->setData(index, mask, Qt::EditRole); } else { BrushEditor *editor = static_cast<BrushEditor *>(ed); if (editor->changed()) { QBrush br = editor->brush(); model->setData(index, br, BrushRole); } }}void ColorDelegate::updateEditorGeometry(QWidget *ed, const QStyleOptionViewItem &option, const QModelIndex &index) const{ QItemDelegate::updateEditorGeometry(ed, option, index); ed->setGeometry(ed->geometry().adjusted(0, 0, -1, -1));}void ColorDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &index) const{ QStyleOptionViewItem option = opt; const bool mask = qVariantValue<bool>(index.model()->data(index, Qt::EditRole)); if (index.column() == 0 && mask) { option.font.setBold(true); } QBrush br = qVariantValue<QBrush>(index.model()->data(index, BrushRole)); if (br.style() == Qt::LinearGradientPattern || br.style() == Qt::RadialGradientPattern || br.style() == Qt::ConicalGradientPattern) { painter->save(); painter->translate(option.rect.x(), option.rect.y()); painter->scale(option.rect.width(), option.rect.height()); QGradient gr = *(br.gradient()); gr.setCoordinateMode(QGradient::LogicalMode); br = QBrush(gr); painter->fillRect(0, 0, 1, 1, br); painter->restore(); } else { painter->save(); painter->setBrushOrigin(option.rect.x(), option.rect.y()); painter->fillRect(option.rect, br); painter->restore(); } QItemDelegate::paint(painter, option, index); const QColor color = static_cast<QRgb>(QApplication::style()->styleHint(QStyle::SH_Table_GridLineColor, &option)); const QPen oldPen = painter->pen(); painter->setPen(QPen(color)); painter->drawLine(option.rect.right(), option.rect.y(), option.rect.right(), option.rect.bottom()); painter->drawLine(option.rect.x(), option.rect.bottom(), option.rect.right(), option.rect.bottom()); painter->setPen(oldPen);}QSize ColorDelegate::sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const{ return QItemDelegate::sizeHint(opt, index) + QSize(4, 4);}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?