Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Installation and Deployment
  4. How to run a C++ file from Qt?

How to run a C++ file from Qt?

Scheduled Pinned Locked Moved Unsolved Installation and Deployment
21 Posts 4 Posters 5.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mayathebee
    wrote on last edited by
    #1

    Hello! I want to state at the very beginning that I am a complete beginner in the Qt programming. A similiar problem was posted a couple of years ago, but it didn't help me a lot. I'm making a GUI in which a person will be able to choose a C++ file and a .txt file which will be sent to the C++ file as an argument (the main function in the C++ file receives a number of arguments and a list of arguments). What I'm having problem with is understanding how to run the chosen C++ file and then sending an argument to it in Qt. I've found this piece of code but it didn't work and I'm also not sure if the class QProcess is what I should be using. I'll be grateful for any help!

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      First thing: Qt programming is C++ programming. Qt is not a language it's a big C++ framework.

      If by C++ file, you mean a source file, then you are describing an IDE. You will need a compiler to build your application and a linker before you can run it with the parameters you want.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • M Offline
        M Offline
        mayathebee
        wrote on last edited by
        #3

        Thank you for the correction. I added that file as a resource file, not as a source file. It seems like I cannot add it as a source file. I do have MinGW 5.3.0 32 bit installed and I'm not exactly sure how to use a linker.

        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #4

          The thing that is not clear is: why do you want to have that C++ file in plain text within your application ?

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mayathebee
            wrote on last edited by
            #5

            I'm not really sure, I thought it looked neater that way. But if I remove it from the project, how will that help solve the problem?

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by
              #6

              Then the next question: why not integrate that C++ file functionality in your application rather than having it outside ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mayathebee
                wrote on last edited by
                #7

                I'll try to do that and I'll come back later if I don't figure out the solution.

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mayathebee
                  wrote on last edited by
                  #8

                  I'm stuck. This is what is written in Application Output after running my project:
                  Starting C:\build-project-Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\project.exe...
                  Greska pri ucitavanju datoteke1.C:\build-project-Desktop_Qt_5_8_0_MinGW_32bit-Debug\debug\project.exe exited with code 0.
                  'Greska pri ucitavanju datoteke' translated to English is something like 'error while loading the file'.

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    Which file ?
                    What is the related code ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mayathebee
                      wrote on last edited by
                      #10

                      I guess the first file in my Source dirctory because of the 'datoteke1' meaning file 1. I don't understand why it's not separated. Anyway, that file is the file I added to Source directory. I can compile and run it outside of Qt, and I can build it in Qt. It has 731 lines so I'm not sure if I should post it in here.

                      jsulmJ 1 Reply Last reply
                      0
                      • M mayathebee

                        I guess the first file in my Source dirctory because of the 'datoteke1' meaning file 1. I don't understand why it's not separated. Anyway, that file is the file I added to Source directory. I can compile and run it outside of Qt, and I can build it in Qt. It has 731 lines so I'm not sure if I should post it in here.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #11

                        @mayathebee Can you show your pro file?

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mayathebee
                          wrote on last edited by mayathebee
                          #12
                          
                          QT       += core gui
                          
                          greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                          
                          TARGET = najnoviji
                          TEMPLATE = app
                          
                          DEFINES += QT_DEPRECATED_WARNINGS
                          
                          SOURCES += main.cpp\
                                  mainwindow.cpp \
                              kod.cpp
                          
                          HEADERS  += mainwindow.h
                          
                          FORMS    += mainwindow.ui
                          
                          RESOURCES += \
                              resources.qrc
                          

                          Maybe the first file in Source is main.cpp, not kod.cpp.

                          jsulmJ 1 Reply Last reply
                          0
                          • M mayathebee
                            
                            QT       += core gui
                            
                            greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                            
                            TARGET = najnoviji
                            TEMPLATE = app
                            
                            DEFINES += QT_DEPRECATED_WARNINGS
                            
                            SOURCES += main.cpp\
                                    mainwindow.cpp \
                                kod.cpp
                            
                            HEADERS  += mainwindow.h
                            
                            FORMS    += mainwindow.ui
                            
                            RESOURCES += \
                                resources.qrc
                            

                            Maybe the first file in Source is main.cpp, not kod.cpp.

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #13

                            @mayathebee said in How to run a C++ file from Qt?:

                            kod.cpp

                            is this the file you added?
                            So, your app is building but doesn't start?

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            M 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @mayathebee said in How to run a C++ file from Qt?:

                              kod.cpp

                              is this the file you added?
                              So, your app is building but doesn't start?

                              M Offline
                              M Offline
                              mayathebee
                              wrote on last edited by
                              #14

                              Yes. I think the app is building correctly because there are no errors. When I run it, the messagges that I wrote before show in Application Output.

                              jsulmJ 1 Reply Last reply
                              0
                              • M mayathebee

                                Yes. I think the app is building correctly because there are no errors. When I run it, the messagges that I wrote before show in Application Output.

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                @mayathebee Start your app in debug mode and post the stack trace here.
                                Also you could post here the content of main.cpp and mainwindow.* maybe we can see what you're doing wrongly.

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  mayathebee
                                  wrote on last edited by mayathebee
                                  #16

                                  Debugging starts
                                  Greska pri ucitavanju datoteke1.Debugging has finished

                                  main.cpp

                                  #include "mainwindow.h"
                                  #include <QApplication>
                                  
                                  int main(int argc, char *argv[])
                                  {
                                      QApplication a(argc, argv);
                                      MainWindow w;
                                      w.show();
                                  
                                      return a.exec();
                                  }
                                  

                                  mainwindow.cpp

                                  #include "mainwindow.h"
                                  #include "ui_mainwindow.h"
                                  #include <QDir>
                                  #include <QDebug>
                                  #include <QMessageBox>
                                  #include <QProcess>
                                  #include <QString>
                                  #include <QStringList>
                                  #include <QDesktopServices>
                                  #include <QUrl>
                                  
                                  MainWindow::MainWindow(QWidget *parent) :
                                      QMainWindow(parent),
                                      ui(new Ui::MainWindow)
                                  {
                                      ui->setupUi(this);
                                  
                                      ui->comboBox->addItem("Nije odabran program.");
                                      QDir dir(":/");
                                      foreach (QFileInfo var, dir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                          if(var.suffix()=="cpp")
                                              ui->comboBox->addItem(var.fileName());
                                  
                                      ui->comboBox_2->addItem("Nije odabrana datoteka.");
                                      foreach (QFileInfo var, dir.entryList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                          if(var.suffix()=="txt" && var.baseName()!="podaci" && var.baseName()!="izlaz")
                                              ui->comboBox_2->addItem(var.fileName());
                                  }
                                  
                                  MainWindow::~MainWindow()
                                  {
                                      delete ui;
                                  }
                                  
                                  void MainWindow::on_pushButton_clicked()
                                  {
                                      QFile file("C:/najnoviji/podaci.txt"); //treba promijeniti ove puteve
                                      if (!file.open(QFile::WriteOnly | QFile::Text))
                                          QMessageBox::warning(this, "title", "File not open.");
                                      else{
                                          QTextStream out(&file);
                                          QString text = ui->comboBox->currentText()+"\n"+ui->comboBox_2->currentText();
                                          out << text;
                                          file.flush();
                                          file.close();
                                      }
                                  
                                      QString fileName = ui->comboBox->currentText();
                                      fileName=fileName.section(".",0,0);
                                      QDesktopServices::openUrl(QUrl("file:///C:/najnoviji/"+fileName+".exe",QUrl::TolerantMode));
                                  
                                      /*
                                      QString program = "C:/bla/Program/kod1.cpp";
                                      QStringList arguments;
                                      arguments << ui->comboBox_2->currentText();
                                      QProcess *myProcess = new QProcess(this);
                                      myProcess->start(program, arguments);
                                      //normalan izlaz
                                      //exitcode prazno
                                      */
                                  
                                      QFile file2("C:/najnoviji/izlaz.txt");
                                      if (!file2.open(QFile::ReadOnly | QFile::Text))
                                          QMessageBox::warning(this, "title", "File not open.");
                                      else{
                                          ui->lineEdit->setText("");
                                          QTextStream in(&file2);
                                          QString text = in.readLine();
                                          ui->lineEdit->setText(text);
                                          // ne zaboravi isprazniti datoteku izlaz.txt
                                          file2.close();
                                      }
                                  }
                                  
                                  
                                  JonBJ jsulmJ 2 Replies Last reply
                                  0
                                  • M mayathebee

                                    Debugging starts
                                    Greska pri ucitavanju datoteke1.Debugging has finished

                                    main.cpp

                                    #include "mainwindow.h"
                                    #include <QApplication>
                                    
                                    int main(int argc, char *argv[])
                                    {
                                        QApplication a(argc, argv);
                                        MainWindow w;
                                        w.show();
                                    
                                        return a.exec();
                                    }
                                    

                                    mainwindow.cpp

                                    #include "mainwindow.h"
                                    #include "ui_mainwindow.h"
                                    #include <QDir>
                                    #include <QDebug>
                                    #include <QMessageBox>
                                    #include <QProcess>
                                    #include <QString>
                                    #include <QStringList>
                                    #include <QDesktopServices>
                                    #include <QUrl>
                                    
                                    MainWindow::MainWindow(QWidget *parent) :
                                        QMainWindow(parent),
                                        ui(new Ui::MainWindow)
                                    {
                                        ui->setupUi(this);
                                    
                                        ui->comboBox->addItem("Nije odabran program.");
                                        QDir dir(":/");
                                        foreach (QFileInfo var, dir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                            if(var.suffix()=="cpp")
                                                ui->comboBox->addItem(var.fileName());
                                    
                                        ui->comboBox_2->addItem("Nije odabrana datoteka.");
                                        foreach (QFileInfo var, dir.entryList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                            if(var.suffix()=="txt" && var.baseName()!="podaci" && var.baseName()!="izlaz")
                                                ui->comboBox_2->addItem(var.fileName());
                                    }
                                    
                                    MainWindow::~MainWindow()
                                    {
                                        delete ui;
                                    }
                                    
                                    void MainWindow::on_pushButton_clicked()
                                    {
                                        QFile file("C:/najnoviji/podaci.txt"); //treba promijeniti ove puteve
                                        if (!file.open(QFile::WriteOnly | QFile::Text))
                                            QMessageBox::warning(this, "title", "File not open.");
                                        else{
                                            QTextStream out(&file);
                                            QString text = ui->comboBox->currentText()+"\n"+ui->comboBox_2->currentText();
                                            out << text;
                                            file.flush();
                                            file.close();
                                        }
                                    
                                        QString fileName = ui->comboBox->currentText();
                                        fileName=fileName.section(".",0,0);
                                        QDesktopServices::openUrl(QUrl("file:///C:/najnoviji/"+fileName+".exe",QUrl::TolerantMode));
                                    
                                        /*
                                        QString program = "C:/bla/Program/kod1.cpp";
                                        QStringList arguments;
                                        arguments << ui->comboBox_2->currentText();
                                        QProcess *myProcess = new QProcess(this);
                                        myProcess->start(program, arguments);
                                        //normalan izlaz
                                        //exitcode prazno
                                        */
                                    
                                        QFile file2("C:/najnoviji/izlaz.txt");
                                        if (!file2.open(QFile::ReadOnly | QFile::Text))
                                            QMessageBox::warning(this, "title", "File not open.");
                                        else{
                                            ui->lineEdit->setText("");
                                            QTextStream in(&file2);
                                            QString text = in.readLine();
                                            ui->lineEdit->setText(text);
                                            // ne zaboravi isprazniti datoteku izlaz.txt
                                            file2.close();
                                        }
                                    }
                                    
                                    
                                    JonBJ Online
                                    JonBJ Online
                                    JonB
                                    wrote on last edited by JonB
                                    #17

                                    @mayathebee
                                    So far as I can see, this has nothing to do with what the program tries to do in itself, it's to do with the building & running of the program.

                                    Try an "empty" program. Does it do the same, regardless of content? Are your compilation flags the same in Qt as outside? Are your run-time libraries paths different? Can you place a debug breakpoint on the very first line? Is the 32-bitness to do with the issue?

                                    1 Reply Last reply
                                    0
                                    • M mayathebee

                                      Debugging starts
                                      Greska pri ucitavanju datoteke1.Debugging has finished

                                      main.cpp

                                      #include "mainwindow.h"
                                      #include <QApplication>
                                      
                                      int main(int argc, char *argv[])
                                      {
                                          QApplication a(argc, argv);
                                          MainWindow w;
                                          w.show();
                                      
                                          return a.exec();
                                      }
                                      

                                      mainwindow.cpp

                                      #include "mainwindow.h"
                                      #include "ui_mainwindow.h"
                                      #include <QDir>
                                      #include <QDebug>
                                      #include <QMessageBox>
                                      #include <QProcess>
                                      #include <QString>
                                      #include <QStringList>
                                      #include <QDesktopServices>
                                      #include <QUrl>
                                      
                                      MainWindow::MainWindow(QWidget *parent) :
                                          QMainWindow(parent),
                                          ui(new Ui::MainWindow)
                                      {
                                          ui->setupUi(this);
                                      
                                          ui->comboBox->addItem("Nije odabran program.");
                                          QDir dir(":/");
                                          foreach (QFileInfo var, dir.entryInfoList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                              if(var.suffix()=="cpp")
                                                  ui->comboBox->addItem(var.fileName());
                                      
                                          ui->comboBox_2->addItem("Nije odabrana datoteka.");
                                          foreach (QFileInfo var, dir.entryList(QDir::NoDotAndDotDot|QDir::AllEntries))
                                              if(var.suffix()=="txt" && var.baseName()!="podaci" && var.baseName()!="izlaz")
                                                  ui->comboBox_2->addItem(var.fileName());
                                      }
                                      
                                      MainWindow::~MainWindow()
                                      {
                                          delete ui;
                                      }
                                      
                                      void MainWindow::on_pushButton_clicked()
                                      {
                                          QFile file("C:/najnoviji/podaci.txt"); //treba promijeniti ove puteve
                                          if (!file.open(QFile::WriteOnly | QFile::Text))
                                              QMessageBox::warning(this, "title", "File not open.");
                                          else{
                                              QTextStream out(&file);
                                              QString text = ui->comboBox->currentText()+"\n"+ui->comboBox_2->currentText();
                                              out << text;
                                              file.flush();
                                              file.close();
                                          }
                                      
                                          QString fileName = ui->comboBox->currentText();
                                          fileName=fileName.section(".",0,0);
                                          QDesktopServices::openUrl(QUrl("file:///C:/najnoviji/"+fileName+".exe",QUrl::TolerantMode));
                                      
                                          /*
                                          QString program = "C:/bla/Program/kod1.cpp";
                                          QStringList arguments;
                                          arguments << ui->comboBox_2->currentText();
                                          QProcess *myProcess = new QProcess(this);
                                          myProcess->start(program, arguments);
                                          //normalan izlaz
                                          //exitcode prazno
                                          */
                                      
                                          QFile file2("C:/najnoviji/izlaz.txt");
                                          if (!file2.open(QFile::ReadOnly | QFile::Text))
                                              QMessageBox::warning(this, "title", "File not open.");
                                          else{
                                              ui->lineEdit->setText("");
                                              QTextStream in(&file2);
                                              QString text = in.readLine();
                                              ui->lineEdit->setText(text);
                                              // ne zaboravi isprazniti datoteku izlaz.txt
                                              file2.close();
                                          }
                                      }
                                      
                                      
                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #18

                                      @mayathebee You should at least try to debug step by step. Put a break point at

                                      ui->setupUi(this);
                                      

                                      and then execute step by step to see where it crashes.

                                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      0
                                      • M Offline
                                        M Offline
                                        mayathebee
                                        wrote on last edited by
                                        #19

                                        Sorry, I don't know what was wrong with me, the 'Greska pri ucitavanju datoteke' was from file kod.cpp and I think it was happening because I didn't give the absoulte path of files to functions open. Here is the code of kod.cpp (you can search for 'Greska' and you'll see where I would write it).

                                        #include <stdio.h>
                                        #include <stdlib.h>
                                        #include <iostream>
                                        #include <sstream>
                                        #include <fstream>
                                        #include <string.h>
                                        #include <time.h>
                                        #include <ctime>
                                        #include <vector>
                                        #include <string.h>
                                        
                                        using namespace std;
                                        
                                        string ime_datoteke;
                                        int **bridovi;
                                        int *klika01;
                                        int *koliko_puta_nesusjed;
                                        int *pozicija;
                                        int *tabu_lista;
                                        int broj_vrhova=0;
                                        int dubina;
                                        int *broj_nesusjeda;
                                        int **matrica;
                                        int *klika;
                                        int len;
                                        int length;
                                        int *kandidati_za_add;
                                        int *kandidati_za_swap;
                                        int *tezine;
                                        int *nije_susjed;
                                        int duljina1;
                                        int duljina2;
                                        int *niz1;
                                        int *niz2;
                                        int iteracija;
                                        int tabu_tenur = 7;
                                        int tezina_klike;
                                        int najbolja_tezina;
                                        
                                        
                                        int *Tbest;
                                        int Titer;
                                        double start, kraj, avg_time;
                                        int bestLen = 0;
                                        int len_W;
                                        int Iteration[ 100 ];
                                        double time_used[ 100 ];
                                        int len_used[ 100 ];
                                        int W_used[ 100 ];
                                        char outfilename[30];
                                        int len_time;
                                        int notImproved;
                                        
                                        void inicijalizacija()
                                        {
                                            ifstream FIC;
                                        
                                            string c="C:/najnoviji/";
                                            c+=ime_datoteke;
                                            const char * c2 = c.c_str();
                                        
                                            FIC.open(c2);
                                            if ( FIC.fail() )
                                            {
                                                cout << "Greska pri ucitavanju datoteke.2"<< endl;
                                                getchar();
                                                exit(0);
                                            }
                                            char citaj[100];
                                            FIC >> citaj;
                                            if ( FIC.eof() )
                                            {
                                                cout << "Datoteka je prazna."<< endl;
                                                exit(0);
                                            }
                                            int broj_bridova=-1;
                                            int x, y;
                                            if ( strcmp(citaj, "p" )==0 )
                                            {
                                                FIC >> broj_vrhova >> broj_bridova;
                                                //cout << "Broj vrhova = " << broj_vrhova << endl;
                                                //cout << "Broj bridova = " << broj_bridova << endl;
                                        
                                                klika01 = new int [broj_vrhova];
                                                koliko_puta_nesusjed  = new int [broj_vrhova];
                                                pozicija= new int [broj_vrhova];
                                                tabu_lista = new int [broj_vrhova];
                                                broj_nesusjeda= new int[broj_vrhova];
                                                kandidati_za_add = new int[broj_vrhova];
                                                kandidati_za_swap = new int[broj_vrhova];
                                                niz2= new int[broj_vrhova];
                                                tezine = new int[broj_vrhova];
                                                nije_susjed = new int[broj_vrhova];
                                                niz1= new int[broj_vrhova];
                                                matrica = new int*[broj_vrhova];
                                                klika = new int [2000];
                                                Tbest = new int[broj_vrhova];
                                        
                                                bridovi = new int*[ broj_vrhova ];
                                        
                                                for (int x = 0 ; x < broj_vrhova ; x++ )
                                                {
                                                    bridovi[x] = new int[broj_vrhova];
                                                    matrica[x] = new int[broj_vrhova];
                                                }
                                                for ( int x=0; x<broj_vrhova; x++ )
                                                    for ( int y=0; y<broj_vrhova; y++ )
                                                        bridovi[x][y] = 1;
                                            }
                                            FIC >> x;
                                            while ( ! FIC.eof() )
                                            {
                                                FIC >> y;
                                                x--; y--;
                                                bridovi[x][y]=bridovi[y][x]=0;
                                                FIC >> x;
                                            }
                                        
                                            //cout << "Gustoca = " << 2*(float) broj_bridova/(broj_vrhova*(broj_vrhova-1)) << endl;
                                        
                                             for( int x=0 ; x<broj_vrhova; x++ )
                                                 bridovi[x][x] = 0;
                                        
                                             for( int x=0 ; x<broj_vrhova; x++ ){
                                                 broj_nesusjeda[x] = 0;
                                                 for( int y=0; y<broj_vrhova; y++ )
                                                    if( bridovi[x][y] == 1 ){
                                                        matrica[x][broj_nesusjeda[x]] = y;
                                                        broj_nesusjeda[x]++;
                                                    }
                                             }
                                        
                                             for( int x = 0; x < broj_vrhova; x++ ){
                                                tezine[ x ] = (x+1)%200 + 1;
                                                nije_susjed[ x ] = 0;
                                             }
                                        
                                             FIC.close();
                                        }
                                        
                                        int randomInt( int n ) {
                                            return rand() % n;
                                        }
                                        
                                        void ocisti()
                                        {
                                            int i;
                                            memset( klika01, 0, length );
                                            memset(  koliko_puta_nesusjed, 0, length );
                                            memset(pozicija, 0, length );
                                            memset( tabu_lista, 0, length );
                                            for( i = 0; i < broj_vrhova; i++ )
                                            {
                                               kandidati_za_add[ i ] = i;
                                               pozicija[ i ] = i;
                                            }
                                            duljina1 = broj_vrhova;
                                            duljina2 = 0;
                                            len = 0;
                                            tezina_klike = 0;
                                            najbolja_tezina = 0;
                                        }
                                        
                                        int odaberi_random_vrh( )
                                        {
                                            if( duljina1 )
                                               return randomInt( duljina1 );
                                            else
                                                return -1;
                                        }
                                        
                                        int odaberi_vrh_za_add( ) // trazimo indeks vrha za Add
                                        {
                                            int k, l1, l2, w1, w2;
                                            l1 = 0;
                                            l2 = 0;
                                            w1 = 0;
                                            w2 = 0;
                                        
                                            for(int i = 0; i < duljina1; i++ )
                                            {
                                               k = kandidati_za_add[ i ];
                                               if( tabu_lista[ k ] <= iteracija )
                                               {
                                                   if( tezine[ k ] > w1 )
                                                   {
                                                      l1 = 0;
                                                      w1 = tezine[ k ];
                                                      niz1[ l1++ ] = i;
                                                   }
                                                   else if ( tezine[ k ] == w1 )
                                                      niz1[ l1++ ] = i;
                                               }
                                               else
                                               {
                                                   if( tezine[ k ] > w2 )
                                                   {
                                                      l2 = 0;
                                                      w2 = tezine[ k ];
                                                      niz2[ l2++ ] = i;
                                                   }
                                                   else if ( tezine[ k ] == w2 )
                                                      niz2[ l2++ ] = i;
                                               }
                                            }
                                        
                                            if( (l2 > 0) && ( w2 > w1 ) && ((w2+tezina_klike)>najbolja_tezina) ) // kriterij aspiracije
                                            {
                                                k = randomInt( l2 );
                                                k = niz2[ k ];
                                                return k;
                                            }
                                        
                                            else if( l1 > 0 )
                                            {
                                                k = randomInt( l1 );
                                                k = niz1[ k ];
                                                return k;
                                            }
                                        
                                            else
                                                return -1;
                                        }
                                        
                                        int Add(int x) // u kliku dodajemo vrh s indeksom x u nizu kandidati_za_add
                                        {
                                            int k1, m, n, n1;
                                        
                                            m = kandidati_za_add[ x ];
                                            klika[ len++ ] = m;
                                            klika01[ m ] = 1;
                                            tezina_klike += tezine[ m ];
                                        
                                            duljina1--;
                                            n1 = kandidati_za_add[ duljina1 ];
                                            k1 = pozicija[ m ];
                                            kandidati_za_add[ k1 ] = n1;
                                            pozicija[ n1 ] = k1;
                                        
                                            for(int i = 0; i < broj_nesusjeda[ m ]; i++ )
                                            {
                                               n = matrica[ m ][ i ];
                                               koliko_puta_nesusjed[ n ]++; // koliko_puta_nesusjed - indeksi su vrhovi, a elementi oznacavaju koliko puta se vrh n pojavio kao NEsusjed elemenata iz klike
                                               if( koliko_puta_nesusjed[ n ] == 1 ) // prvi put se pojavio kao nesusjed
                                               {
                                                   // izbacujemo vrh n iz kandidati_za_add jer nije susjedan sa svima iz klike (pa ga ne mozemo dodati u kliku)
                                                   k1 = pozicija[ n ];
                                                   duljina1--;
                                                   n1 = kandidati_za_add[ duljina1 ];
                                                   kandidati_za_add[ k1 ] = n1;
                                                   pozicija[ n1 ] = k1;
                                        
                                                   // u kandidati_za_swap spremamo sve vrhove koji nisu susjedi tocno s jednim vrhom iz klike; nad njima se moze izvrsiti operacija SWAP (mijenjaju se s nekim vrhom iz klike); duljina je duljina2
                                                   kandidati_za_swap[ duljina2 ] = n;
                                                   pozicija[ n ] = duljina2;
                                                   duljina2++;
                                                   nije_susjed[ n ] = m; // nije_susjed - indeksi su vrhovi iz kandidati_za_swap, elementi su jedini vrhovi iz klike s kojima vrhovi s odgovarajucim ineksom nisu povezani (m je jedini vrh iz klike s kojim n nije povezan)
                                               }
                                        
                                               else if( koliko_puta_nesusjed[ n ] == 2 ) // vrh n se je dvaput pojavio kao neciji nesusjed (nesusjed neka dva vrha iz klike)
                                               {
                                                   // nad vrhom n se ne moze izvesti operacija SWAP jer bi inace u kliki bio jos jedan element s kojim taj vrh ne bi bio povezan
                                                   //pa ta operacija ne bi bila valjana (niz klika vise ne bi bio klika); zato brisemo n iz kandidati_za_swap
                                                   duljina2--;
                                                   n1 = kandidati_za_swap[ duljina2 ];
                                                   k1 = pozicija[ n ];
                                                   kandidati_za_swap[ k1 ] = n1;
                                                   pozicija[ n1 ] = k1;
                                               }
                                            }
                                        
                                            if( tezina_klike > najbolja_tezina )
                                             {
                                                 notImproved=0;
                                                najbolja_tezina = tezina_klike;
                                                bestLen = len;
                                                /*for( i = 0; i < broj_vrhova; i++ )
                                                    Tbest[ i ] = klika01[ i ]; */
                                             }
                                            notImproved++;
                                            return 1;
                                        }
                                        
                                        int odaberi_vrh_za_swap( ) // vraca poziciju vrha u polju kandidati_za_swap kojeg trebamo odabrati ako zelimo izvrsiti operaciju SWAP
                                        {
                                             int k, l1, l2, w, w1, w2, m, n;
                                             l1 = 0;
                                             l2 = 0;
                                             w1 = -1000000;
                                             w2 = -1000000;
                                             for(int i = 0; i < duljina2; i++ )
                                             {
                                                 m = kandidati_za_swap[ i ];
                                                 n = nije_susjed[ m ];
                                        
                                                 if( (klika01[ n ] != 1) || (bridovi[ m ][ n ] != 1) ){ // ovo radimo ako u nije_susjed pise nesto krivo, tj. n nije u kliki ili su n i m povezani
                                                     for(int j = 0; j < len; j++ )
                                                     {
                                                        k = klika[ j ];
                                                        if( bridovi[ m ][ k ] == 1 )
                                                          break;
                                                     }
                                                     nije_susjed[ m ] = k;
                                                 }
                                             }
                                        
                                             // analogno kao u odaberi_vrh_za_add()...
                                             for(int i = 0; i < duljina2; i++ )
                                             {
                                                 m = kandidati_za_swap[ i ];
                                                 n = nije_susjed[ m ];
                                                 w = tezine[ m ] - tezine[ n ]; //... osim sto ovako racunamo tezinu operacije SWAP jer zelimo dodati m i izbaciti n
                                                 if( tabu_lista[ m ] <= iteracija )
                                                 {
                                                     if( w > w1 )
                                                     {
                                                        l1 = 0;
                                                        w1 = w;
                                                        niz1[ l1++ ] = i;
                                                     }
                                                     else if ( w == w1 )
                                                     {
                                                        niz1[ l1++ ] = i;
                                                     }
                                                 }
                                                 else
                                                 {
                                                     if( w > w2 )
                                                     {
                                                        l2 = 0;
                                                        w2 = w;
                                                        niz2[ l2++ ] = i;
                                                     }
                                                     else if ( w == w2 )
                                                     {
                                                        niz2[ l2++ ] = i;
                                                     }
                                                 }
                                             }
                                        
                                             if( (l2 > 0) && ( w2 > w1 ) && ((w2+tezina_klike)>najbolja_tezina) )
                                             {
                                                 k = randomInt( l2 );
                                                 k = niz2[ k ];
                                                 return k;
                                             }
                                             else if( l1 > 0 )
                                             {
                                                 k = randomInt( l1 );
                                                 k = niz1[ k ];
                                                 return k;
                                             }
                                             else
                                             {
                                                 return -1;
                                             }
                                        }
                                        
                                        int Swap( int x )
                                        {
                                             int i, k1, m, m1, n, n1, ti;
                                        
                                             m = kandidati_za_swap[ x ];
                                             for(ti = 0; ti < len; ti++)
                                             {
                                                 m1 = klika[ ti ];
                                                 if( bridovi[ m1 ][ m ] == 1 ) // prvi iz klika s kojim m nije povezan (ne znam zas nece m1=nije_susjed[m])
                                                    break;
                                             }
                                             if(nije_susjed[m]!=m1) cout<<"razl"<<endl;
                                        
                                             tezina_klike = tezina_klike + tezine[ m ] - tezine[ m1 ];
                                        
                                             // dodajemo m u klika
                                             klika01[ m ] = 1;
                                             klika[ len++ ] = m;
                                        
                                             //brisemo m iz kandidati_za_swap
                                             k1 = pozicija[ m ];
                                             duljina2--;
                                             n1 = kandidati_za_swap[ duljina2 ];
                                             kandidati_za_swap[ k1 ] = n1;
                                             pozicija[ n1 ] = k1;
                                        
                                             for( i = 0; i < broj_nesusjeda[ m ]; i++ )
                                             {
                                                n = matrica[ m ][ i ];
                                                koliko_puta_nesusjed[ n ]++;
                                                if( (koliko_puta_nesusjed[ n ] == 1) && ( klika01[ n ] == 0 ) ) // kao u Add uz jos ovaj drugi uvjet koji nije zadovoljen za vrh m1 jer ga jos nismo izbacili
                                                                                                // (on je jedini nesusjed od m koji je u kliki); za njega ne zelimo ovo provesti
                                                {
                                                     k1 = pozicija[ n ];
                                                     duljina1--;
                                                     n1 = kandidati_za_add[ duljina1 ];
                                                     kandidati_za_add[ k1 ] = n1;
                                                     pozicija[ n1 ] = k1;
                                        
                                                     kandidati_za_swap[ duljina2 ] = n;
                                                     pozicija[ n ] = duljina2;
                                                     duljina2++;
                                                     nije_susjed[ n ] = m;
                                                }
                                                if( koliko_puta_nesusjed[ n ] == 2 )
                                                {
                                                    duljina2--;
                                                    n1 = kandidati_za_swap[ duljina2 ];
                                                    k1 = pozicija[ n ];
                                                    kandidati_za_swap[ k1 ] = n1;
                                                    pozicija[ n1 ] = k1;
                                                }
                                             }
                                        
                                             // m1 se brise iz klika i zabranjuje se sve do itreacije koja je zapisana u tabu_lista[m1]
                                             klika01[ m1 ] = 0;
                                             tabu_lista[ m1 ] = iteracija + tabu_tenur + randomInt( duljina2+2 );
                                             len--;
                                             klika[ ti ] = klika[ len ]; // m1 je bio na poziciji ti u klika
                                        
                                             // m1 ubacujemo u kandidati_za_swap jer je susjedan sa svima iz klika osim sa m
                                             kandidati_za_swap[ duljina2 ] = m1;
                                             pozicija[ m1 ] = duljina2;
                                             duljina2++;
                                        
                                             for( i = 0; i < broj_nesusjeda[ m1 ]; i++ )
                                             {
                                                n = matrica[ m1 ][ i ];
                                                koliko_puta_nesusjed[ n ]--; // oduzimamo jer m1 izbacujemo pa ce n biti nesusjedan jednom vrhu manje iz klike
                                                if( (koliko_puta_nesusjed[ n ] == 0) && (klika01[ n ] == 0) ) // oni koji su prije imali jednog nesusjeda u kliki (sada nemaju nijednog) i koji nisu u kliki;
                                                                                              // onaj za kojeg drugi uvjet propada je m, no njega smo vec izbacili iz kandidati_za_swap i ne zelimo ga dodati u kandidati_za_add
                                                {
                                                   k1 = pozicija[ n ];   // one kojima je m1 bio jedini nesusjed u kliki izbacujemo iz kandidati_za_swap
                                                   duljina2--;
                                                   n1 = kandidati_za_swap[ duljina2 ];
                                                   kandidati_za_swap[ k1 ] = n1;
                                                   pozicija[ n1 ] = k1;
                                        
                                                   kandidati_za_add[ duljina1 ] = n;      // dodajemo ih u kandidati_za_add jer su povezani sa svima iz klike
                                                   pozicija[ n ] = duljina1;
                                                   duljina1++;
                                                }
                                                else if( koliko_puta_nesusjed[ n ] == 1 ) // ovo zadovoljavaju vrhovi koji su prije bili nesusjedni sa dva vrha iz klika, a kako smo sada izbacili vrh m1
                                                                            // iz klika, oni postaju nesusjedi samo sa jednim vrhom iz klika pa ih stoga ubacujemo u kandidati_za_swap
                                                {
                                                   kandidati_za_swap[ duljina2 ] = n;
                                                   pozicija[ n ] = duljina2;
                                                   duljina2++;
                                                }
                                             }
                                        
                                             if( tezina_klike > najbolja_tezina )
                                             {
                                                 notImproved=0;
                                                najbolja_tezina = tezina_klike;
                                                bestLen = len;
                                                /*for( i = 0; i < broj_vrhova; i++ )
                                                    Tbest[ i ] = klika01[ i ];
                                                */
                                             }
                                             notImproved++;
                                             return 1;
                                        }
                                        
                                        
                                        int smallestWeightNode()
                                        {
                                            int k, l;
                                            int w = 5000000;
                                            l = 0;
                                            for(int i = 0; i < len; i++ )
                                            {
                                               k = klika[ i ];
                                               if( tezine[ k ] < w )
                                               {
                                                  l = 0;
                                                  w = tezine[ k ];
                                                  niz1[ l++ ] = i;
                                               }
                                               else if ( tezine[ k ] <= w )
                                                  niz1[ l++ ] = i;
                                            }
                                        
                                            if( l == 0 )
                                              return -1;
                                            k = randomInt( l );
                                            k = niz1[ k ];
                                            return k;
                                        }
                                        
                                        int Drop()
                                        {
                                             int m, n, k1, n1, x;
                                             x = smallestWeightNode();
                                             if( x == -1 )
                                              return -1;
                                             m = klika[ x ];
                                             //izbacujemo m1 iz klika
                                             tezina_klike = tezina_klike - tezine[ m ];
                                             klika01[ m ] = 0;
                                             tabu_lista[ m ] = iteracija + tabu_tenur;
                                             len--;
                                             klika[ x ] = klika[ len ];
                                             // ubacujemo ga u kandidati_za_add jer je povezan sa svim iz klika
                                             kandidati_za_add[ duljina1 ] = m;
                                             pozicija[ m ] = duljina1;
                                             duljina1++;
                                        
                                            // isto kao onaj dio u Swap u kojemu izbacujemo vrh
                                             for(int i = 0; i < broj_nesusjeda[ m ]; i++ )
                                             {
                                                n = matrica[ m ][ i ];
                                                koliko_puta_nesusjed[ n ]--;
                                                if( (koliko_puta_nesusjed[ n ] == 0) && (klika01[ n ] == 0) )
                                                {
                                                   k1 = pozicija[ n ];
                                                   duljina2--;
                                                   n1 = kandidati_za_swap[ duljina2 ];
                                                   kandidati_za_swap[ k1 ] = n1;
                                                   pozicija[ n1 ] = k1;
                                        
                                                   kandidati_za_add[ duljina1 ] = n;
                                                   pozicija[ n ] = duljina1;
                                                   duljina1++;
                                                }
                                                else if( koliko_puta_nesusjed[ n ] == 1 )
                                                {
                                                   kandidati_za_swap[ duljina2 ] = n;
                                                   pozicija[ n ] = duljina2;
                                                   duljina2++;
                                                }
                                             }
                                             notImproved++;
                                             return 1;
                                        }
                                        
                                        int algorithm( int dubina )
                                        {
                                             int k, w1, w2, x, y, z, m1;
                                             iteracija = 0;
                                             ocisti();
                                             while( 1 )
                                             {
                                                x = odaberi_random_vrh();
                                                if( x != -1 )
                                                {
                                                    Add( x );
                                                    iteracija++;
                                                }
                                                else
                                                    break;
                                             }
                                             while( iteracija < dubina )
                                             {
                                                x = odaberi_vrh_za_add();
                                                y = odaberi_vrh_za_swap();
                                        
                                                if( (x != -1) && (y != -1) )
                                                {
                                                    w1 = tezine[ kandidati_za_add[ x ] ];
                                                    w2 = tezine[ kandidati_za_swap[ y ] ] - tezine[ nije_susjed[ kandidati_za_swap[ y ] ] ];
                                        
                                                    if( w1 > w2 )
                                                    {
                                                        Add( x );
                                                        iteracija++;
                                                    }
                                                    else
                                                    {
                                                        Swap( y );
                                                        iteracija++;
                                                    }
                                                }
                                                else if( (x != -1) && (y == -1) )
                                                {
                                                     Add( x );
                                                     iteracija++;
                                                }
                                                else if( (x == -1) && (y != -1) )
                                                {
                                                     z = smallestWeightNode();
                                                     m1 = klika[ z ];
                                                     w1 = tezine[ kandidati_za_swap[ y ] ] - tezine[ nije_susjed[ kandidati_za_swap[ y ] ] ];
                                                     w2 = - tezine[ m1 ];
                                                     if( w1 > w2 )
                                                     {
                                                        Swap( y );
                                                        iteracija++;
                                                     }
                                                     else
                                                     {
                                                         k = Drop();
                                                         if( k == -1 )
                                                             return najbolja_tezina;
                                                         iteracija++;
                                                     }
                                                }
                                                else if( (x == -1) && (y == -1) )
                                                {
                                                     k = Drop();
                                                     if( k == -1 )
                                                        return najbolja_tezina;
                                                     iteracija++;
                                                }
                                        
                                             }
                                        
                                             return najbolja_tezina;
                                        }
                                        
                                        void verify()
                                        {
                                             int i, j;
                                             for( i = 0; i < broj_vrhova; i++ )
                                                  if( Tbest[ i ] == 1 )
                                                      for( j = i+1; j < broj_vrhova; j++ )
                                                          if( (Tbest[ j ] == 1) && ( bridovi[ i ][ j ] == 1 ) )
                                                              cout << "Not a klika." << endl;
                                        }
                                        /*
                                        void Output()
                                        {
                                            int i , j, k, l, sum;
                                            FILE *fp ;
                                            int len = strlen(ime_datoteke);
                                            strcpy(outfilename,ime_datoteke) ;
                                            outfilename[len]='.';
                                            outfilename[len+1]='o';
                                            outfilename[len+2]='u';
                                            outfilename[len+3]='t';
                                            outfilename[len+4]='\0';
                                        
                                            fp = fopen(outfilename, "a+"); // i za input i za output
                                            for( i = 0; i < 100; i++ ){
                                                fprintf(fp, "sum = %6d, iter = %6d, len = %5d,  time = %8lf \n", W_used[ i ], Iteration[ i ], len_used[ i ],  time_used[ i ] );
                                            }
                                        
                                            fprintf(fp, "\n\n the Total information: \n");
                                            int wavg, iteravg, lenbb, success;
                                            wavg = iteravg = lenbb = success = 0;
                                            int best_v = 0;
                                            double timeavg = 0;
                                            for( i = 0; i < 100; i++ )
                                            if( W_used[ i ] > best_v )
                                            {
                                                best_v = W_used[ i ];
                                                lenbb = len_used[ i ];
                                            }
                                        
                                            int count = 0;
                                            fprintf(fp, "\n The best weight value for the maximum weighted problem is %6d \n", best_v);
                                            for( i = 0; i < 100; i++ ){
                                               wavg = wavg + W_used[ i ];
                                            }
                                            double twavg = (double (wavg)) / 100 ;
                                            for( i = 0; i < 100; i++ )
                                                if( W_used[ i ] == best_v )
                                                {
                                                    count++;
                                                    iteravg = iteravg + Iteration[ i ];
                                                    timeavg = timeavg + time_used[ i ];
                                                }
                                        
                                            iteravg =  int ( (double (iteravg)) / count );
                                            timeavg = timeavg / (count*1000);
                                            fprintf(fp, "avg_sum = %10lf, succes = %6d, len = %5d, avg_iter = %6d,  time = %8lf \n", twavg, count, lenbb,  iteravg, timeavg );
                                            fclose(fp) ;
                                            return ;
                                        }
                                        */
                                        int bestSolutionWeight()
                                        {
                                             int l, lbest;
                                             lbest = 0;
                                             Titer = 0;
                                             int M_iter = 0;
                                             start = (double)clock();
                                        
                                            //while((double)clock()-start<CLOCKS_PER_SEC){
                                                 l = algorithm(4000);
                                                 M_iter = M_iter + iteracija;
                                                 if( l > lbest )
                                                 {
                                                   lbest = l;
                                                   kraj = (double)clock();
                                                   Titer = M_iter;
                                                   len_W = bestLen;
                                                 }
                                             //}
                                             return lbest;
                                        }
                                        
                                        int main()
                                        {
                                            ifstream FIC;
                                            FIC.open("C:/najnoviji/podaci.txt");
                                            if ( FIC.fail() ){
                                                cout << "Greska pri ucitavanju datoteke1.";
                                                exit(0);
                                            }
                                            if ( FIC.eof() ){
                                                cout << "Datoteka je prazna."<< endl;
                                                exit(0);
                                            }
                                            getline(FIC, ime_datoteke);
                                            getline(FIC, ime_datoteke);
                                        
                                               srand( (unsigned) time( NULL ) ); //time vraca trenutno vrijeme, a srand inicijalizira generator slucajnog broja
                                               inicijalizacija();
                                               length = broj_vrhova*sizeof( int );
                                               int i, l, maxl;
                                               maxl=0;
                                               for( i = 0; i < 20; i++ )
                                              {
                                                  l = bestSolutionWeight();
                                                  /*W_used[ i ] = l;
                                                  len_used[ i ] = len_W;
                                                  time_used[ i ] = kraj - start;
                                                  Iteration[ i ] = Titer;
                                                  cout << "i = " << i << " l = " << l << endl;*/
                                                  if(l>maxl) maxl=l;
                                              }
                                              cout<<maxl<<endl;
                                              //Output();
                                        
                                            std::ofstream ofs;
                                            ofs.open("C:/najnoviji/izlaz.txt", std::ofstream::out | std::ofstream::trunc);
                                            ofs.close();
                                        
                                            FILE *fp ;
                                            fp = fopen("C:/najnoviji/izlaz.txt", "a+");
                                            fprintf(fp, "%d", maxl);
                                            fclose(fp);
                                        }
                                        
                                        

                                        But I'm still left with the same problem from the beginning. The kod.cpp is added in Source directory as SGaits suggested and what I would want from the app is to:

                                        • read the current text from two combo boxes, where the first one contains the name of a .cpp file which I want to run (for now only kod.cpp) and the other one contains the .txt file that I want the .cpp file to read (it's some data)),
                                        • write them in file 'podaci.txt' in two separate lines
                                        • somehow run the .cpp file with line (which is in mainwindow.cpp)
                                          QDesktopServices::openUrl(QUrl("file:///C:/najnoviji/"+fileName+".exe",QUrl::TolerantMode));
                                        

                                        but I'm not sure that this is the way to do it. The .cpp file then writes its result in the file 'izlaz.txt' and the app reads what is in 'izlaz.txt' and writes it in a line edit box. I think this all could be simplified if the .cpp file can just receive arguments from command line (then I would not need the files 'podaci.txt' and 'izlaz.txt'), but I don't know how to connect the app with the .cpp file this way neither.

                                        1 Reply Last reply
                                        0
                                        • SGaistS Offline
                                          SGaistS Offline
                                          SGaist
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #20

                                          As I wrote before, what you are describing is compiling/linking your kod.cpp before running the resulting binary against your file. Which is likely not what you want to do.

                                          Either make it an independent application that handles command line arguments properly and you can pass it the paths to all the necessary files using QProcess or likely simpler: properly integrate the functionality contained in kod.cpp into your GUI application.

                                          Interested in AI ? www.idiap.ch
                                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          1 Reply Last reply
                                          2

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved