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
                                      sf

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

                                      • Результат:90бали,
                                      • Рейтинг балів8
                                      МВ

                                      Qt - Тест 001. Сигналы и слоты

                                      • Результат:68бали,
                                      • Рейтинг балів-1
                                      ЛС

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

                                      • Результат:53бали,
                                      • Рейтинг балів-4
                                      Останні коментарі
                                      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 аналогично. Могу предположить, что из-за более новой верси…
                                      k
                                      kmssr08 лютого 2024 р. 18:43
                                      Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                      АК
                                      Анатолий Кононенко05 лютого 2024 р. 01:50
                                      Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                      Тепер обговоріть на форумі
                                      J
                                      JacobFib17 жовтня 2024 р. 03:27
                                      добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                                      ИМ
                                      Игорь Максимов03 жовтня 2024 р. 04:05
                                      Реализация навигации по разделам Спасибо Евгений!
                                      JW
                                      Jhon Wick01 жовтня 2024 р. 15:52
                                      Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                                      КГ
                                      Кирилл Гусарев27 вересня 2024 р. 09:09
                                      Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                                      F
                                      Fynjy22 липня 2024 р. 04:15
                                      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

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