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 + -
显示快捷键?