Unsolved how to add -D_UNICODE to a qt project?
-
I am trying to use libmediainfo with my qt program. It is giving an undefined sympbols error and after searching it seems my project is supposed to have -D_UNICODE added to cmake options. I do not know where to set this with Qt Creator.
here is where I found that I need -D_UNICODE
https://sourceforge.net/p/mediainfo/discussion/297610/thread/49c9122d/#0e3athe exact error is as follows
Undefined symbols for architecture x86_64: "MediaInfoLib::MediaInfo::Open(std::string const&)", referenced from: MainWindow::on_dupeslistWidget_itemClicked(QListWidgetItem*) in mainwindow.o "MediaInfoLib::MediaInfo::Option(std::string const&, std::string const&)", referenced from: MainWindow::on_dupeslistWidget_itemClicked(QListWidgetItem*) in mainwindow.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [VideoTwin.app/Contents/MacOS/VideoTwin] Error 1 18:32:29: The process "/usr/bin/make" exited with code 2. Error while building/deploying project VideoTwin (kit: default) When executing step "Make"
Here is my .pro file
QT += core gui QT += sql QT += concurrent QT += multimedia multimediawidgets INCLUDEPATH += /usr/local/include /usr/local/Cellar/opencv3/3.1.0_1/include/ $$[QT_INSTALL_PREFIX]/src/3rdparty/sqlite LIBS += -L/usr/local/Cellar/opencv3/3.1.0_1/lib -L/usr/local/lib -lmediainfo -lzen -lz -lpthread -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn -lopencv_dpm -lopencv_fuzzy -lopencv_line_descriptor -lopencv_optflow -lopencv_plot -lopencv_reg -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_rgbd -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_face -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_xobjdetect -lopencv_objdetect -lopencv_ml -lopencv_xphoto -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_photo -lopencv_imgproc -lopencv_core greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = VideoTwin TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ preferencsedialog.cpp \ myqlistwidget.cpp \ $$[QT_INSTALL_PREFIX]/src/3rdparty/sqlite/sqlite3.c \ matchpair.cpp HEADERS += mainwindow.h \ preferencsedialog.h \ myqlistwidget.h \ matchpair.h FORMS += mainwindow.ui \ preferencsedialog.ui RESOURCES += \ resources.qrc
in my header file
#include <MediaInfo/MediaInfo.h>
and offending lines in cpp file
MediaInfoLib::MediaInfo media_info; media_info.Option("Internet","No"); media_info.Open(item->data(Qt::UserRole + FilepathRole).toString().toStdString()); QFileInfo file(item->data(Qt::UserRole + FilepathRole).toString()); QString temp = media_info.Inform().c_str(); ui->video_info->setText(temp); ui->video_info->show();
-
ok I think I found how to add it, but it doesn't work. I tried:
QMAKE_CXXFLAGS += -D_UNICODE -DUNICODE
in my .pro file
EDIT: forgot to run qmake, now it has new errors
/Users/phire/Documents/workspace/VideoTwin/mainwindow.cpp:830: error: no viable conversion from 'String' (aka 'basic_string<MediaInfoLib::Char>') to 'QString' QString temp = media_info.Inform(); ^ ~~~~~~~~~~~~~~~~~~~
I changed the cpp code to:
MediaInfoLib::MediaInfo media_info; media_info.Option(L"Internet",L"No"); media_info.Open(item->data(Qt::UserRole + FilepathRole).toString().toStdWString()); QFileInfo file(item->data(Qt::UserRole + FilepathRole).toString()); QString temp = media_info.Inform().data(); ui->video_info->setText(temp); ui->video_info->show();
so now only get the one error.
How do i store the return value in a QString?
-
/Users/phire/Documents/workspace/VideoTwin/mainwindow.cpp:830: error: no viable conversion from 'String' (aka 'basic_stringMediaInfoLib::Char') to 'QString'
It looks like you're mixing standard strings with Qt strings. You can make the conversions with QString::fromStdString and QString::toStdString or their counterparts for multi-byte strings.
Kind regards.