How to run a C++ code in Qt?
-
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.
-
You need to install the debugger for MSVC
-
-
@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 theQApplication 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? -
Did you implement anything in MainWindow ?
-
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. -
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.
-
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.hWhen 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? -
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;
-
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".