n
newbie.works.with.QTАқп. 24, 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, 1:08 Т.Қ.

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

                Evgenii Legotckoi
                • Ақп. 24, 2019, 1: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, 1: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, 1:32 Т.Қ.
                    • (өңделген)

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

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

                    qDebug()<<temp;
                    
                      n
                      • Ақп. 24, 2019, 1: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, 1: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

                          Evgenii Legotckoi
                          • Ақп. 24, 2019, 2:29 Т.Қ.

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

                          running: false;
                          

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

                            n
                            • Ақп. 24, 2019, 3:09 Т.Қ.

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

                              n
                              • Ақп. 24, 2019, 3:09 Т.Қ.
                              Timer {
                              
                                         interval: 100
                              
                                         repeat: true
                              
                                         running: true
                              
                              
                              
                                         onTriggered: {
                              
                                             sprite.frameY = IFSprite.getString()
                              
                                         }
                              
                                     }
                              
                              
                              
                                n
                                • Ақп. 24, 2019, 3:10 Т.Қ.

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

                                  Evgenii Legotckoi
                                  • Ақп. 25, 2019, 3:36 Т.Ж.

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

                                  P/S/

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

                                  repeat: true
                                  running: true
                                  

                                    Пікірлер

                                    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                    Кіріңіз немесе Тіркеліңіз
                                    OI
                                    • Ora Iro
                                    • Жел. 24, 2024, 6:38 Т.Ж.

                                    C++ - Тест 001. Первая программа и типы данных

                                    • Нәтиже:40ұпай,
                                    • Бағалау ұпайлары-8
                                    AD

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

                                    • Нәтиже:50ұпай,
                                    • Бағалау ұпайлары-4
                                    m
                                    • molni99
                                    • Қаз. 26, 2024, 1:37 Т.Ж.

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

                                    • Нәтиже:80ұпай,
                                    • Бағалау ұпайлары4
                                    Соңғы пікірлер
                                    ИМ
                                    Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                                    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                    Evgenii Legotckoi
                                    Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                    A
                                    ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                                    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                    ИМ
                                    Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                    d
                                    dblas5Шілде 5, 2024, 11:02 Т.Ж.
                                    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                    Енді форумда талқылаңыз
                                    n
                                    nklyҚаң. 3, 2025, 2:52 Т.Ж.
                                    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                    AW
                                    Ayden WatkinsҚаң. 2, 2025, 12:09 Т.Ж.
                                    Why Paying for a Research Paper Can Be a Smart Choice Writing a research paper can be a daunting task, especially when faced with tight deadlines, complex topics, or a lack of resources. For many students, paying for a research paper is a practical…
                                    p
                                    pimacontrols85Жел. 31, 2024, 9:39 Т.Ж.
                                    Finding the Right Rittal Small Enclosure for Your Needs Rittal is a leading manufacturer of enclosures for industrial and IT applications. Their small enclosures offer a compact and reliable solution for a wide range of needs, from housing electronic…
                                    Donald Randolph
                                    Donald RandolphЖел. 30, 2024, 2:59 Т.Ж.
                                    Personal Injury lawyer Santa Monica As an experienced Santa Monica personal injury lawyer, Donald C. Randolph has recovered over $100 Million in verdicts and settlements for our clients. In severe injury cases, this compensation i…
                                    Nirvana Yoga School
                                    Nirvana Yoga SchoolЖел. 30, 2024, 5:13 Т.Ж.
                                    OAuth2.0 через VK, получение email Nirvana Yoga School is one of the most trusted and reputed traditional Rishikesh yoga courses , India certified by Yoga Alliance, USA. We aim to spread traditional yoga teachings so t…

                                    Бізді әлеуметтік желілерде бақылаңыз