М
Миша1 декабря 2017 г. 13:38

Ввод кода в проект через окно проекта

Здравствуйте.

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

Вам это нравится? Поделитесь в социальных сетях!

16
BlinCT
  • 1 декабря 2017 г. 13:49

Добрый день.
Вы хотите выполнять измененные методы какие? В каком коде?

    М
    • 1 декабря 2017 г. 13:58

    Изменения расчета. Изменения примерно в таком методе

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    void MainWindow::StrategyCod() //код стратегии
    {
      for (int NMA=5;NMA<1000;NMA=NMA+50)//3-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      {
          //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          int NOpenPosition=0; //число открытых позиций
          double Profit=0;
          double PriceEnter,PriceExit; //цена входа и выхода
          QDate DateOpenPosition; //Дата открытия позиции
          //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        //int NMA=20;//период ma
        QVector<double> SMA(NBar); //ma
        for(long long bar = NMA; bar <NBar; bar++) //ma
        {
            double Summa=0;//summa
            for(long long i=bar-NMA;i<bar;i++)//summa
            {
                Summa=Summa+Close[i];
            }
            SMA[bar]=Summa/NMA;
        }
     
     
        for(long long bar = NMA; bar <NBar; bar++)//основной цикл
        {
         if (NOpenPosition!=0)//2-------------------------------------------------------------------------------------------------------------------------------------------------------
             {
                 if ((Close[bar-1]<SMA[bar-1])&&(Close[bar]>SMA[bar]))
                 {
                     PriceExit=Close[bar]-qrand()%MaxSlippage; //цена закрытия позиции
                     if (PriceEnter>High[bar]){PriceEnter=High[bar];}
                     if (PriceEnter<Low[bar]){PriceEnter=Low[bar];}
                     NOpenPosition=NOpenPosition-1;
                     Profit=PriceEnter-PriceExit-Commission;
                 }
             }
         else//1--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
             {
                 if ((Close[bar-1]>SMA[bar-1])&&(Close[bar]<SMA[bar]))
                 {
                     PriceEnter=Close[bar]+qrand()%MaxSlippage; //цена открытия позиции  //покупка
                     if (PriceEnter>High[bar]){PriceEnter=High[bar];}
                     if (PriceEnter<Low[bar]){PriceEnter=Low[bar];}
                     NOpenPosition=NOpenPosition+1;
                     DateOpenPosition=Date[bar];
                 }
             }
         //1---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        }//2------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    qDebug()<<NMA;
    qDebug()<<Profit;
    qDebug()<<QDateTime::currentDateTime();
      }//3------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    }
      Evgenii Legotckoi
      • 4 декабря 2017 г. 3:11

      C++ - это компилируемый язык, а не интерпретируемый. Его не получится выполнять в качестве скрипта в рамках программы.

      Но то что вы хотите сделать возможно в рамках Qt. Сам я не такого не делал, но функционал имеется.
      Qt имеет функционал по интерпретации JavaScript, то есть фактически можно выполнять как JavaScript, который будет выполнять определённый расчеты, а также даже создавать объекты в рамках программы. Но проблема в том, что это тема ещё более сложная, чем построение графиков.

      Насколько знаю, за такой функционал отвечает QJSEngine в Qt .
        М
        • 4 декабря 2017 г. 13:44

        Еще как вариант, создание библиотеки. Я создал в QT проект библиотеке и в срр написал

        StrategyCod::StrategyCod()
        {
            qDebug()<<"Проверка работы";
        }
        Скажите пожалуйста, что делать дальше с этим проектом? Как его превратить в библиотеку? И как потом корректировать эту библиотеку?
          Evgenii Legotckoi
          • 4 декабря 2017 г. 14:00
          • (ред.)

          Какое создание библиотеки? Я же вам сказал, что C++ - это компилируемый язык. Если даже Вы будете делать вашу стратегию как библиотеку, то Вам придётся тогда при каждой смене менять dll библиотеки в программе. А корректировать придётся точно также, через среду разработки и никак иначе.

          Ваше конечно право... Но звучит довольно непрактично...

          Как его превратить в библиотеку?
          Ну если вы его уже превратили в библиотеку, то подключайте его в свой проект как динамическую библиотеку.

          И как потом корректировать эту библиотеку?
          Вручную в среде разработки, то есть в Qt Creator`e
            М
            • 4 декабря 2017 г. 15:16

            Я подключил библиотеку так

            QLibrary MyLib("C:\\Qt\project\\StrategyCod\\StrategyCod.pro");
                MyLib.load();
            Скажите пожалуйста, как мне воспользоваться функцией StrategyCod::StrategyCod() ?
              Evgenii Legotckoi
              • 4 декабря 2017 г. 15:22

              Нужно пометить эту функцию как экспортируемую.

              А вообще, есть вполне стандартные средства для подключения динамических библиотек.
              Сделайте для начала просто какой-нибудь проект в виде библиотеки. Там будет файл *_global.h в котором будет макрос, чтобы помечать методы и файлы как экспортируемые. Тогда их можно будет применять в рамках других проектов и библиотек.
                М
                • 4 декабря 2017 г. 15:36

                У меня такой есть, вот его содержимое.

                #ifndef STRATEGYCOD_GLOBAL_H
                #define STRATEGYCOD_GLOBAL_H

                #include <QtCore/qglobal.h>

                #if defined(STRATEGYCOD_LIBRARY)
                #  define STRATEGYCODSHARED_EXPORT Q_DECL_EXPORT
                #else
                #  define STRATEGYCODSHARED_EXPORT Q_DECL_IMPORT
                #endif

                #endif // STRATEGYCOD_GLOBAL_H

                Скажите пожалуйста, как в нем пометить мою функцию?
                  Evgenii Legotckoi
                  • 4 декабря 2017 г. 15:40

                  У вас функция является методом класса, поэтому нужно пометить просто сам класс.

                  class STRATEGYCODSHARED_EXPORT StrategyCod 
                  {
                  
                  }
                  Тогда этот класс будет доступен в других проектах при подключении данного проекта как библиотеки.
                    М
                    • 4 декабря 2017 г. 16:02

                    У меня уже написано так в хедере класса

                    class STRATEGYCODSHARED_EXPORT StrategyCod
                    {

                    public:
                        StrategyCod();
                    };

                    #endif // STRATEGYCOD_H
                    Но как воспользоваться этой функцией в проекте?
                      Evgenii Legotckoi
                      • 4 декабря 2017 г. 16:19
                      • (ред.)

                      Тогда написать сигнатуру функции и вызвать её через метод resolve .

                        М
                        • 4 декабря 2017 г. 17:24

                        Сделал так, компилируется, но при запуске вырубается

                        QLibrary MyLib("C:\\Qt\project\\StrategyCod\\StrategyCod.pro"); 
                            typedef void (*MyPrototype)();
                            MyPrototype myFunction = (MyPrototype) MyLib.resolve("StrategyCod");
                            myFunction();
                          М
                          • 4 декабря 2017 г. 18:55

                          Вместо файла про в пути указал файл длл, но то же не работает

                            М
                            • 4 декабря 2017 г. 21:10

                            оказалось что функцию вне класса оно считывает из библиотеки хорошо

                              Evgenii Legotckoi
                              • 5 декабря 2017 г. 3:07

                              При использовании класса из библиотеки нельзя использовать отдельно его метод. Если только это не статический метод класса. Но в данном случае нужно обращаться к методу через имя класса.

                                М
                                • 5 декабря 2017 г. 13:22

                                Спасибо

                                  Комментарии

                                  Только авторизованные пользователи могут публиковать комментарии.
                                  Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                  Ua

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

                                  • Результат:84баллов,
                                  • Очки рейтинга4
                                  Ua

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

                                  • Результат:42баллов,
                                  • Очки рейтинга-8
                                  ОК

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

                                  • Результат:47баллов,
                                  • Очки рейтинга-6
                                  Последние комментарии
                                  ИМ
                                  Игорь Максимов22 ноября 2024 г. 21:51
                                  Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                  Evgenii Legotckoi
                                  Evgenii Legotckoi31 октября 2024 г. 23:37
                                  Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                  A
                                  ALO1ZE19 октября 2024 г. 17:19
                                  Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                  ИМ
                                  Игорь Максимов5 октября 2024 г. 16:51
                                  Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                  d
                                  dblas55 июля 2024 г. 20:02
                                  QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                  Сейчас обсуждают на форуме
                                  f
                                  firstlunoxod15 февраля 2025 г. 13:46
                                  Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                                  Дмитрий
                                  Дмитрий3 февраля 2025 г. 16:24
                                  Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                                  NW
                                  Nayo Wai30 января 2025 г. 19:22
                                  не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                                  n
                                  nkly3 января 2025 г. 12:52
                                  Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                  M
                                  Marsel17 августа 2023 г. 0:26
                                  OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                                  Следите за нами в социальных сетях