Hier ist das Problem, ich erstellte eine C++ - Klasse, die eine lokale Datei lädt und für jede neue Zeile ein Signal sendet. Was ich tun möchte, ist in meiner QML-Datei Ich möchte diese Zeilen in eine Listenansicht, die ich bereits getan habe, aber das Problem jetzt ist, dass die C++ - Funktion noch vor dem Start der Anwendung lädt, würde es die Datei lesen und füllen Sie die Listenansicht und dann die Seite anzeigen.C++ - Funktion wird aufgerufen, bevor die Seite auch mit Component.onCompleted lädt
Hier ist mein Code.
main.cpp
#include <QtCore/QCoreApplication>
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickView>
#include <QtQml>
#include "boot.h"
int main(int argc, char *argv[])
{
QCoreApplication::setApplicationName("xyz");
QCoreApplication::setAttribute(Qt::AA_X11InitThreads);
qmlRegisterType<Boot>("xyx", 1, 0, "Boot");
QGuiApplication app(argc, argv);
QQuickView quickView;
quickView.setSource(QUrl(QStringLiteral("qrc:/Boot.qml")));
quickView.setResizeMode(QQuickView::SizeRootObjectToView);
quickView.showMaximized();
return app.exec();
}
Boot.qml
import QtQuick 2.0
import "."
import QtQuick.XmlListModel 2.0
import xyz 1.0
Item{
Loader{
id: bootPageLoader
anchors.fill:parent
sourceComponent: bootSystem
focus:true
}
Component{
id:bootSystem
Rectangle{
width: 640
height: 480
color:"black"
focus:true
Component.onCompleted: {
booting.load();
}
Boot{
id:booting
onErrorMsgChanged: {
console.log("New Boot Log Message: " + errorMsg);
//This is where I am adding to the listview every time I receive a signal
logModel.append({msg:errorMsg});
log.positionViewAtEnd();
}
}
ListView {
id:log
anchors.left: parent.left
anchors.leftMargin: 10
anchors.topMargin: 10
anchors.bottomMargin:10
anchors.top: parent.top
width:(parent.width*40)/100
height:parent.height-20
model: BootLogModel{
id:logModel
}
delegate: Text {
text: msg
color: "green"
font.pixelSize: 15
}
}
Text{
id: loading
anchors{
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
text: "LOADING..."
color: "white"
font.pixelSize: Math.round(parent.height/20)
font.bold: true
}
}
}
}
BootLogModel.qml
import QtQuick 2.0
ListModel {
}
Hier ist der C++ Code s nippet
In boot.h
#ifndef BOOT_H
#define BOOT_H
#include <QObject>
#include <QString>
#include <string>
class Boot : public QObject{
Q_OBJECT
Q_PROPERTY(QString errorMsg READ errorMsg NOTIFY errorMsgChanged)
public:
explicit Boot(QObject *parent = 0);
Q_INVOKABLE void load();
QString errorMsg();
void setErrorMsg(const QString &errorMsg);
signals:
void errorMsgChanged();
private:
QString m_errorMsg;
};
#endif // BOOT_H
In boot.cpp
Boot::Boot(QObject *parent) : QObject(parent)
{
}
QString Boot::errorMsg()
{
return m_errorMsg;
}
void Boot::setErrorMsg(const QString &errorMsg)
{
m_errorMsg = errorMsg;
emit errorMsgChanged();
}
void Boot::load()
{
int i = 0;
while(i < 10000)
{
setErrorMsg("test: " + QString::number(i));
i++;
}
}
ich diese zuerst sehen, bevor die GUI
Dann ist dies das GUI Wesen angezeigt und bereits ausgefüllt
Wenn Ihr Problem ist, diese drucken Daten, dann habe ich eine Lösung für diesen speziellen Fall, sollten Sie auch wissen, dass die Schleifen nicht GUI-freundlich sind. – eyllanesc
Bitte legen Sie die Lösung, die es funktionieren könnte. Das Problem ist nicht mit der Schleife, was ich tun möchte, ist, wenn ich "SetErrorMsg" anrufe, möchte ich, dass es die Nachricht zur Listview hinzufügt und die GUI aktualisiert. Ich möchte das in jeder anderen Funktion machen. –
sage ich habe eine Funktion namens "play" Was ich tun möchte, ist, wenn play einen Fehler hat, dann möchte ich die Fehlermeldung einstellen und ein Signal ausgeben, das die GUI aktualisieren wird, wenn es sich ändert. –