n
newbie.works.with.QT24 лютого 2019 р. 10:41

Помогите не могу понять как назначить постоянное считывание из 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;
}
}

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

19
Evgenii Legotckoi
  • 24 лютого 2019 р. 10:47

Добрый день

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

Timer {
  interval: 1000 // Срабатывает раз в секунду
  onTriggered: {
    sprite.frameY = IFSprite.getString()
  }
}
    n
    • 24 лютого 2019 р. 11:58

    Попробовал, не работает отрисовывает по 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;
    }
    }
    
      Evgenii Legotckoi
      • 24 лютого 2019 р. 12:24

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

        n
        • 24 лютого 2019 р. 12:34

        для этого я написал доп программу на 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

          n
          • 24 лютого 2019 р. 12:41

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

            Evgenii Legotckoi
            • 24 лютого 2019 р. 12:55

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

              n
              • 24 лютого 2019 р. 13:08

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

                Evgenii Legotckoi
                • 24 лютого 2019 р. 13:12

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

                #include <QDebug>
                
                int IFSprite::getString()
                {
                    ifstream fin("D:\\Progmator\\input.txt");
                
                
                    int temp;
                    fin >> temp;
                
                
                    fin.close();
                
                    qDebug() << temp; // Можно проверить в консоли, считывается ли вообще что-нибудь реально.
                    return temp;
                }
                
                  n
                  • 24 лютого 2019 р. 13:21

                  поменял в заголовочном на 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";
                  }
                  

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

                    Evgenii Legotckoi
                    • 24 лютого 2019 р. 13:32
                    • (відредаговано)

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

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

                    qDebug()<<temp;
                    
                      n
                      • 24 лютого 2019 р. 13:35

                      я думал что 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

                        n
                        • 24 лютого 2019 р. 13:50

                        если в 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

                          n
                          • 24 лютого 2019 р. 14:03

                          Вот что у меня

                            Evgenii Legotckoi
                            • 24 лютого 2019 р. 14:29

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

                            running: false;
                            

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

                              n
                              • 24 лютого 2019 р. 15:09

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

                                n
                                • 24 лютого 2019 р. 15:09
                                Timer {
                                
                                           interval: 100
                                
                                           repeat: true
                                
                                           running: true
                                
                                
                                
                                           onTriggered: {
                                
                                               sprite.frameY = IFSprite.getString()
                                
                                           }
                                
                                       }
                                
                                
                                
                                  n
                                  • 24 лютого 2019 р. 15:10

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

                                    Evgenii Legotckoi
                                    • 25 лютого 2019 р. 03:36

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

                                    P/S/

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

                                    repeat: true
                                    running: true
                                    

                                      Коментарі

                                      Only authorized users can post comments.
                                      Please, Log in or Sign up
                                      AD

                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                      • Результат:50бали,
                                      • Рейтинг балів-4
                                      m
                                      • molni99
                                      • 26 жовтня 2024 р. 01:37

                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                      • Результат:80бали,
                                      • Рейтинг балів4
                                      m
                                      • molni99
                                      • 26 жовтня 2024 р. 01:29

                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                      • Результат:20бали,
                                      • Рейтинг балів-10
                                      Останні коментарі
                                      ИМ
                                      Игорь Максимов22 листопада 2024 р. 11:51
                                      Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                      Evgenii Legotckoi
                                      Evgenii Legotckoi31 жовтня 2024 р. 14:37
                                      Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                      A
                                      ALO1ZE19 жовтня 2024 р. 08:19
                                      Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                      ИМ
                                      Игорь Максимов05 жовтня 2024 р. 07:51
                                      Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                      d
                                      dblas505 липня 2024 р. 11:02
                                      QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                      Тепер обговоріть на форумі
                                      Evgenii Legotckoi
                                      Evgenii Legotckoi24 червня 2024 р. 15:11
                                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                                      t
                                      tonypeachey115 листопада 2024 р. 06:04
                                      google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                                      NSProject
                                      NSProject04 червня 2022 р. 03:49
                                      Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                                      9
                                      9Anonim25 жовтня 2024 р. 09:10
                                      Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                                      Слідкуйте за нами в соціальних мережах