n
Feb. 24, 2019, 3:41 p.m.

Помогите не могу понять как назначить постоянное считывание из txt

Qt

Здраствуйте подскажите пожалуйста:

значение из C++ передаётся в qml, но только один раз при запуске, а мне нужно постоянно проверять переменную из txt.

Вот проект ifsprite.h:

#ifndef IFSPRITE_H
#define IFSPRITE_H

#include <QObject>

class IFSprite : public QObject
{
     Q_OBJECT
public:
    IFSprite();
    Q_INVOKABLE QString getString();

};

#endif // IFSPRITE_H

ifsprite.cpp

#include "ifsprite.h"
#include <fstream>
#include <iostream>
#include <cstring>

using namespace std;

IFSprite::IFSprite()
{

}

QString IFSprite::getString()
{
    ifstream fin("D:\\Progmator\\input.txt");


    int temp;
    fin >> temp;


    fin.close();

    return QString::number(temp);
}

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

#include "ifsprite.h"


int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    IFSprite _sprite;

    QQmlContext *ctx = engine.rootContext();
    ctx->setContextProperty("IFSprite",&_sprite);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2

Window {
    flags: Qt.ToolTip | Qt.FramelessWindowHint | Qt.WA_TintedBackground |Qt.WindowStaysOnTopHint

    color: "#00000000"
visible: true
width: 100
height: 460
x: (Screen.width - width)
y: (Screen.height - height)
Rectangle {
    anchors.fill: parent
    color: "transparent"
}
AnimatedSprite {
    id: sprite;
    width: 100;
    height: 100;
    anchors.centerIn: parent;
    source: "Donald.png"
    frameX: 0
    frameY: IFSprite.getString();
    frameRate: 18;
    frameWidth: 100
    frameHeight: 100
    frameCount: 6
    running: folse;
}
}

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
19

Добрый день

Таймер добавьте в QML файл

Timer {
  interval: 1000 // Срабатывает раз в секунду
  onTriggered: {
    sprite.frameY = IFSprite.getString()
  }
}
0
n

Попробовал, не работает отрисовывает по Y=0 игнорируя значения

AnimatedSprite {

    id: sprite;
    width: 100;
    height: 100;
    anchors.centerIn: parent;
    source: "Donald.png"
    frameX: 0

    Timer {
      interval: 1000 // Срабатывает раз в секунду
      onTriggered: {
        sprite.frameY = IFSprite.getString()
      }


    }
    frameRate: 18;
    frameWidth: 100
    frameHeight: 100
    frameCount: 6
    running: folse;
}
}
0

а вы вообще уверены, что у вас в txt файле хоть что-то меняется? я вот очень сильно сомневаюсь.

0
n

для этого я написал доп программу на DevC++

#include <fstream> 
#include <iostream> 
#include <cstring>

using namespace std;

int main()
{

    ifstream fin("input.txt");// там 200
    ofstream fout("D:\\Progmator\\input.txt");

    int temp; // ?????????? ??????????
    fin >> temp;
    cout << temp;
    fout << temp; // ?????????? ?????? ? ???? out.put.txt

    fin.close();
    fout.close();

    return 0;
}

проверял значение в блокноте меняется, а спрайт так и остаётся по Y=0

0
n

изначально в "D:\Progmator\input.txt" лежит значение 100 а он просто игнорирует

0

возвращайте int вместо QString,

0
n

Пожалуйта, напишите строку, просто не понимаю как (у меня выдаёт ошибку).

0

Если у вас там правильно считывается int, то вот так должно быть правильно.

#include <QDebug>

int IFSprite::getString()
{
    ifstream fin("D:\\Progmator\\input.txt");


    int temp;
    fin >> temp;


    fin.close();

    qDebug() << temp; // Можно проверить в консоли, считывается ли вообще что-нибудь реально.
    return temp;
}
0
n

поменял в заголовочном на int и сделал как вы писали

int IFSprite::getString()
{
    ifstream fin("D:\\Progmator\\input.txt");


    int temp;
    fin >> temp;


    fin.close();

    qDebug()<<temp; // Можно проверить в консоли, считывается ли вообще что-нибудь реально.
    return temp;
}

но Y так и остался =0

поменял на свой изначальный вариант:

QString IFSprite::getString()
{
    ifstream fin("D:\\Progmator\\input.txt");


    int temp;
    fin >> temp;


    fin.close();

    return "100";
}

всёравно игнорирует

0

Вы понимаете, что frameY - это свойство с типом данных int, и подставлять туда QString по меньшей мере странно?

Что выводит qDebug?

qDebug()<<temp;
0
n

я думал что QDebag покажет результат в выводе приложения но там только:

