Run Wt Framework in Qt Creator - c++

I'm just trying to run an example from https://www.webtoolkit.eu/wt
I have downloaded precompiled binaries from https://github.com/emweb/wt/releases
I choose "Wt-4.3.1-msvs2017-Windows-x64-SDK.zip" and extracted into a folder.
Kit i use: Qt 5.12.0 MSVC 2017 x64
Then i added into my Qt project .pro file next lines:
LIBS += -L"C:/wt/lib"
INCLUDEPATH += C:/wt/include
In main.cpp i added the next code:
#include <Wt/WApplication.h>
#include <Wt/WServer.h>
int main(int argc, char *argv[])
{
return Wt::WRun(argc, argv, [](const Wt::WEnvironment &env){
auto app = std::make_unique<Wt::WApplication>(env);
return app;
});
}
When i try to run this stuff i get an error (127 errors): LNK 2001, LNK 2019, LNK 1120
Here is screenshot of the errors and source
.pro file

I think you need to specify which libs you need to link with explicitly. Check out: How to add additional libraries to Visual Studio project?

Related

How to compile a Qt program without qtCreator on Windows?

I have read the question Can I use Qt without qmake or Qt Creator? which is basically the same for Linux, and very useful.
How to compile a basic program using QtCore (console application, even without GUI) on Windows, without using qmake or qtCreator IDE, but just the Microsoft VC++ compiler cl.exe?
For example, let's say we have:
#include <iostream>
#include <QtCore>
int main()
{
QVector<int> a; // Qt object
for (int i=0; i<10; i++)
a.append(i);
std::cout << "hello";
return 0;
}
Using:
call "C:\path\to\vcvarsall.bat" x64
cl main.cpp /I D:\coding\qt\qtbase-everywhere-src-5.15.5\include
fails with:
D:\coding\qt\qtbase-everywhere-src-5.15.5\include\QtCore\QtCore(3): fatal error C1083: Cannot open include file: 'QtCore/QtCoreDepends': No such file or directory
Indeed this file is not present in the release qtbase-everywhere-opensource-src-5.15.5.zip from https://download.qt.io/archive/qt/5.15/5.15.4/submodules/.
TL;DR: More generally, which cl.exe arguments should we use to to able to use all Qt includes, and effectively compile such a minimal project using QtCore?
I finally managed to do it 100% from command line, without the qtCreator IDE, but not yet without qmake. Steps to reproduce:
Let's assume Microsoft MSVC 2019 is installed.
Install qt-opensource-windows-x86-5.14.2.exe. (This is the latest Windows offline installer I could find), double check that you install at least msvc2017_64.
Note: Don't use qtbase-everywhere-opensource-src-5.15.4.zip: using the include subfolder from this package for cl.exe /I ... is not enough. (I thought it would, at first)
Create a folder example containing the main.cpp file above
Open a command line window in this folder and do:
vcvarsall.bat x64
Now either do "c:\path\to\msvc2017_64\bin\qmake.exe" -project to create a example.pro project file or create it manually with:
TEMPLATE = app
TARGET = qt_example
INCLUDEPATH += .
CONFIG += console
SOURCES += main.cpp
Do "c:\path\to\msvc2017_64\bin\qmake.exe". This will create a Makefile file.
Run nmake. This is Microsoft MSVC's equivalent of the make tool.
Copy c:\path\to\msvc2017_64\bin\Qt5Core.dll into the release folder
Run release\example.exe. Working!
Addendum: here is solution now for a minimal GUI app:
main.cpp
#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QMessageBox>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMessageBox::information(NULL, "Hello", "Hello", "Ok");
return a.exec();
}
qt_example_gui.pro
TEMPLATE = app
TARGET = qt_example_gui
INCLUDEPATH += .
SOURCES += main.cpp
QT += gui widgets
Do the vcvarsall.bat x64, qmake, nmake like in the solution above. No be sure you have this file structure:
release\qt_example_gui.exe
release\Qt5Core.dll
release\Qt5Gui.dll
release\Qt5Widgets.dll
release\platforms\qwindows.dll
Run the .exe, that's it!

Using MATLAB API in C++, matOpen not working

I am writing a piece of code to access MATLAB files, my program compiles but crashes when I call matOpen. When I try to debug the code, the debugger also exits without reaching the offending line of code. I am working in Qt, and I am not too sure if I have done my includes properly.
.pro file
INCLUDEPATH += "C:\Program Files\MATLAB\R2018a\extern\include"
LIBS += "C:\Program Files\MATLAB\R2018a\extern\lib\win64\microsoft\libmx.lib"
LIBS += "C:\Program Files\MATLAB\R2018a\extern\lib\win64\microsoft\libmat.lib"
SOURCES += \
main.cpp
main.cpp
#include <stdlib.h>
#include <vector>
#include <mat.h>
int main(int argc, char *argv[])
{
MATFile *mfPtr;
const char *file = "data.mat";
mfPtr = matOpen(file,"r"); //code runs successfully without this line
return 0;
}
I am compiling using Desktop Qt 5.11.0 MSVC2017 64-bit and my MATLAB version is 2018a. I have also tried deleting the build folder and rebuilding.
Try this
E:\CodePath>gcc *.c -IC:\PROGRA~1\MATLAB\R2018a\extern\include -LC:\PROGRA~1\MATLAB\R2018a\extern\lib\win64\mingw64 -o code -l libmat -l libmx
Place libmat.dll and libmx.dll in the CodePath
I could not get it to work with the Matlab libraries either. For everyone looking for a different approach to write MAT files from C++, I recommend this open source project: https://github.com/jkriege2/TinyMAT

