对 QComboBox 中的项目使用 Qt::UserRole 和 Qt::DisplayRole
Using Qt::UserRole and Qt::DisplayRole for Items in QComboBox
我是 C++ Qt 的新手。我正在尝试使用与需要使用的值不同的值填充 QComboBox。
例如,QComboBox 显示设备名称,但在选择时发送该设备的 mac 地址。我有数据。
我尝试使用 Qt::UserRole 和 Qt::DisplayRole,但只使用了 DisplayRole 中提到的值。我想我需要定义角色?如果是,那么如何?对此有任何帮助吗?
QStandardItemModel *model = new QStandardItemModel(this);
int i = 0;
for (auto info : list)
{
if (info.validateMACAddress())
{
memData->comboBox->addItem(info.getMacAddress().arg(i));
memData->comboBox->setItemData(i, info.getDeviceName(), Qt::DisplayRole);
memData->comboBox->setItemData(i, info.getMacAddress(), Qt::UserRole + 1);
i++;
}
}
memData->comboBox->setModel(model);
不需要建立模型,因为QComboBox有内部模型。另外 memData->comboBox->setItemData (i, text, Qt::DisplayRole);
等同于 memData->comboBox->addItem(text);
所以只需放置其中一个即可。
int i = 0;
for (auto info : list){
if (info.validateMACAddress()){
memData->comboBox->addItem(info.getMacAddress().arg(i));
memData->comboBox->setItemData(i, info.getMacAddress(), Qt::UserRole + 1);
i++;
}
}
要获得 mac,您应该在插槽中使用 currentData()
方法:
// Slot:
auto mac = memData->comboBox->currentData(Qt::UserRole + 1);
您可以使用 currentIndexChanged
信号
一种选择是使用 lambda。
connect(memData->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index)
{
// get mac address
auto oMacAddress = memData->comboBox->itemData(index, Qt::UserRole +1);
});
或将插槽添加到您的 class
connect(memData->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &MyClass::HandleIndexChanged);
void MyClass::HandleIndexChanged(int index)
{
// get mac address
auto oMacAddress = memData->comboBox->itemData(index, Qt::UserRole +1);
}
我是 C++ Qt 的新手。我正在尝试使用与需要使用的值不同的值填充 QComboBox。 例如,QComboBox 显示设备名称,但在选择时发送该设备的 mac 地址。我有数据。
我尝试使用 Qt::UserRole 和 Qt::DisplayRole,但只使用了 DisplayRole 中提到的值。我想我需要定义角色?如果是,那么如何?对此有任何帮助吗?
QStandardItemModel *model = new QStandardItemModel(this);
int i = 0;
for (auto info : list)
{
if (info.validateMACAddress())
{
memData->comboBox->addItem(info.getMacAddress().arg(i));
memData->comboBox->setItemData(i, info.getDeviceName(), Qt::DisplayRole);
memData->comboBox->setItemData(i, info.getMacAddress(), Qt::UserRole + 1);
i++;
}
}
memData->comboBox->setModel(model);
不需要建立模型,因为QComboBox有内部模型。另外 memData->comboBox->setItemData (i, text, Qt::DisplayRole);
等同于 memData->comboBox->addItem(text);
所以只需放置其中一个即可。
int i = 0;
for (auto info : list){
if (info.validateMACAddress()){
memData->comboBox->addItem(info.getMacAddress().arg(i));
memData->comboBox->setItemData(i, info.getMacAddress(), Qt::UserRole + 1);
i++;
}
}
要获得 mac,您应该在插槽中使用 currentData()
方法:
// Slot:
auto mac = memData->comboBox->currentData(Qt::UserRole + 1);
您可以使用 currentIndexChanged
信号
一种选择是使用 lambda。
connect(memData->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
[=](int index)
{
// get mac address
auto oMacAddress = memData->comboBox->itemData(index, Qt::UserRole +1);
});
或将插槽添加到您的 class
connect(memData->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
this, &MyClass::HandleIndexChanged);
void MyClass::HandleIndexChanged(int index)
{
// get mac address
auto oMacAddress = memData->comboBox->itemData(index, Qt::UserRole +1);
}