QComboBox 在控件上不显示icon
时间: 2023-12-11 08:06:01 浏览: 44
如果您希望在 QComboBox 中显示图标,可以使用 setIconSize() 方法设置图标的大小,然后使用 setItemIcon() 方法为每个项目设置图标。示例代码如下:
```python
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QComboBox
app = QApplication([])
combo_box = QComboBox()
combo_box.setIconSize(QtCore.QSize(16, 16)) # 设置图标大小
combo_box.addItem(QIcon('path/to/icon'), 'Item with icon') # 为项目设置图标
combo_box.addItem('Item without icon')
combo_box.show()
app.exec_()
```
在上面的示例代码中,我们使用了 QIcon 类为项目设置图标。如果您希望从资源文件中加载图标,可以使用 QResource 类。另外,请确保图标文件的路径是正确的。
相关问题
写一个好看的QCombobox
为了写一个好看的QComboBox,可以尝试以下几个步骤:
1. 设置样式表:使用样式表可以改变QComboBox的外观,例如颜色、边框、圆角等。在样式表中,可以使用QComboBox的各种子控件来定位需要修改的部分,例如QComboBox::drop-down和QComboBox::down-arrow等。
2. 设置图标:可以为QComboBox设置图标,例如下拉箭头图标。可以使用QIcon来加载图标文件,然后调用QComboBox的setIcon方法设置图标。
3. 设置字体和大小:可以为QComboBox设置字体和大小,使其更加清晰易读。可以使用QFont来设置字体,然后调用QComboBox的setFont方法设置字体。
4. 设置数据模型:QComboBox通常会与一个数据模型进行绑定,用于显示下拉列表中的数据。可以使用QStandardItemModel来创建一个数据模型,然后使用QComboBox的setModel方法将数据模型设置给QComboBox。
下面是一个示例代码,可以用于设置一个好看的QComboBox:
```python
from PyQt5.QtWidgets import QApplication, QComboBox
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import Qt
app = QApplication([])
# 创建QComboBox
combo = QComboBox()
# 设置样式表
combo.setStyleSheet("""
QComboBox {
border: 2px solid gray;
border-radius: 8px;
padding: 2px 16px 2px 8px;
color: white;
background-color: #292929;
}
QComboBox::drop-down {
subcontrol-origin: padding;
subcontrol-position: top right;
width: 24px;
border-left-width: 1px;
border-left-color: gray;
border-left-style: solid;
border-top-right-radius: 8px;
border-bottom-right-radius: 8px;
background-color: #292929;
}
QComboBox::down-arrow {
image: url(arrow.png);
width: 16px;
height: 16px;
}
""")
# 设置图标
icon = QIcon("arrow.png")
combo.setIcon(icon)
# 设置字体和大小
font = QFont("Arial", 12)
combo.setFont(font)
# 设置数据模型
model = QStandardItemModel()
model.appendRow(QStandardItem("Item 1"))
model.appendRow(QStandardItem("Item 2"))
model.appendRow(QStandardItem("Item 3"))
combo.setModel(model)
# 显示QComboBox
combo.show()
app.exec_()
```
这段代码会创建一个带有自定义样式、图标、字体和数据模型的QComboBox,并将其显示出来。你可以根据自己的需求修改样式表、图标、字体和数据模型,以达到自己想要的效果。
如何使用qt实现QCombox 填充样式下拉列表,要求选择后当前item显示填充名称和填充图案,图案在前,文字在后,请用c++实现
首先,需要在Qt的工程中添加一个QComboBox控件。然后,在需要的地方添加以下代码:
```cpp
// 创建ComboBox的Model
QStandardItemModel *model = new QStandardItemModel();
// 添加ComboBox的Item
QStandardItem *item1 = new QStandardItem(QIcon(":/images/image1.png"), "Item 1");
QStandardItem *item2 = new QStandardItem(QIcon(":/images/image2.png"), "Item 2");
model->appendRow(item1);
model->appendRow(item2);
// 将Model设置给ComboBox
ui->comboBox->setModel(model);
// 设置ComboBox的Delegate,用于显示图标和文本
ui->comboBox->setItemDelegate(new QStyledItemDelegate(ui->comboBox));
ui->comboBox->view()->setItemDelegate(new QStyledItemDelegate(ui->comboBox));
// 设置ComboBox的样式
ui->comboBox->setStyleSheet("QComboBox::item { padding: 5px; } QComboBox::item:selected { background-color: #e5e5e5; }");
// 设置ComboBox的宽度和高度
ui->comboBox->setFixedSize(150, 30);
```
其中,QStandardItemModel用于管理ComboBox的Item,QStandardItem是每个Item的数据结构,QIcon是每个Item的图标,"Item 1"和"Item 2"是每个Item的文本,setModel用于将Model设置给ComboBox,setItemDelegate用于设置Delegate,setItemDelegate用于设置下拉列表的Delegate,setStyleSheet用于设置ComboBox的样式,setFixedSize用于设置ComboBox的大小。
在Delegate中,需要重写paint()函数,用于绘制每个Item的图标和文本。以下是Delegate的代码:
```cpp
class ComboBoxDelegate : public QStyledItemDelegate
{
public:
ComboBoxDelegate(QObject *parent = nullptr)
: QStyledItemDelegate(parent)
{
}
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
{
// 获取Item的数据
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QString text = index.data(Qt::DisplayRole).toString();
// 绘制Item的图标和文本
QRect iconRect = option.rect.adjusted(5, 0, -option.rect.width() / 2, 0);
QRect textRect = option.rect.adjusted(option.rect.width() / 2, 0, -5, 0);
painter->drawPixmap(iconRect, icon.pixmap(16, 16));
painter->drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, text);
}
};
```
最后,需要在ComboBox的currentIndexChanged()信号中,更新当前Item的图标和文本。以下是代码:
```cpp
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
QIcon icon = qvariant_cast<QIcon>(ui->comboBox->model()->data(ui->comboBox->model()->index(index, 0), Qt::DecorationRole));
QString text = ui->comboBox->currentText();
ui->label->setText(text);
ui->label->setPixmap(icon.pixmap(32, 32));
}
```
其中,label用于显示当前Item的图标和文本。
这样,就可以实现一个QComboBox填充样式下拉列表,并且选择后当前item显示填充名称和填充图案,图案在前,文字在后的效果。