Qt 设置QSTYLEOPTIONCOMBOX.currentText对绘制的小部件没有任何影响

Qt 设置QSTYLEOPTIONCOMBOX.currentText对绘制的小部件没有任何影响,qt,qcombobox,Qt,Qcombobox,我想在委托内绘制一个QComboBox,这很好,只是我不知道如何绘制组合框内可见的初始文本 文档中说,QStyleOptionComboBox.currentText包含:“组合框当前项的文本。”但是设置变量没有任何效果 这是我的代码: void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const {

我想在委托内绘制一个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),但我无法理解这两个类是如何协同工作的。

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

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

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

没问题!但更进一步,你知道这实际上不会给你一个可编辑的QComboBox,对吧?它只是在屏幕上绘制组合框的像素。如果您想要一个完全可编辑的组合框,应该查看QItemDelegate::createEditor()。我以前使用过它来实现QTreeView中项目的内联编辑。它工作得很好。是的,我也在使用
createEditor()
。我要解决的问题是QComboBox应该始终可见,而不仅仅是在编辑模式下。油漆并不是最好的解决办法<代码>QabstracteView::openPersistentEditor()完成这项工作!