М
МишаDec. 1, 2017, 1:38 p.m.

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

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

Можно в QT вводить код через виджет и выполнять измененные методы?
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.

Do you like it? Share on social networks!

16
BlinCT
  • Dec. 1, 2017, 1:49 p.m.

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

    М
    • Dec. 1, 2017, 1:58 p.m.

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

    #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
      • Dec. 4, 2017, 3:11 a.m.

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

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

      Насколько знаю, за такой функционал отвечает QJSEngine в Qt .
        М
        • Dec. 4, 2017, 1:44 p.m.

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

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

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

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

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

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

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

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

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

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

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

                #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
                  • Dec. 4, 2017, 3:40 p.m.

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

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

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

                    class STRATEGYCODSHARED_EXPORT StrategyCod
                    {

                    public:
                        StrategyCod();
                    };

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

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

                        М
                        • Dec. 4, 2017, 5:24 p.m.

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

                        QLibrary MyLib("C:\\Qt\project\\StrategyCod\\StrategyCod.pro"); 
                            typedef void (*MyPrototype)();
                            MyPrototype myFunction = (MyPrototype) MyLib.resolve("StrategyCod");
                            myFunction();
                          М
                          • Dec. 4, 2017, 6:55 p.m.

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

                            М
                            • Dec. 4, 2017, 9:10 p.m.

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

                              Evgenii Legotckoi
                              • Dec. 5, 2017, 3:07 a.m.

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

                                М
                                • Dec. 5, 2017, 1:22 p.m.

                                Спасибо

                                  Comments

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

                                  Qt - Test 001. Signals and slots

                                  • Result:84points,
                                  • Rating points4
                                  Ua

                                  Qt - Test 001. Signals and slots

                                  • Result:42points,
                                  • Rating points-8
                                  ОК

                                  Qt - Test 001. Signals and slots

                                  • Result:47points,
                                  • Rating points-6
                                  Last comments
                                  ИМ
                                  Игорь МаксимовNov. 22, 2024, 9:51 p.m.
                                  Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                  Evgenii Legotckoi
                                  Evgenii LegotckoiOct. 31, 2024, 11:37 p.m.
                                  Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                  A
                                  ALO1ZEOct. 19, 2024, 5:19 p.m.
                                  Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                  ИМ
                                  Игорь МаксимовOct. 5, 2024, 4:51 p.m.
                                  Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                  d
                                  dblas5July 5, 2024, 8:02 p.m.
                                  QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                  Now discuss on the forum
                                  f
                                  firstlunoxodFeb. 15, 2025, 1:46 p.m.
                                  Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                                  Дмитрий
                                  ДмитрийFeb. 3, 2025, 4:24 p.m.
                                  Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                                  NW
                                  Nayo WaiJan. 30, 2025, 7:22 p.m.
                                  не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                                  n
                                  nklyJan. 3, 2025, 12:52 p.m.
                                  Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                  M
                                  MarselAug. 17, 2023, 12:26 a.m.
                                  OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                                  Follow us in social networks