5

我想在委托内绘制一个 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);
}

看着qwindowsxpstyle.cpp我看不到“真实”组合框的文本在哪里绘制,因为currentText没有在drawComplexControl方法内部使用。它似乎用于 Windows XP 风格的唯一地方是qcommonstyle.cpp(第 2107 行,Qt 4.7.2),但我不知道这两个类是如何一起玩的。

4

1 回答 1

8

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

QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter)

如果我正确阅读了文档和源代码,这可能会迫使 QStyle 绘制组合框标签。您必须同时指定两者似乎很奇怪……但老实说,我不太了解 Qt 样式如何绘制自己。

于 2011-04-05T12:41:54.437 回答