gpt4 book ai didi

qt - 如何在 QCombobox 中为分隔符添加样式表

转载 作者:行者123 更新时间:2023-12-05 02:23:40 26 4
gpt4 key购买 nike

我在带有分隔符的 qcombobox 中添加了两个项目

addItem("New");
addItem("Delete");
insertSeparator(2);

为了突出显示具有不同样式的项目的选择,我将 QLIstView 用于 QComboBox View ,样式表为

QListView * listView = new QListView(this);
this->setView(listView);

listView->setStyleSheet("QListView::item { \
color: black; \
background: white; } \
QListView::item:selected { \
color: white; \
background-color: #0093D6 \
} \
");

现在的问题是分隔符根本不可见.. 它显示项目之间的空白区域。我不擅长样式表,所以我不太清楚如何为分隔符制作新的样式表。

最佳答案

您必须为您的 QListView 创建自定义 itemDelegate

您可以继承QItemDelegate 来创建您自己的委托(delegate)类。使用 sizeHint 函数设置分隔符的大小并在 paint 函数中绘制它。使用 index.data(Qt::AccessibleDescriptionRole).toString() 检查项目是否为分隔符。

#ifndef COMBOBOXDELEGATE_H
#define COMBOBOXDELEGATE_H

#include <QItemDelegate>

class ComboBoxDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit ComboBoxDelegate(QObject *parent = 0);

protected:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

#endif // COMBOBOXDELEGATE_H

void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator"))
{
painter->setPen(Qt::red);
painter->drawLine(option.rect.left(), option.rect.center().y(), option.rect.right(), option.rect.center().y());
}
else
QItemDelegate::paint(painter, option, index);
}

QSize ComboBoxDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QString type = index.data(Qt::AccessibleDescriptionRole).toString();
if(type == QLatin1String("separator"))
return QSize(0, 2);
return QItemDelegate::sizeHint( option, index );
}

然后只需将您的自定义委托(delegate)设置为您的listView:

listView->setItemDelegate(new ComboBoxDelegate);.

关于qt - 如何在 QCombobox 中为分隔符添加样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828160/

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