first of all, I have a problem like this. I want to transfer the data to the QML side with a signal from C ++, but after a while my interface crashes without giving any error. I can’t find the reason for this, I can’t see it even though I debug, is there any error in my code?
NOTE: I didn’t add unnecessary parts of the code
QML:
Window {
QtObject {
id: tcpVariables
property real tcp_velocity_X_Angle: 0
}
Connections {
target: tcpClient
function onVelocity_X_Changed() {
var newVelocity = tcpClient.get_Velocity_X()
if (!isNaN(newVelocity) && isFinite(newVelocity)) {
tcpVariables.tcp_velocity_X_Angle = newVelocity;
console.log("tcp_velocity_X_Angle signal triggered: " + tcpVariables.tcp_velocity_X_Angle);
} else {
console.error("Invalid velocity value: " + newVelocity);
}
}
}
}
tcpClient HEADER
tcpClient.h:
class TcpClient : public QObject
{
Q_OBJECT
public:
Q_PROPERTY(qreal float_X_velocity READ get_Velocity_X WRITE setVelocity_X NOTIFY velocity_X_Changed)
QML_ELEMENT
public:
Q_INVOKABLE qreal get_Velocity_X() const {return float_X_velocity; }
void setVelocity_X (qreal value);
qreal float_X_velocity; /**/
signals:
void velocity_X_Changed();
TcpClient CPP USAGE VARIABLE
tcpClient.cpp ( CODE USAGE ):
qint32 x_velocity_int = (static_cast<qint32>(data[29]) << 24) |
(static_cast<qint32>(data[28]) << 16) |
(static_cast<qint32>(data[27]) << 8) |
(static_cast<qint32>(data[26]) & 0xff);
float float_X_velocity;
std::memcpy(&float_X_velocity, &x_velocity_int, sizeof(float));
setVelocity_X(static_cast<qreal>(float_X_velocity));
TcpClient CPP USAGE FUNCTION
tcpClient.cpp: (FUNCTION)
void TcpClient::setVelocity_X(qreal value) {
if (!qFuzzyCompare(float_X_velocity, value)) {
if (qIsNaN(value) || !qIsFinite(value)) {
qWarning() << "Invalid velocity value: " << value;
return; // Geçersiz değeri atama
}
float_X_velocity = value;
emit velocity_X_Changed();
qDebug() << "float_X_velocity signal emitted, new value: " << float_X_velocity;
}
}
MAIN.CPP USAGE
main.cpp:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
// OpenGL USAGE
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
// TCP OBJECTS
TcpClient tcpclient;
// UI OBJECTS
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("tcpClient", &tcpclient);
const QUrl url(QStringLiteral("../qml/Screens/splashScreen.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
videoStreamer.startCapture();
return app.exec();
}