Linux에서 Qt 5.9를 사용하면 여러 레이블이있는 QComboBox가 있습니다.QComboBox는 목록에있는 값과 다른 값을 표시 할 수 있습니까?
qc = new QComboBox;
qc->addItem(tr("Red"));
qc->addItem(tr("Green"));
qc->addItem(tr("Blue"));
사용자가 QComboBox를 활성화하고 3 색 레이블이 드롭 다운 목록에 표시됩니다. 사용자는 첫 번째 항목 (빨간색)을 선택합니다.
내가하고 싶은 것은 QComboBox 디스플레이에 선택된 것과 다른 값을 표시하는 것입니다. 즉, 빨간색이 선택되면 첫 번째 항목에 대해 1 (또는 빨간색에 대한 R이 될 수 있음)이 표시되고 녹색이 선택되면 두 번째 항목에 대해 2 (또는 G)가 표시됩니다.
내 목표는 일부 항목 문자열이 상당히 길고 QComboBox를 사용할 때 훨씬 짧은 레이블이 필요하기 때문에 실제로 선택 항목의 전체 텍스트를 표시하는 데 필요한 것보다 적은 표시 공간 (적은 너비)을 사용하는 것입니다. 드롭 다운 상태에서는 활성화되지 않습니다. 게다가 항목 문자열은 설명 적이며 약어는 표시하기에 더 잘 작동합니다.
편집 :
마렉의 예를 사용하면 이것이 도움이 될 것이라고 생각합니다. 여기에 내가 가진 것이있다. 사용자가 목록에서 선택하면 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을 사용하는 방법을 이해하지 못해서 느낌이 들었습니다. 메이크업에 대한 예에서
힌트 :'QComboBox' alreay는 디폴트'QStandardItemModel'을 가지고 있습니다. 따라서, 자동 모델 = qobject_cast (qc-> model());을 사용할 수 있습니다. –
오타가 없습니다. 그 값을 넣었지만 UserRole 값이 선택된 값으로 표시되는 데 문제가 있습니다. . DisplayRole [ "Green"]이 선택된 값이고 드롭 다운 목록이 DisplayRole [ "Green"] 값이라는 점만 제외하면 모두 작동합니다. 정상적인 논 드롭 다운 상태에서 선택된 값으로 UserRole 값을 보지 못합니다. – Ender
이 문제는 계속 발생합니다. 누구나 가질 수있는 생각을 고맙게 생각합니다. 사용자 역할을 일반 (드롭 다운 없음) 상태로 표시 할 수 없습니다. – Ender