How to run a C++ code in Qt?



  • @SGaist
    I have these header and cpp files in my C++ code. C++ code
    and add these files to the PS4 Qt project using “Add existing Files”: PS4 Qt

    I also copy the text model (M7) file in the Qt directory and the code reads the data file. I gives the path of the model file using "Argument" in “Desktop Qt5.5 MinGW" run. Previously, I had Qt5.4 and MSVC 2010 and the results including some numbers appeared in "Application Output". Now, using Qt5.5 and MSVC 2013, the “Desktop Qt5.5 MinGW" works without error, but the "Application Output" shows this result, which are zero, instead of some non-zero numbers (cpu and z). Application output

    However, when I compile with "Desktop Qt MSVC2013 64bit", it gives these errors: Issues
    Compile output
    Even if it gives the results using “Desktop Qt5.5 MinGW", it is ok, but it does not.


  • Lifetime Qt Champion

    Again, you have multiple main function, that's the first problem to solve. Why do you have more than one ?



  • @SGaist
    You mean the "main.cpp" and "mainwindow.cpp" ?
    If so, this is the same I did before with Qt5.4.1. There were the same main functions and gave the results in "Application Output".
    I create a new project in Qt creator:
    “New Project” >> “Qt Widgets Application” >> (Class name) “MainWindow” & (Base class) "QMainWindow" >> "Next" and "Finish" this application window:New Project
    After that I added .cpp and .h files of the C++ code using “Add existing Files”.


  • Qt Champions 2019

    SGaist means the C/C++ main function:

    int main(int argc, char** argv)
    {
    ...
    }
    

    An application can only have one main function, as the compiler error says you have two of them.



  • I have one "int main(int argc, char argv[])
    { ..."* function in "O_PS .cpp" file, and one main function in "main.cpp" file. Qt


  • Qt Champions 2019

    @Rela You should remove one of them.



  • @jsulm
    Could you explain how? The main function of "O_PS .cpp" is my C++ code, do I delete:
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
    

    } in "main.cpp" ?


  • Qt Champions 2019

    I don't know which of them you have to remove. I don't know your code and I don't know what you want to do. You have to decide which of them is the right one and then just delete the other. You just cannot have more than one entry point (more than one main function) in a C/C++ program.



  • @jsulm
    I definitely need my C++ code, because everything to get the results is in the code, but when I create a new project in Qt, the "main.cpp" file is also created. If I right click on it and "Remove File" do I need add this code somewhere?

    I had Qt5.4.1 before, and it gave results in "Application output" previously using “Desktop Qt5.4 MinGW” with the same main functions.


  • Lifetime Qt Champion

    If you already have a main function that does everything then no. Just keep this in mind: having your main function in a file not named main.cpp is pretty unusual for an application, not forbidden, just unusual. Beware of maintenance nightmare.



  • @SGaist

    I created another project file, and added the C++ files, but instead of adding the code .cpp file I copied it in "main.cpp" file. The only change I made was that copied the

    QApplication a(argc, argv);
        MainWindow w;
        w.show();
    

    After
    int main(int argc, char *argv[])
    {
    . So, now there is only one main function in "main.cpp".

    After that I added the text file by "Argument", using MinGW 32bit, gives this "Runtime Library" error: MinGW 32bit I read maybe its because MinGW is 32bit and I need to use 64 bit as compiler.
    And used "Desktop Qt5.5.1 MSVC 2013 64 bit" , it gives this error: MSVC 64bit


  • Lifetime Qt Champion

    Run it through the debugger, you're doing something fishy in your code. Throwing a bad alloc means that you are trying to allocated more memory than it's available. It might pass on 64bit (not the same memory limits) but if it does, it means that you are doing something else that is wrong and makes your application crash.



  • This post is deleted!


  • @SGaist
    When I click on MSVC to debug MSVC and "F5", it gives this error: No engine
    When I use MinGW and "F5", it gives this error: MinGW


  • Lifetime Qt Champion

    You need to install the debugger for MSVC



  • @SGaist
    In "Maintenance Tool.exe" these components were chosen. components Do I need to mark "Windows Runtime" also?
    In "Build & Run", there is one debugger, if it should be added manually, from which folder I have to select it? Debugger


  • Lifetime Qt Champion

    MSVC debugger can only be obtained from Microsoft website, here



  • @SGaist
    Thanks, should I install SDK or WDK?
    I did search,but it is said that CDB goes with Visual C++, but there is not download link for CDB.



  • @SGaist
    I installed Windows SDK and chose all components including "debugging tools for windows". Now, in Tools -> Options -> Build & Run -> Debuggers, I see the two paths for CDB. In "Kit" I chose "Desktop Qt5.5.1 MSVC2013 64bit" and from "Debugger" combo, the CDB.
    I debug the program with it, and it doesn't give the previous error, but first open the mainwindow.ui and then shows "Debugging starts" in "Application Output" and Compile Output.
    As I wrote before, instead of adding the (C++code.cpp) file I copied the code in "main.cpp" file to have one main fucntion. The only change I made was that copied the

    QApplication a(argc, argv);
        MainWindow w;
        w.show();
    

    After
    int main(int argc, char *argv[])
    {
    in my C++ code. How can I see the results (which are some numbers) in mainwindow.ui?


  • Lifetime Qt Champion

    Did you implement anything in MainWindow ?



  • @Rela
    Yes, its an algorithm here written in C++.


  • Lifetime Qt Champion

    I can't really read it because of all the whited out parts. But the first thing I'd do is check that you don't do anything funky in there. Remove what's not related to your algorithm from main and try to run that. Once it's good, bring back the Qt parts.



  • @SGaist
    Sorry for white space, I have to remove some function names. The algorithm is 2820 lines, and I think each line is needed to output the result. Do you mean i remove the algorithm completely and just remain
    #include "mainwindow.h"
    #include <QApplication>
    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();}

    in main.cpp
    I did that and the here is the output.


  • Lifetime Qt Champion

    Looks like there's no error there. But I meant the other way around. Run just your algorithm code. The error is there somewhere. And you should put a break point at the start so you can go step by step until it breaks.



  • @SGaist
    The algorithm code gives result in MSVC2013.


  • Lifetime Qt Champion

    Then there's something fishy going on with MinGW or you're lucky with Visual Studio. Without any code I can't possibly help you find why it's crashing only with MinGW.



  • @SGaist
    The above output was the debug using "Desktop Qt 5.5.1 MSVC2013 64 bit". I didnt debug with MinGW. The problem is the way I use to get the results in UI.
    I tried a simple project to print out "Hello world", the C++ code written in MSVC gives output. Could you please take a look at my files:
    Here are the content of C++ all files.
    main.cpp
    Bucky9.cpp
    stdafx.cpp
    targetver.h
    stdafx.h
    Now I created a Qt widget project, and I added the C++ code stdafx.h, targetver.h, and stdfx.cpp files using "Add existing Files" to the header and source. I didnt add Bucky9.cpp and main.cpp. Instead, I coppied the main.cpp C++ codes in the Qt main.cpp file with a little changes of all files.
    (Changes: 1- Bucky9 is not included in Qt.
    2- In stdafx.h #include <char.h> instead of <tchar.h>
    3- Including #include "stdafx.h" in mainwindow.cpp.

    Here are the content of all files in Qt project:
    main.cpp
    mainwindow.cpp
    stdafx.cpp
    stdafx.h
    targetver.h
    mainwindow.h

    When I debug it it start debugging and when I click on Run it gives the "Hello world" in "Application output" here
    Now I just want to get the "Hello world" in "mainwindow.ui" instead of in "Application output". Could you tell me how to do that?


  • Lifetime Qt Champion

    First thing: don't use cout since it will send the text to the console.

    You can simply put a QLabel with hello world as text as central widget of your MainWindow class.



  • @SGaist
    I am going to print the result of the C++ code in UI. For "Hello world" here is the Qt using QLabel written in "main.cpp" after "Debug". The C++ files (stdf.h, targetver.h, stdafx.cpp) were added, but I am not sure if the "Hello world" is the result of C++ code or not.

    Again here is my C++ project in MSVC2013.
    After I created Qt widget, I added "O_PS .H ", "stdaf.h ", "targetver.h ", " po .cpp", and "stdaf.cpp ". The code was copied in "#main.cpp" to have one main function. As input data, a model.txt file also a path of text file was added in the run "Arguments" of "Desktop Qt 5.5.1 MSVC2013 64 bit. It gave error that it cannot find the headers files, and I copied all of them in the Qt project folder. Here is the "Application Output".
    In MSVC, it gives some values as outputs, I added a label to ui and wrote QLabel instead of one of the values "cout", like "Hello world". It gives this error. Here is the line that error show, the cout is comment and instead Qlabel was used.

    // QLabel* label=new QLabel(para(i,0));
            label->setAlignment(Qt::AlignCenter);
            QWidget* widget=new QWidget;
            QHBoxLayout* layout=new QHBoxLayout;
             layout->addWidget(label);
             widget->setLayout(layout);
             widget->show();
            //for(i= 0; i<para.IDim(); i++)
                 //cout << para(i,0) << "\t" <<para(i,1) << endl;
    

  • Lifetime Qt Champion

    Because para returns a double and not a string.

    You should use QString::number(para(i,0))



  • @SGaist
    This code in "main.cpp" outputs the area and prime of a circle in which QString::number(); is used to return float.

    #include "mainwindow.h"
    #include <QApplication>
    
    #include <QString>
    #include <QHBoxLayout>
    #include <QLabel>
    #include <QWidget>
    
    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        int radius = 3; //radius of circle
            float square; //area of circle
            float edge; //perimeter of circle
         square = 3.14 * radius*radius;
         edge = 2 * 3.14 *radius;
    
            //cout << "Circle are= " << area << endl;
            //cout << "Circle perimeter= " << perime;
    
            // Show area
            QString area = QString::number(square);
            QLabel* arlabel=new QLabel(area);
            // create horizontal layout
            arlabel->setAlignment(Qt::AlignCenter);
            QHBoxLayout* arlayout=new QHBoxLayout;
            // and add label to it
            arlayout->addWidget(arlabel);
            QWidget* arwidget=new QWidget;
            // set layout to widget
            arwidget->setLayout(arlayout);
            arwidget->show();
    
            // Show perime
            QString perime = QString::number(edge);
            QLabel* pelabel=new QLabel(perime);
            pelabel->setAlignment(Qt::AlignCenter);
            // create horizontal layout
            QHBoxLayout* pelayout=new QHBoxLayout;
            // and add label to it
            pelayout->addWidget(pelabel);
            QWidget* pewidget=new QWidget;
            // set layout to widget
            pewidget->setLayout(pelayout);
            pewidget->show();
        //MainWindow w;
        //w.show();
        return a.exec();
    }
    
    

    I created two "QLabel" in "Mainwindow.ui", but it opens two separate "Mainwindow.ui" and shows area and prime in each of them. But I want to have both on one "Mainwindow.ui".


  • Lifetime Qt Champion

    No, currently it shows two widgets: arwidget and pewidget.

    MainWindow.ui is innocent here since you don't even show MainWindow.

    If you only want to show one widget, create a QWidget, put a layout on it and add arwidget and pewidget to it. You don't even need MainWindow.



  • @SGaist
    Hi, last week I created one widget and it worked. Today, I was goign to run it again, but the files format has changed. I think MSV was updated. First time MVS 2015 gave error "Severity Code Description Project File Line Suppression State Error Solution is not saved. Please save your solution before managing NuGet packages. 0".
    Should I click on Restore NuGet Packages?


  • Lifetime Qt Champion

    I don't see why not.

    Note that your link is pointing to an invalid page



  • @SGaist
    The MVS 2015 was updated automatically and after that it and Qt are not working anymore.
    First it gave error "...Please save your solution before managing NuGet packages". After that "the project file was unloaded". But when I tried other projects the error changed to "Failed to locate: "CL.exe. The system cannot find the file specified". I tried to install some components VS 2015: "Control Panel > Programs >Programs and Features > Microsoft Visual Studio > 'modify' > Visual C++ components and install", but it shows this window: here


  • Qt Champions 2019

    Did you try the first option in this window?



  • @jsulm
    Yes, it worked and now MSVC 2015 is working, but not Qt. 5.5.
    It gives error "Qt Creator needs a compiler set up to build. Configure a compiler in the kit options." in "Issues and in "Complie Output" the error "Configuration is faulty. Check the Issues view for details. Error while building/deploying project Circle2 (kit: Desktop Qt 5.5.1 MSVC2013 64bit) When executing step "Make". "

    I installed "standalone SDK" from here here Downloaded and a folder "Windows kits" was built in the same folder. I copied it in "Visual studio 14" folder, and run the Qt again, but this is Build & Run. No active "Desktop Qt5.5. MCVS 2013 64 bit".

    I dont know what the problem is? The kit should be MCVs 2105?


  • Lifetime Qt Champion

    I didn't realize… You changed Visual Studio's version in between. On Windows you can't mix and match compilers and libraries, Visual Studio's compilers are not compatible one with the other. So since you have the MSVC2013 Qt package, you have to use Visual Studio 2013 with it.

    If you want to use Visual Studio 2015, you can either build Qt yourself, or go with the 5.6 beta which has VS2015 packages.



  • @SGaist said:
    Thanks, which one do you recommend? I spent a lot of time on lunching and problem with running my programs until now because of components and compilers. If I uninstall 5.5 and install 6.5. beta, does Qt 6.5. work conveniently with Qt5.5. projects?


  • Lifetime Qt Champion

    You're too much in the future ;) It's 5.6

    No problem using Qt 5.6 for project started with 5.5. Forward compatibility is one of Qt's guaranties.


Log in to reply