我想使用QComboBox与元组中的"键"和"值"类似于django模型中使用的元组.例如,我有一个人的性别以下结构.
SEX_CHOICES = (('M', 'Male'), ('F', 'Female'))
Run Code Online (Sandbox Code Playgroud)
元组的第一项包含存储在数据库中的性别代码,第二项是我想在QComboBox中作为项目显示的文本.
有没有办法我可以将QComboBox值设置为M并显示Male.当用户选择元素时,我也可以将所选值作为M.
谢谢
我正在使用PyQt中的一个应用程序来获取对象字典,并允许您实时绘制从机器人流出的变量.我正在努力实现这一点的一个方面是下拉菜单.不幸的是,我们有几百个变量,所以当我点击时,我的PyQt Combobox会从屏幕顶部弹出到底部.我想将一次显示的项目数限制为20,并能够滚动查看其余项目.我已经尝试使用记录的setMaxVisibleItems方法,但它根本不会影响下拉.有什么建议?
代码在这里:
#!/usr/bin/env python
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QComboBox, QApplication
from cli.parc2_od import cli_od
import sys
app = QApplication(sys.argv)
items = cli_od.OD.keys() #Items to populate dropdown.
combo = QComboBox()
#The solution:
combo.setStyleSheet("QComboBox { combobox-popup: 0; }")
combo.setMaxVisibleItems(10)
combo.addItems(items)
combo.resize(300, 30)
combo.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 我想将 QComboBox 的文本设置为一些自定义文本(不在 QComboBox 的列表中),而不将此文本添加为 QComboBox 的项目。此行为可在带有QComboBox::setEditText(const QString & text). 但是,在不可编辑的 QComboBox 上,此函数不执行任何操作。
是否可以以编程方式将不可编辑的 QComboBox 的显示/编辑文本设置为不在其列表中的内容?还是我必须找到另一种方式(例如使用带有弹出菜单的 QPushButton)
编辑:考虑一个可编辑的 QComboBox 与InsertPolicy QComboBox::NoInsert. 如果用户输入内容并按回车键,输入的值将被使用但不会添加到列表中。我想要的是这种行为以编程方式更改“当前”文本,但不允许用户自己输入一些文本。用户可以从 QComboBox 中选择一些内容,但一段时间后,我可能想要覆盖“当前”文本。
我在Qt中设计了一个QComboBox.这是图中所示的四舍五入.问题是在圆形边框后面显示一个奇怪的方框.
有人能告诉我这个盒子是什么以及如何使它隐形吗?
顺便说一句,我也想把阴影带走.

这是我目前的代码:
QComboBox {
border: 1px solid gray;
border-radius: 10px;
min-width: 6em;
}
QComboBox:on {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
QComboBox QAbstractItemView {
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
background: white;
border: 1px solid gray;
box-shadow: transparent;
}
QComboBox::drop-down {
border-color: transparent;
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?谢谢!
我想在组合框的下拉菜单中选择所选项目的突出显示.
与其他问题的区别在于我不想设置"选定"项目的样式(用鼠标悬停).但是我对已经选择的项目的样式感兴趣.
默认是某种在文本上绘制的自动收报机.我希望选择的项目有粗体文字,没有自动收报机图像.
或者在最坏的情况下,只需向右移动文本即可正确显示自动收报机.
我有的是这个:

请注意第17个项目,其中包含数字17的自动收报机.
这是我的样式表:
QComboBox
{
subcontrol-origin: padding;
subcontrol-position: top right;
selection-background-color: #111;
selection-color: yellow;
color: white;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
padding: 1px 0px 1px 20px;
}
QComboBox:hover, QPushButton:hover
{
border: 1px solid yellow;
color: white;
}
QComboBox:editable {
background: red;
color: pink; …Run Code Online (Sandbox Code Playgroud) 我有一个QComboBox列出所有Windows的驱动器号,让用户在其中进行选择.在执行期间,我们需要启用或禁用某些字母(不删除它们).
这是基本代码:
all_letters = ["{}:".format(chr(i)) for i in range(90, 64, -1)] # Z: -> A:
all_letters.insert(0, "")
cb_letter = QtGui.QComboBox()
for l in all_letters:
cb_letter.addItem(l)
cb_letter.setCurrentIndex(0)
Run Code Online (Sandbox Code Playgroud)
我可以找到一种解决方案(听起来真的很复杂),只是在这里禁用一个条目,但无法启用它.
什么是启用和禁用QComboBox的任何条目的最佳方法?
在浮动工具栏中恢复具有QCombobox的QMainWindow状态时,我看到一个问题。恢复浮动工具栏后,我的QCombobox无法获得焦点,直到我单击工具栏手柄并将其移动。以下是显示问题的gif,使用QT 5.13。

文件float_toolbar.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = floating_toolbar
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Run Code Online (Sandbox Code Playgroud)
档案:main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w; …Run Code Online (Sandbox Code Playgroud) 我想在委托中绘制一个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);
}
Run Code Online (Sandbox Code Playgroud)
看着qwindowsxpstyle.cpp我没有看到"真实"组合框的文本在哪里被绘制,因为currentText在drawComplexControl方法中没有使用.它似乎用于Windows XP风格的唯一地方是qcommonstyle.cpp(Line 2107,Qt 4.7.2),但我无法弄清楚这两个类如何一起玩.
我做了多选QComboBox.项目是可检查的(每个项目都有复选框和文本值).只有在用户单击它时才会检查CheckBox.我想要的是在用户点击文本值时捕获信号,这样我就可以设置选中它旁边的复选框.怎么做?

这就是我将模型设置为组合框的方式:
areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(5, 1)# 5 rows, 1 col
firstItem = QtGui.QStandardItem("---- Select area(s) ----")
firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))
firstItem.setSelectable(False)
model.setItem(0, 0, firstItem)
for i,area in enumerate(areas):
item = QtGui.QStandardItem(area)
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
model.setItem(i+1, 0, item)
self.ui.comboBox.setModel(model)
self.ui.comboBox.installEventFilter(self)
Run Code Online (Sandbox Code Playgroud)
我已经为阻止轮子事件添加了事件过滤器,因此firstItem文本总是显示为"已选择"
def eventFilter(self,target,event):
if target == self.ui.comboBox:
if(event.type()== QtCore.QEvent.Wheel):
#wheel event is blocked here
return True
return False
Run Code Online (Sandbox Code Playgroud)