设置QStyleOptionComboBox.currentText对绘制的窗口小部件没有任何影响

Wol*_*ngP 5 qt qcombobox

我想在委托中绘制一个QComboBox,除了我无法弄清楚如何绘制在组合框中可见的初始文本之外,它工作得很好.

文档说QStyleOptionComboBox.currentText保持:"组合框当前项的文本." 但设置变量没有任何影响.

这是我的代码:

void MyDelegate::paint(QPainter *painter,
    const QStyleOptionViewItem& option,
    const QModelIndex& index) const
{
    QStyleOptionComboBox comboBoxOption;
    comboBoxOption.rect = option.rect; 
    comboBoxOption.state = option.state;
    comboBoxOption.state |= QStyle::State_Enabled;
    comboBoxOption.editable = false;
    comboBoxOption.currentText = "CCC"; // This doesn't show up.

    QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter);
}
Run Code Online (Sandbox Code Playgroud)

看着qwindowsxpstyle.cpp我没有看到"真实"组合框的文本在哪里被绘制,因为currentTextdrawComplexControl方法中没有使用.它似乎用于Windows XP风格的唯一地方是qcommonstyle.cpp(Line 2107,Qt 4.7.2),但我无法弄清楚这两个类如何一起玩.

小智 7

除了复杂的控件之外,你似乎还需要强制Qt绘制组合框标签.试试这个:

QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter)
Run Code Online (Sandbox Code Playgroud)

如果我正确阅读文档和源代码,可能会强制QStyle绘制组合框标签.你必须同时指明两个......这似乎有点奇怪.但是说实话,我不太了解Qt风格如何画出自己.

  • 是的,我也在使用`createEditor()`.我正在攻击QComboBox应始终可见的问题,而不仅仅是在编辑模式下.绘画并不是最好的解决方案.`QAbstractItemView :: openPersistentEditor()`完成这项工作! (2认同)