gpt4 book ai didi

c++ - QComboBox 中的项目需要多少像素?

转载 作者:行者123 更新时间:2023-12-02 10:09:19 27 4
gpt4 key购买 nike

我想知道 QComboBox 中有多少像素需要这个项目:
Picture

  • 红色 - 复选框
  • 绿色 - 复选框结尾和文本开头之间的距离
  • 蓝色 - 边框末端和复选框开始之间的距离

  • 在 QStyle 的文档中,我找到了两种方法:
  • subElementRect()
  • 像素度量()
    我想我必须使用它们,但我不知道,我需要使用哪些 args。
  • 最佳答案

    这取决于风格。QCommonStyle例如绘制组合框的标签,如 this :

    if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
    QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget);
    p->save();
    p->setClipRect(editRect);
    if (!cb->currentIcon.isNull()) {
    QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal
    : QIcon::Disabled;
    QPixmap pixmap = cb->currentIcon.pixmap(qt_getWindow(widget), cb->iconSize, mode);
    QRect iconRect(editRect);
    iconRect.setWidth(cb->iconSize.width() + 4);
    iconRect = alignedRect(cb->direction,
    Qt::AlignLeft | Qt::AlignVCenter,
    iconRect.size(), editRect);
    if (cb->editable)
    p->fillRect(iconRect, opt->palette.brush(QPalette::Base));
    proxy()->drawItemPixmap(p, iconRect, Qt::AlignCenter, pixmap);
    if (cb->direction == Qt::RightToLeft)
    editRect.translate(-4 - cb->iconSize.width(), 0);
    else
    editRect.translate(cb->iconSize.width() + 4, 0);
    }
    if (!cb->currentText.isEmpty() && !cb->editable) {
    proxy()->drawItemText(p, editRect.adjusted(1, 0, -1, 0),
    visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter),
    cb->palette, cb->state & State_Enabled, cb->currentText);
    }
    p->restore();
    }
    这意味着,图标矩形的实际大小可以通过子类 QComboBox 来确定。 (访问其 protected initStyleOption 方法)并创建一个新的公共(public) getIconRect方法如下:
    QRect ComboBox::getIconRect()
    {
    QStyleOptionComboBox opt;
    initStyleOption(&opt);

    QRect rect(style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxEditField));

    rect.setWidth(opt.iconSize.width() + 4);

    return rect;
    }
    然后在 MainWindow例如创建一个 ComboBox并调用其 getIconSize像这样的方法:
    auto *cmbBox = new ComboBox(this);

    qDebug() << cmbBox->getIconRect();
    对我来说,在 Windows 10 上,这给出了:

    QRect(3,3 20x14)


    可能还有其他方法,但如果您坚持使用类似于 QStyle::subControlRect 的方法,这些是正确的论点;

    关于c++ - QComboBox 中的项目需要多少像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64278450/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com