c++ - 无法使用 QVariantList 填充 ComboBox 模型
问题描述
来自 QML:
AudioInfoCpp
是 C++ 类的对象。旨在从 C++ 中获取数据并将其填充到组合框的模型中。
property ListModel comboModel: cbItems
AudioInfoCpp
{
id: audioInfoCpp
Component.onCompleted:
{
fetchInputDevices()
comboModel.append(inputDevices1)
console.log(inputDevices1)
}
}
ComboBox
{
id: comboBoxM;
width: 100
model: audioInfoCpp.inputDevices1;
textRole: "langDescription";
}
从.h
#ifndef AUDIOINFO_H
#define AUDIOINFO_H
#include <QAudioDeviceInfo>
#include <QList>
#include <QVariantList>
class AudioInfo : public QObject
{
Q_OBJECT
protected:
QAudioDeviceInfo objQAudioDeviceInfo;
public:
AudioInfo();
Q_PROPERTY(QVariantList inputDevices1 READ inputDevices1 WRITE setInputDevices1 NOTIFY inputDevices1Changed)
Q_INVOKABLE void fetchInputDevices();
QVariantList inputDevices1() const
{
return m_inputDevices1;
}
public slots:
void setInputDevices1(QVariantList inputDevices1)
{
if (m_inputDevices1 == inputDevices1)
return;
m_inputDevices1 = inputDevices1;
emit inputDevices1Changed(m_inputDevices1);
}
signals:
void inputDevices1Changed(QVariantList inputDevices1);
private:
QVariantList m_inputDevices1;
};
#endif // AUDIOINFO_H
.cpp:
void AudioInfo::fetchInputDevices()
{
QList<QAudioDeviceInfo> devices1 = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
if (devices1.empty())
{
qDebug() << "No audio input devices";
}
QVariantList tt;
for (const QAudioDeviceInfo& device : devices1)
{
tt.append(device.deviceName());
}
setInputDevices1( tt );
}
在 QML 和 CPP 中,我可以看到从列表中打印的数据,但我无法填充组合框。没有错误。
请指导。
解决方案
问题来自这一行:
textRole: "langDescription"
这意味着它将查看模型中的每个元素以查找该langDescription
字段。但是你正在用 QStrings 填充你的 QVariantList:
QVariantList tt;
for (const QAudioDeviceInfo& device : devices1)
{
tt.append(device.deviceName());
}
QStrings 没有langDescription
字段,因此不会显示任何内容。
要解决此问题,请尝试完全删除该textRole
行并让 QML 自动找出如何正确显示名称。
推荐阅读
- javascript - 如何使用 JS 删除下拉列表中的选定值副本?
- azure - 在 webjob azure 中设置路径
- jekyll - 使用液体按最新日期对帖子进行排序(latest(posted_date,updated_date))
- javascript - 合并来自多个页面的 jQuery 对象
- java - Java ZipEntry 到字节数组
- r - shinyR 应用程序中的 Ggplot 大小
- javascript - 如何通过javascript中的两个对象创建新对象
- sql - SSMS 更改为将数据从解压缩文件提取到表中
- python - 如果我要求 pip 只安装一次,它不会安装所有软件包
- python - 如何使用 shell 脚本/python 以相反的顺序翻转列