QComboBox 可以显示与其列表中的值不同的值吗?



在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是时需要更短的标签未在下拉状态下激活。此外,项目字符串具有描述性,缩写可以更好地显示。

编辑:
以Marek的例子为例,认为这可能会有所帮助。这就是我所拥有的。我期望用户是否从列表中选择,则应在后显示R,G或AB。

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。

是的。QComboBox使用数据模型来管理项目。您必须提供自己的数据模型,其中包括具有各自数据值的项目。

QStandardItem *itme1 = new QStandardItem();
item1->setData(tr("Red"), Qt::DisplayRole);
item1->setData("1", Qt::UserRole); // note doesn't have to be a string.
QStandardItem *itme2 = new QStandardItem();
item2->setData(tr("Green"), Qt::DisplayRole);
item2->setData("2", Qt::UserRole);
QStandardItemModel *model = new QStandardItemModel(this);
mode->setItem(1, item1);
mode->setItem(2, item2);
qc->setModel(model);

它应该起作用,但我没有测试。至少这应该是一些线索。

请查看Qcombobox文档,尤其是关于角色的文档。


另一个解决方案是使用具有多个长度的翻译。您可以为一个字符串提供夫妇翻译。每种翻译应比以前的翻译短。

在这种情况下, QString包含以空间特征分开的所有可能性。当将这样的字符串渲染时(分隔符之间)将使用可用空间的第一个子字符串。

现在我不记得什么是分隔符值。我很久以前就使用过(使用QT 4.8),现在找不到参考。

在您的示例中,使其成为简短的作品:

qc->setWidth( 20 );

但是,如果您真的希望用户选择某些东西,则:

connect(qc,signal(oncurrentIndexchanged(int)),插槽(changecombotext()));[...]

void changeComboText()
{
   QString shortText;
  //Determine short value for shortText
   qc->setCurrentText( shortText );
}

相关内容

  • 没有找到相关文章

最新更新