gpt4 book ai didi

qt - QML - 如何使用 QStringList 作为 ListView 的模型?

转载 作者:行者123 更新时间:2023-12-01 16:06:10 25 4
gpt4 key购买 nike

我尝试制作 TelnetClient。我使用 FileIO 来读取 Telnet。读取或写入没有问题,还创建了一个字符串列表,但我需要向 ListView 显示 QStringList,但出现错误:“m_model 未定义”。

我创建QStringList:

QStringList FileIO::read() {
if (m_source.isEmpty()) {
emit error("source is empty");
return QStringList();
}

QFile file(m_source);
QString fileContent;
QString line;
QStringList list;

if ( file.open(QIODevice::ReadWrite) ) {
QTextStream t( &file );
line = t.readAll();

fileContent += line;
list.append(line.split("\r\n"));

foreach (QString item, list) {
if (item[0].isNumber()) {
list2.append(item);
}
}

QQmlContext *ctxt;
ctxt->setContextProperty("m_model", QVariant::fromValue(list2));

qDebug() << "\r\n\r\nlist2 =" << list2;

line = t.readAll();

qDebug() << "SOURCE" << m_source;
file.close();
}
else {
emit error("Unable to open the file");
return QStringList();
}

return list2;

这可以成功创建一个新的QStringList,并且我还可以将我的字符串列表指定为模型; m_model。

ListView {
id: listView1
x: 0
y: 0
model: m_model
delegate: Rectangle{
Text {text: modelData }
}
}

这是我的 ListView 。当我这样尝试时,我收到错误。我怎么解决这个问题。如果我可以在 main.cpp 中使用“list2”,我可以解决问题,但我不知道如何在 main.cpp 中使用它,因为它存在于另一个类中。

谢谢!

最佳答案

您可以尝试使用该类的实例设置上下文属性。这样,您可以在 main 中实例化该类,然后传递它的地址来设置上下文属性。如果模型的数据在程序运行时可能会发生变化,我建议将 QStringList 实现为 Q_Property .

//main.cpp

FileIO fileIO;
QQmlApplicationEngine engine;
QQmlContext* ctx = engine.rootContext();
ctx->setContextProperty("fileio", &fileIO);
engine.load(/* Path to your qml */);


//qml
ListView {
id: listView1
x: 0
y: 0
model: fileio.m_model
delegate: Rectangle{
Text {text: modelData }
}
}

关于qt - QML - 如何使用 QStringList 作为 ListView 的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38792269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com