gpt4 book ai didi

c++ - Qt:QSS 和 drawComplexControl()

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:22 25 4
gpt4 key购买 nike

我有一个包含 QTableView 的 QDialog,以及一个显示枚举类型的 QComboBox 的自定义委托(delegate)。当未选择该行时,我仍然希望 QComboBox 可见(我想避免使用 QTableView::openPersistentEditor())。为此,自定义委托(delegate)将绘画事件转发给以下方法:

QStyleOptionViewItem &option) const
{
painter->save();

QStyleOptionComboBox comboBoxOption;
comboBoxOption.rect = option.rect;
comboBoxOption.state = option.state;
comboBoxOption.state |= QStyle::State_Enabled;
comboBoxOption.editable = false;
comboBoxOption.currentText = enumInfo.valueToKey(curValue);

// The cast is successful, and srcWidget is the QTableView
QWidget *srcWidget = qobject_cast<QWidget *>(option.styleObject);

// style->metaObject()->className() = QStyleSheetStyle
QStyle *style = srcWidget ? srcWidget->style() : QApplication::style();

// However, the QSS is ignored here (while srcWidget->styleSheet() correctly
// returns the style I've set in Qt Designer)
style->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter, srcWidget);
style->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter, srcWidget);

painter->restore();
}

问题是我使用 QSS 设置了组合框控件的样式,但 drawComplexControl() 似乎忽略了这一点,尽管使用了 QTableView 的样式。这是一个屏幕截图:

Application screenshot

drawComplexControl()是否可以考虑样式表?

谢谢

最佳答案

我认为唯一的方法是使用 QPixmap::grabWidget() 获取小部件。并在委托(delegate)中使用此图像。似乎,因为 QSS limitation 而无法做到

关于c++ - Qt:QSS 和 drawComplexControl(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516991/

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