在 Linux 上使用 Qt 5.9,我有一个带有多个标签的 QComboBox。
qc = new QComboBox;
qc->addItem(tr("Red"));
qc->addItem(tr("Green"));
qc->addItem(tr("Blue"));
假设用户激活了 QComboBox,下拉列表中显示了 3 个颜色标签。然后用户选择第一项(红色)。
我想要做的是让 QComboBox 显示与所选值不同的值。即,如果选择红色,则显示一个数字,第一项可能为 1(或者可能是红色的 R),如果选择绿色,则第二项显示 2(或 G)。
我这样做的目标是使用比显示所选内容的完整文本实际所需的更少的显示空间(更窄的宽度),因为我的一些项目字符串非常长,并且当 QComboBox 未激活时需要更短的标签。是下拉状态。此外,项目字符串是描述性的,缩写会更好地显示。
Edit:
使用马雷克的例子,我认为这可能会有所帮助。这就是我所拥有的。我期望如果用户从列表中进行选择,那么之后应该显示 R、G 或 B。
QStandardItem *red = new QStandardItem();
red->setData(tr("Red"), Qt::DisplayRole);
red->setData("R", Qt::UserRole);
QStandardItem *green = new QStandardItem();
green->setData(tr("Green"), Qt::DisplayRole);
green->setData("G", Qt::UserRole);
QStandardItem *blue = new QStandardItem();
blue->setData(tr("Blue"), Qt::DisplayRole);
blue->setData("B", Qt::UserRole);
QStandardItemModel *rgb_model = new QStandardItemModel(this);
rgb_model->setItem(0, red);
rgb_model->setItem(1, green);
rgb_model->setItem(2, blue);
QComboBox *rgb_cb = new QComboBox();
rgb_cb->setModel(rgb_model);
我感觉这是因为我不太明白如何使用 Qt::UserRole。