Using libgit2 with Qt and MSVC throws Unresolved External Symbol but works in VC++ project

I'm trying to compile with MSVC 2017 64bits a Qt application that uses libgit2.
Trying to compile I've got the following error:
error: LNK2019: unresolved external symbol git_repository_init referenced in function main.
Googling a bit I've found these answers (Qt Creator: Unresolved External Symbol and How to use libgit2 from a native C++ application on Windows?)
However, after trying the solution (cmake %PATH_TO_LIBGIT2_SOURCE% -DTHREADSAFE=ON -DSTDCALL=OFF and build again) nothing changed. Then I decided to use the exact same library (same build) with Visual Studio and Visual C++ and I'm not getting the error.
Visual C++ (compiles and works):
int main()
{
git_libgit2_init();
git_repository *repo = NULL;
/* With working directory: */
int error = git_repository_init(&repo, "C:/Users/myUser/Documents/tests", false);
git_libgit2_shutdown();
return 0;
}
Qt (does not compile):
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
git_libgit2_init();
git_repository *repo = NULL;
/* With working directory: */
git_repository_init(&repo, "C:/Users/myUser/Documents/tests", false);
git_libgit2_shutdown();
return a.exec();
}
This is how I added the library to my Qt project (qmake project):
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../libgit2/build/release/ -lgit2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../libgit2/build/debug/ -lgit2
else:unix: LIBS += -L$$PWD/../libgit2/build/ -lgit2
INCLUDEPATH += $$PWD/../libgit2/include
DEPENDPATH += $$PWD/../libgit2/include
Why it is working with the Visual C++ project but not with my Qt project if they are using the exactly same library (same path)? Am I missing something?
EDIT: The project compiles and works fine with minGW instead of MSVC but I want to use the last one.

Issue when building UWP app with Qt UWP x32/x64 Kits

I have downloaded from GitHub directory cppwinrt it contains the header files to use UWP API with Qt. The Qt version is 5.9.3.
I have included it in .pro file:
INCLUDEPATH += "C:/Users/cobra/Downloads/Downloads Data/cppwinrt/10.0.16299.0"
.h file:
#include <winrt/windows.devices.enumeration.h>
#pragma comment(lib, "windowsapp")
using namespace winrt;
using namespace winrt::Windows::Devices::Enumeration;
.cpp file:
init_apartment(); //this initializes com
DeviceInformationCollection infos = DeviceInformation::FindAllAsync().get();
for (const auto &info : infos) {
qDebug() << QString::fromWCharArray(info.Name().c_str());
}
I want to get some device information. The problem is, it compiles only for ARMV7 kit. On x32/x64 kits it displays a lot of errors:
I have checked it and all errors are from cppwinrt directory where the header files located. How to fix it to build for x32/x64 kits?
Update:
Without UWP API includes, the application compiles and runs.
Thanks in advance.
I have fixed the issue by installing Qt extension to Visual Studioand selecting Win SDK to 10.0.16299.0, now it compiles for all architectures.

QtCreator LNK2019 error with external library

I have a problem when I want to link a library to my Qt project.
When I try to include an external library (libnodave.lib) in Qt Creator and try to build it, the following error occurs.
main.obj:-1: Fehler: LNK2019: unresolved external symbol __imp_daveSetDebug referenced in function main
I'm pretty sure that I included all needed files in my project and the .pro file. I used the "Add Library" wizard to add the library.
After no success with Qt Creator, I created a minimal example with Visual Studio. When I include all the needed files to the VS project, I can build and run it without errors. So I think that there must be a problem with Qt Creator linking the library. I also tried the Qt-Visual-Studio-Add-in, but there, the same error occurs.
Here are my minimal examples with the library I want to include.
In the Visual Studio example, I added the library path, the include path, and the name of the library to the project properties. It works.
I hope you can help me with my problem.
EDIT:
I want to use the library to get some data from a S7-300 SPS device.
The following code is the minimal example from Qt Creator.
#include <QCoreApplication>
#include <QDebug>
#include <nodave.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
daveInterface *di;
daveSetDebug(daveDebugConnect); // Function of libnodave Library
qDebug() << "Hello World";
return a.exec();
}
This is the whole code from the Visual Studio minimal example.
#include "stdafx.h"
#include <nodave.h>
int _tmain(int argc, _TCHAR* argv[])
{
daveInterface *di;
daveSetDebug(daveDebugConnect);
printf("Hello World\n");
return 0;
}
The code is very small, so I don't think that there is an error inside.
That's why I think it must be a problem with the Qt linker or something like that.
EDIT:
My .pro file.
QT += core
QT -= gui
TARGET = qtminimal
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32: LIBS += -L$$PWD/../libnodave-0.8.5/win/ -llibnodave
INCLUDEPATH += $$PWD/../libnodave-0.8.5
DEPENDPATH += $$PWD/../libnodave-0.8.5
The problem was that the Qt project is 64bit and the library I want to include is only 32bit.
So I downloaded the 32bit version of Qt and now it works.
I found the mistake, when I tried to build only the minimal example with libnodave, without any 64bit Qt libraries.
By creating a new Qt project in VS2013, with this workaround and adding the libnodave library afterwards I could change whether it should be a 64bit or 32bit build. By choosing the 32bit build, the Qt library creates errors but not the libnodave lib. When I choose 64bit build, only libnodave creates the errors.
I hope it is useful for someone else.