doc*_*joe 3 qt listview qml qtquick2
我尝试制作 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;
Run Code Online (Sandbox Code Playgroud)
这可以成功创建一个新的QStringList,并且我将我的字符串列表指定为模型;m_model。
ListView {
id: listView1
x: 0
y: 0
model: m_model
delegate: Rectangle{
Text {text: modelData }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的列表视图。当我这样尝试时,我收到错误。我怎么解决这个问题。如果我可以在 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 }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12147 次 |
| 最近记录: |