add QT5 support

This commit is contained in:
2020-07-01 16:23:51 +08:00
parent 9b1975a8a5
commit 165e95c0d5
9 changed files with 248 additions and 1 deletions

10
inc/hgl/QT.h Normal file
View 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
View 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

View 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
View 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