20:34:54: Запускается D:\Material\TRAN\build-untitled30-Desktop_Qt_5_12_0_MinGW_64_bit2-Release\release\untitled30.exe... qrc:/main.qml:58: ReferenceError: folse is not defined 20:35:11: D:/Material/TRAN/build-untitled30-Desktop_Qt_5_12_0_MinGW_64_bit2-Release/release/untitled30.exe завершился с кодом 0

0
n

если в qml:

Timer {
  interval: 1000 // Срабатывает раз в секунду
  onTriggered: {
    sprite.frameY = IFSprite.getString()
  }
}

то значение qDebag не выводит

и пишет в выводе то что писал я

однако если в qml:

 frameY : IFSprite.getString()

то спрайт на правильном Y и текс в выводе следущий:

20:50:42: Запускается D:\Material\TRAN\build-untitled30-Desktop_Qt_5_12_0_MinGW_64_bit2-Release\release\untitled30.exe... 100 qrc:/main.qml:52: ReferenceError: folse is not defined 20:50:49: D:/Material/TRAN/build-untitled30-Desktop_Qt_5_12_0_MinGW_64_bit2-Release/release/untitled30.exe завершился с кодом 0

0

Первое: ошибка в AnimatedSprited

running: false;

Второе: сдаётся мне, что у вас там ничего в txt файле не меняется. Я не вижу причин, чтобы там что-то изменялось.

0
n

Pfhf,jnfkj!!!! Заработало!!!!!

0
n
Timer {

           interval: 100

           repeat: true

           running: true



           onTriggered: {

               sprite.frameY = IFSprite.getString()

           }

       }


0
n

2 месяця просидел на одном месте но сделал! спасибо вам за всё! спасибо за помощь и терпение!

0

Пожалуйста. Будут ещё вопросы, задавайте на форуме. Кроме меня здесь есть другие опытные программисты, хоть они и скромничают.

P/S/

Мда, что-то я тупанул вот с этими строчками. Забыл про них

repeat: true
running: true
0

Comments

Only authorized users can post comments.
Please, Log in or Sign up
TT
June 13, 2019, 7:01 p.m.
Taimoor Tanweer

C++ - Test 001. The first program and data types

  • Result:66points,
  • Rating points-1
TT
June 13, 2019, 6:51 p.m.
Taimoor Tanweer

C++ - Test 002. Constants

  • Result:75points,
  • Rating points2
ВМ
June 13, 2019, 12:30 p.m.
Ваня Мороз

C++ - Test 001. The first program and data types

  • Result:100points,
  • Rating points10
Last comments
i
June 17, 2019, 6:10 a.m.
ingenfly

Только по осям xAxis2, уAxis2 значения начинаются с 0. Почему-то xAxis2 и xAxis не синхронизированы по данным. Ну и QCustomPlot последний.
June 16, 2019, 8:21 p.m.
Евгений Легоцкой

Добрый день. Ну точно также добавляете ту же самую информацию на ось xAxis2, только добавляете другое форматирование customPlot->xAxis2->setDateTimeFormat("hh:mm"); если я ...
EF
June 14, 2019, 1:56 p.m.
Egor Fomin

Спасибо за ваш ответ, у меня получилось реализовать это. Тем не менее появилась другая проблема, поэтому опять надеюсь на вашу помощь. Скажем, я уже выставил точки и они соеденены. Когда я нач...
d
June 13, 2019, 2:47 p.m.
damix

Можно классу, который описывает точку, добавить сигнал, который подавать (emit), когда точка перемещается (переопределить mouseMoveEvent или mouseReleaseEvent). Так вот эти сигналы у каждой из...
i
June 13, 2019, 2:09 p.m.
ingenfly

Здравствайте! Подскажите, пожалуйста: customPlot->xAxis2->setTickLabels(true); //Здесь включается отображение данных на оси xAxis2. а можно как-то продублировать информацию cus...
Now discuss on the forum
I
June 19, 2019, 1:41 p.m.
Intruder

Всем добрый день. При разборе XML файла наткнулся на тег вот такого плана: <TagName attribute1="value1" attribute2="value2" /> При попытке проверить на наличие такого элеме...
June 19, 2019, 12:55 p.m.
Михаиллл

Скажите пожалуйста, как его в таком случае перемещать и удалять?
June 18, 2019, 7:50 p.m.
Дмитрий

Большое спасибо! SDK заработал.К сожалению удалось продвинутся только на один шаг. При сборке чистого проекта NDK выдаёт следующие ошибки C:\Android\ndk-bundle/toolchains/arm-linux-andr...
June 18, 2019, 4:59 p.m.
Михаиллл

Добрый день.В этом учебнике представлен код INSTALLED_APPS = ( ... 'rest_framework', 'snippets.apps.SnippetsConfig',) На строчке 'snippets.apps.SnippetsConf...
June 18, 2019, 2:24 p.m.
Михаиллл

Спасибо, работает.Послушаю вашего совета.
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB