add QT5 support
This commit is contained in:
parent
9b1975a8a5
commit
165e95c0d5
@ -5,4 +5,25 @@ project(CMPlatform)
|
|||||||
include(path_config.cmake)
|
include(path_config.cmake)
|
||||||
CMPlatformSetup(${CMAKE_CURRENT_SOURCE_DIR})
|
CMPlatformSetup(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
OPTION(BUILD_QT5_SUPPORT_LIB OFF)
|
||||||
|
|
||||||
|
IF(BUILD_QT5_SUPPORT_LIB)
|
||||||
|
|
||||||
|
add_definitions("-DHGL_QT5")
|
||||||
|
|
||||||
|
set(QT_MIN_VERSION "5.14.0")
|
||||||
|
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core)
|
||||||
|
|
||||||
|
include_directories(${Qt5Core_INCLUDES})
|
||||||
|
add_definitions(${Qt5Core_DEFINITIONS})
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
SET(HGL_QT_MAIN_SOURCE ${CMPLATFORM_ROOT_SOURCE_PATH}/src/QT/QT5WinUCS2.cpp)
|
||||||
|
ELSE()
|
||||||
|
SET(HGL_QT_MAIN_SOURCE ${CMPLATFORM_ROOT_SOURCE_PATH}/src/QT/QT5UnixUTF8.cpp)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(HGL_QT_LIB CM.QT5Support)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
add_subdirectory(${CMPLATFORM_ROOT_SOURCE_PATH})
|
add_subdirectory(${CMPLATFORM_ROOT_SOURCE_PATH})
|
10
inc/hgl/QT.h
Normal file
10
inc/hgl/QT.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef HGL_QT_INCLUDE
|
||||||
|
#define HGL_QT_INCLUDE
|
||||||
|
|
||||||
|
#include<hgl/type/QTString.h>
|
||||||
|
#include<QObject>
|
||||||
|
|
||||||
|
#define QTConnect(obj,event,class_pointer,slot_func) QObject::connect(obj,SIGNAL(event()),class_pointer,SLOT(slot_func()))
|
||||||
|
|
||||||
|
#endif//HGL_QT_INCLUDE
|
||||||
|
|
28
inc/hgl/platform/QT5.h
Normal file
28
inc/hgl/platform/QT5.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef HGL_QT5_MAIN_INCLUDE
|
||||||
|
#define HGL_QT5_MAIN_INCLUDE
|
||||||
|
|
||||||
|
#include<hgl/platform/QT5Application.h>
|
||||||
|
#include<hgl/platform/ConsoleSystemInitInfo.h>
|
||||||
|
|
||||||
|
#define HGL_QT_MAIN(sii_name,app_name,arg_name) extern "C" int QT5AppMain(hgl::ConsoleSystemInitInfo &sii_name,hgl::QT5GuiApplication &app_name,const hgl::StringList<hgl::OSString> &arg_name)
|
||||||
|
|
||||||
|
#define QTConnect(obj,event,class_pointer,slot_func) connect(obj,SIGNAL(event()),class_pointer,SLOT(slot_func()))
|
||||||
|
|
||||||
|
#define HGL_QT_MAIN_FUNC() HGL_QT_MAIN(sii,app,args)
|
||||||
|
|
||||||
|
#define HGL_QT_APPLICATION(name,code,start) using namespace hgl; \
|
||||||
|
\
|
||||||
|
HGL_QT_MAIN_FUNC()\
|
||||||
|
{ \
|
||||||
|
sii.info.ProjectName=name; \
|
||||||
|
sii.info.ProjectCode=code; \
|
||||||
|
\
|
||||||
|
if(!app.Init(&sii)) \
|
||||||
|
return(-1); \
|
||||||
|
\
|
||||||
|
app.SetStart(start); \
|
||||||
|
\
|
||||||
|
return app.Run(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif//HGL_QT5_MAIN_INCLUDE
|
33
inc/hgl/platform/QT5Application.h
Normal file
33
inc/hgl/platform/QT5Application.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef HGL_QT5_APPLICATION_INCLUDE
|
||||||
|
#define HGL_QT5_APPLICATION_INCLUDE
|
||||||
|
|
||||||
|
#include<hgl/QT.h>
|
||||||
|
|
||||||
|
class QApplication;
|
||||||
|
#include<hgl/platform/ConsoleApplication.h>
|
||||||
|
|
||||||
|
namespace hgl
|
||||||
|
{
|
||||||
|
class QT5GuiApplication:public ConsoleApplication
|
||||||
|
{
|
||||||
|
QApplication *qt_app;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
QT5GuiApplication(QApplication *);
|
||||||
|
~QT5GuiApplication();
|
||||||
|
|
||||||
|
int exec();
|
||||||
|
};//class QT5GuiApplication
|
||||||
|
}//namespace hgl
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 控制台程序总入口函数
|
||||||
|
* @param sii 系统初始化信息类,需由开发者补充填写一定的信息
|
||||||
|
* @param app 应用程序整体控制管理类
|
||||||
|
* @param args 由命令行或其它程序传来的参数列表
|
||||||
|
* @return 返回值,将会回传给操作系统
|
||||||
|
*/
|
||||||
|
extern "C" int QT5AppMain(hgl::ConsoleSystemInitInfo &sii,hgl::QT5GuiApplication &app,const hgl::StringList<hgl::OSString> &args);
|
||||||
|
|
||||||
|
#endif//HGL_QT5_APPLICATION_INCLUDE
|
72
inc/hgl/type/QTString.h
Normal file
72
inc/hgl/type/QTString.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#ifndef HGL_QT_STRING_INCLUDE
|
||||||
|
#define HGL_QT_STRING_INCLUDE
|
||||||
|
|
||||||
|
#include<hgl/type/BaseString.h>
|
||||||
|
#include<hgl/CodePage.h>
|
||||||
|
#include<QString>
|
||||||
|
|
||||||
|
#if HGL_OS == HGL_OS_Windows
|
||||||
|
inline QString toQString(const hgl::WideString &ws)
|
||||||
|
{
|
||||||
|
return QString::fromWCharArray(ws.c_str(),ws.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
inline QString toQString(const wchar_t *str,int size){return QString::fromWCharArray(str,size);}
|
||||||
|
|
||||||
|
inline hgl::UTF8String ToUTF8String(const QString &str)
|
||||||
|
{
|
||||||
|
QByteArray u8str=str.toUtf8();
|
||||||
|
|
||||||
|
return hgl::UTF8String(u8str.data(),u8str.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
inline hgl::WideString ToOSString(const QString &str)
|
||||||
|
{
|
||||||
|
//qt有toWCharArray(),但是不能预估wchar_t的长度,所以暂时使用先UTF8,再转utf16的方式
|
||||||
|
|
||||||
|
QByteArray u8str=str.toUtf8();
|
||||||
|
|
||||||
|
return hgl::to_u16(u8str.data(),u8str.size());
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
template<int WS> QString WCharToQString(const wchar_t *,int);
|
||||||
|
|
||||||
|
template<> inline QString WCharToQString<2>(const wchar_t *str,int size){return QString::fromUtf16((ushort *)str,size);}
|
||||||
|
template<> inline QString WCharToQString<4>(const wchar_t *str,int size){return QString::fromUcs4((uint *)str,size);}
|
||||||
|
|
||||||
|
inline QString toQString(const wchar_t *str,int size)
|
||||||
|
{
|
||||||
|
return WCharToQString<sizeof(wchar_t)>(str,size);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline QString toQString(const u16char *str,int size){return QString::fromUtf16((ushort *)str,size);}
|
||||||
|
inline QString toQString(const char32_t *str,int size){return QString::fromUcs4((uint *)str,size);}
|
||||||
|
|
||||||
|
inline QString toQString(const hgl::UTF16String &str)
|
||||||
|
{
|
||||||
|
return QString::fromUtf16((ushort *)str.c_str(), str.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
inline hgl::UTF8String ToUTF8String(const QString &str)
|
||||||
|
{
|
||||||
|
QByteArray u8str=str.toUtf8();
|
||||||
|
|
||||||
|
return hgl::UTF8String(u8str.data(),u8str.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
inline hgl::UTF8String ToOSString(const QString &str)
|
||||||
|
{
|
||||||
|
return ToUTF8String(str);
|
||||||
|
}
|
||||||
|
#endif//HGL_OS == HGL_OS_Windows
|
||||||
|
|
||||||
|
inline QString toQString(const hgl::UTF8String &str)
|
||||||
|
{
|
||||||
|
return QString::fromUtf8(str.c_str(),str.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
// inline QString toQString(const hgl::UTF32String &str)
|
||||||
|
// {
|
||||||
|
// return QString::fromUcs4((uint *)str.c_str(),str.Length());
|
||||||
|
// }
|
||||||
|
#endif//HGL_QT_STRING_INCLUDE
|
11
src/QT/CMakeLists.txt
Normal file
11
src/QT/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
IF(BUILD_QT5_SUPPORT_LIB)
|
||||||
|
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Gui Widgets)
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
add_library(CM.QT5Support STATIC QT5GuiApplication.cpp)
|
||||||
|
ELSE()
|
||||||
|
add_library(CM.QT5Support SHARED QT5GuiApplication.cpp)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
target_link_libraries(CM.QT5Support Qt5::Core Qt5::Gui Qt5::Widgets)
|
||||||
|
ENDIF(BUILD_QT5_SUPPORT_LIB)
|
18
src/QT/QT5GuiApplication.cpp
Normal file
18
src/QT/QT5GuiApplication.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include<hgl/platform/QT5Application.h>
|
||||||
|
#include<QApplication>
|
||||||
|
|
||||||
|
namespace hgl
|
||||||
|
{
|
||||||
|
QT5GuiApplication::QT5GuiApplication(QApplication *qa):qt_app(qa)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QT5GuiApplication::~QT5GuiApplication()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int QT5GuiApplication::exec()
|
||||||
|
{
|
||||||
|
return qt_app->exec();
|
||||||
|
}
|
||||||
|
}//namespace hgl
|
20
src/QT/QT5UnixUTF8.cpp
Normal file
20
src/QT/QT5UnixUTF8.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#include<hgl/Console.h>
|
||||||
|
#include<hgl/platform/QT5Application.h>
|
||||||
|
#include<QApplication>
|
||||||
|
|
||||||
|
using namespace hgl;
|
||||||
|
|
||||||
|
int main(int argc,char **argv)
|
||||||
|
{
|
||||||
|
QApplication qt_app(argc,argv);
|
||||||
|
|
||||||
|
StringList<UTF8String> sl;
|
||||||
|
|
||||||
|
for(int i=0;i<argc;i++)
|
||||||
|
sl.Add(argv[i]);
|
||||||
|
|
||||||
|
ConsoleSystemInitInfo sii;
|
||||||
|
QT5GuiApplication app(&qt_app);
|
||||||
|
|
||||||
|
return QT5AppMain(sii,app,sl);
|
||||||
|
}
|
34
src/QT/QT5WinUCS2.cpp
Normal file
34
src/QT/QT5WinUCS2.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include<hgl/Console.h>
|
||||||
|
#include<windows.h>
|
||||||
|
#include<hgl/platform/QT5Application.h>
|
||||||
|
#include<QApplication>
|
||||||
|
|
||||||
|
extern "C" int WINAPI wWinMain(HINSTANCE,HINSTANCE,wchar_t *cmd_line,int)
|
||||||
|
{
|
||||||
|
wchar_t **w_argv;
|
||||||
|
char **argv;
|
||||||
|
int argc;
|
||||||
|
|
||||||
|
w_argv = CommandLineToArgvW(cmd_line, &argc);
|
||||||
|
|
||||||
|
hgl::StringList<hgl::UTF16String> sl;
|
||||||
|
hgl::StringList<hgl::UTF8String> sl8;
|
||||||
|
|
||||||
|
argv = new char *[argc];
|
||||||
|
|
||||||
|
for (int i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
sl.Add(w_argv[i]);
|
||||||
|
sl8.Add(hgl::to_u8(w_argv[i]));
|
||||||
|
|
||||||
|
argv[i] = sl8[i].c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
QApplication qt_app(argc,argv);
|
||||||
|
|
||||||
|
hgl::ConsoleSystemInitInfo sii;
|
||||||
|
hgl::QT5GuiApplication app(&qt_app);
|
||||||
|
|
||||||
|
delete[] argv;
|
||||||
|
return QT5AppMain(sii, app, sl);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user