Browse Source

V0.7.0
1、重新修改了文件布局方式,将common分开成了两个文件夹

Apple 4 tháng trước cách đây
mục cha
commit
e486ec4fdf
99 tập tin đã thay đổi với 8538 bổ sung188 xóa
  1. 20 0
      common/LHColorDialog/DropShadow/dropshadowmgr.cpp
  2. 46 0
      common/LHColorDialog/DropShadow/dropshadowmgr.h
  3. 68 0
      common/LHColorDialog/DropShadow/idropshadowable.cpp
  4. 75 0
      common/LHColorDialog/DropShadow/idropshadowable.h
  5. 27 0
      common/LHColorDialog/ImageBlur/blurutility.cpp
  6. 13 0
      common/LHColorDialog/ImageBlur/blurutility.h
  7. 99 0
      common/LHColorDialog/ImageBlur/imageblur.cpp
  8. 48 0
      common/LHColorDialog/ImageBlur/imageblur.h
  9. 37 0
      common/LHColorDialog/LHColorDialog.pro
  10. 12 0
      common/LHColorDialog/LHColorDialog_global.h
  11. 186 0
      common/LHColorDialog/PaintHelper/painthelper.cpp
  12. 75 0
      common/LHColorDialog/PaintHelper/painthelper.h
  13. 33 0
      common/LHColorDialog/api/colordialogapi.cpp
  14. 25 0
      common/LHColorDialog/api/colordialogapi.h
  15. 203 0
      common/LHColorDialog/lhcolordialog.cpp
  16. 51 0
      common/LHColorDialog/lhcolordialog.h
  17. BIN
      common/LHColorDialog/qt_zh_CN.qm
  18. 7144 0
      common/LHColorDialog/qt_zh_CN.qm.ts
  19. 7 0
      common/LHColorDialog/resource.qrc
  20. 81 0
      common/LHColorDialog/skins/bright.qss
  21. 100 0
      common/LHColorDialog/skins/dark.qss
  22. 0 0
      module/CurlFtp/CurlFtp.cpp
  23. 0 0
      module/CurlFtp/CurlFtp.h
  24. 0 0
      module/CurlFtp/CurlFtpInfo.h
  25. 0 0
      module/CurlHttp/CurlHttp.cpp
  26. 0 0
      module/CurlHttp/CurlHttp.h
  27. 0 0
      module/FmtLog/fmtlog.h
  28. 0 0
      module/LightLog/LightLog.cpp
  29. 0 0
      module/LightLog/LightLog.h
  30. 0 0
      module/Logs/loginit.cpp
  31. 0 0
      module/Logs/loginit.h
  32. 0 0
      module/OneThread/OneThread.cpp
  33. 0 0
      module/OneThread/OneThread.h
  34. 0 0
      module/RingQueue/RingQueue.hpp
  35. 0 0
      module/StdLog/stdlog.h
  36. 0 0
      module/ThreadPool/ThreadPool.cpp
  37. 0 0
      module/ThreadPool/ThreadPool.h
  38. 0 0
      module/ThreadPool/ThreadPool_fmtlog.cpp_
  39. 0 0
      module/ThreadPool/ThreadPool_fmtlog.h_
  40. 0 0
      module/ThreadPool/ThreadPool_spdlog.cpp_
  41. 0 0
      module/ThreadPool/ThreadPool_spdlog.h_
  42. 0 0
      module/Timer/TWTimer.hpp
  43. 0 0
      module/Timer/tw.cpp
  44. 0 0
      module/Timer/tw.h
  45. 0 0
      module/VideoPlayer/DecodeVedio.cpp
  46. 0 0
      module/VideoPlayer/DecodeVedio.h
  47. 0 0
      module/VideoPlayer/VideoPlayer.cpp
  48. 0 0
      module/VideoPlayer/VideoPlayer.h
  49. 0 0
      module/ftp/QtFtp.cpp
  50. 0 0
      module/ftp/QtFtp.h
  51. 0 0
      module/http/QtHttps.cpp
  52. 0 0
      module/http/QtHttps.h
  53. 124 124
      module/mqtt/MQTTBase.cpp
  54. 64 64
      module/mqtt/MQTTBase.h
  55. 0 0
      module/nlohmann/adl_serializer.hpp
  56. 0 0
      module/nlohmann/byte_container_with_subtype.hpp
  57. 0 0
      module/nlohmann/detail/abi_macros.hpp
  58. 0 0
      module/nlohmann/detail/conversions/from_json.hpp
  59. 0 0
      module/nlohmann/detail/conversions/to_chars.hpp
  60. 0 0
      module/nlohmann/detail/conversions/to_json.hpp
  61. 0 0
      module/nlohmann/detail/exceptions.hpp
  62. 0 0
      module/nlohmann/detail/hash.hpp
  63. 0 0
      module/nlohmann/detail/input/binary_reader.hpp
  64. 0 0
      module/nlohmann/detail/input/input_adapters.hpp
  65. 0 0
      module/nlohmann/detail/input/json_sax.hpp
  66. 0 0
      module/nlohmann/detail/input/lexer.hpp
  67. 0 0
      module/nlohmann/detail/input/parser.hpp
  68. 0 0
      module/nlohmann/detail/input/position_t.hpp
  69. 0 0
      module/nlohmann/detail/iterators/internal_iterator.hpp
  70. 0 0
      module/nlohmann/detail/iterators/iter_impl.hpp
  71. 0 0
      module/nlohmann/detail/iterators/iteration_proxy.hpp
  72. 0 0
      module/nlohmann/detail/iterators/iterator_traits.hpp
  73. 0 0
      module/nlohmann/detail/iterators/json_reverse_iterator.hpp
  74. 0 0
      module/nlohmann/detail/iterators/primitive_iterator.hpp
  75. 0 0
      module/nlohmann/detail/json_custom_base_class.hpp
  76. 0 0
      module/nlohmann/detail/json_pointer.hpp
  77. 0 0
      module/nlohmann/detail/json_ref.hpp
  78. 0 0
      module/nlohmann/detail/macro_scope.hpp
  79. 0 0
      module/nlohmann/detail/macro_unscope.hpp
  80. 0 0
      module/nlohmann/detail/meta/call_std/begin.hpp
  81. 0 0
      module/nlohmann/detail/meta/call_std/end.hpp
  82. 0 0
      module/nlohmann/detail/meta/cpp_future.hpp
  83. 0 0
      module/nlohmann/detail/meta/detected.hpp
  84. 0 0
      module/nlohmann/detail/meta/identity_tag.hpp
  85. 0 0
      module/nlohmann/detail/meta/is_sax.hpp
  86. 0 0
      module/nlohmann/detail/meta/std_fs.hpp
  87. 0 0
      module/nlohmann/detail/meta/type_traits.hpp
  88. 0 0
      module/nlohmann/detail/meta/void_t.hpp
  89. 0 0
      module/nlohmann/detail/output/binary_writer.hpp
  90. 0 0
      module/nlohmann/detail/output/output_adapters.hpp
  91. 0 0
      module/nlohmann/detail/output/serializer.hpp
  92. 0 0
      module/nlohmann/detail/string_concat.hpp
  93. 0 0
      module/nlohmann/detail/string_escape.hpp
  94. 0 0
      module/nlohmann/detail/value_t.hpp
  95. 0 0
      module/nlohmann/json.hpp
  96. 0 0
      module/nlohmann/json_fwd.hpp
  97. 0 0
      module/nlohmann/ordered_map.hpp
  98. 0 0
      module/nlohmann/thirdparty/hedley/hedley.hpp
  99. 0 0
      module/nlohmann/thirdparty/hedley/hedley_undef.hpp

+ 20 - 0
common/LHColorDialog/DropShadow/dropshadowmgr.cpp

@@ -0,0 +1,20 @@
+#include "dropshadowmgr.h"
+#include "idropshadowable.h"
+
+DropShadowMgr::DropShadowMgrGarbo DropShadowMgr::garbo;
+DropShadowMgr* DropShadowMgr::sm_pInstance = new DropShadowMgr(nullptr);     //初始化静态单例(饿汉):
+QList<BoxShadow> DropShadowMgr::sm_cacheShadows;
+
+bool DropShadowMgr::eventFilter(QObject *watched, QEvent *event)
+{
+    IDropShadowable *pDropShadowableObj = dynamic_cast<IDropShadowable*>(watched);
+    if(pDropShadowableObj == nullptr)
+    {
+        return QObject::eventFilter(watched, event);
+    }
+    if(event->type() == QEvent::Paint)
+    {
+        pDropShadowableObj->PaintShadows();
+    }
+    return QObject::eventFilter(watched, event);
+}

+ 46 - 0
common/LHColorDialog/DropShadow/dropshadowmgr.h

@@ -0,0 +1,46 @@
+#ifndef DROPSHADOWMGR_H
+#define DROPSHADOWMGR_H
+
+#include <QObject>
+#include "idropshadowable.h"
+
+class DropShadowMgr : public QObject
+{
+    Q_OBJECT
+public:
+    static DropShadowMgr* Instance(){return sm_pInstance;}
+    ~DropShadowMgr() override {sm_pInstance = nullptr;}
+public:
+    //static QMap<BoxShadow, QImage> sm_cacheShadows;
+    static QList<BoxShadow> sm_cacheShadows;
+private:
+    DropShadowMgr(QObject *parent = nullptr):QObject(parent){}
+    //防拷贝, C++11
+    DropShadowMgr(DropShadowMgr const&) = delete;
+	DropShadowMgr& operator=(DropShadowMgr const&) = delete;
+    
+private:
+    static DropShadowMgr* sm_pInstance;     //单例实例
+public:
+    virtual bool eventFilter(QObject *watched, QEvent *event) override;
+    /*----------------------------------------------------------------
+     * 关于释放全局单例: 
+     * 一个妥善的方法是让这个类自己知道在合适的时候把自己删除; 或者说把删除自己的操作挂在系统中的某个合适的点上, 使其在恰当的时候自动被执行;
+     * 程序在结束的时候, 系统会自动析构所有的全局变量;事实上, 系统也会析构所有的类的静态成员变量, 就像这些静态成员也是全局变量一样;
+     * 利用这个特征, 我们可以在单例类中定义一个这样的静态成员变量, 而它的唯一工作就是在析构函数中删除单例类的实例;
+    ----------------------------------------------------------------*/
+private:
+    class DropShadowMgrGarbo
+    {
+    public:
+        ~DropShadowMgrGarbo()
+        {  
+            if(DropShadowMgr::sm_pInstance != nullptr)
+                delete DropShadowMgr::sm_pInstance;
+        }
+    };
+    static DropShadowMgrGarbo garbo;
+    /*----------------------------------------------------------------*/
+};
+
+#endif // DROPSHADOWMGR_H

+ 68 - 0
common/LHColorDialog/DropShadow/idropshadowable.cpp

@@ -0,0 +1,68 @@
+#include "idropshadowable.h"
+#include "dropshadowmgr.h"
+#include "../ImageBlur/imageblur.h"
+#include "../PaintHelper/painthelper.h"
+#include <QDebug>
+
+IDropShadowable::IDropShadowable(QWidget *selfWidget)
+    : m_pSelfWidget(selfWidget)
+{
+    selfWidget->installEventFilter(DropShadowMgr::Instance());
+}
+
+void IDropShadowable::SetDropShadow(const BoxShadow &boxShadow, const QSize &size)
+{
+    ClearDropShadow();
+    DropShadowMgr::sm_cacheShadows.clear();
+    m_listShadows.append(boxShadow);
+    if(!DropShadowMgr::sm_cacheShadows.contains(boxShadow))
+    {
+        int radius = boxShadow.radius;
+        int imageWidth = size.width()+radius*2;
+        int imageHeight = size.height()+radius*2;
+        QImage image(imageWidth, imageHeight, QImage::Format_ARGB32);
+        image.fill(boxShadow.color);
+        //边框设为透明
+        for(int x=0;x<image.width();x++)
+        {
+            for(int y=0;y<image.height();y++)
+            {
+                if(x>=radius && x<(image.width()-radius) && y>=radius && y<(image.height()-radius)) continue;
+                image.setPixelColor(QPoint(x,y), Qt::transparent);
+            }
+        }
+        GaussBlur::Blur(image, boxShadow.radius);
+        
+        BoxShadow shadow_image(boxShadow);
+        shadow_image.image = image;
+        DropShadowMgr::sm_cacheShadows.append(shadow_image);
+    }
+    m_pSelfWidget->update();
+}
+
+void IDropShadowable::SetDropShadows(const QList<BoxShadow> &shadows, const QSize &size)
+{
+    Q_UNUSED(shadows)
+    Q_UNUSED(size)
+    //找到最大的radius, x偏移, y偏移
+    return;
+}
+
+void IDropShadowable::ClearDropShadow()
+{
+    m_listShadows.clear();
+    m_pSelfWidget->update();
+}
+
+void IDropShadowable::PaintShadows()
+{
+    PainterEx painter(m_pSelfWidget);
+    painter.setRenderHint(QPainter::Antialiasing);
+    for(const BoxShadow &boxShadow: m_listShadows)
+    {
+        int index = DropShadowMgr::sm_cacheShadows.indexOf(boxShadow);
+        if(index == -1) continue;
+        QImage image = DropShadowMgr::sm_cacheShadows.at(index).image;
+        painter.drawImage(image.rect(), image, image.rect());
+    }
+}

+ 75 - 0
common/LHColorDialog/DropShadow/idropshadowable.h

@@ -0,0 +1,75 @@
+#ifndef IDROPSHADOWABLE_H
+#define IDROPSHADOWABLE_H
+
+#include <QList>
+#include <QSize>
+#include <QColor>
+#include <QWidget>
+#include <QDebug>
+struct BoxShadow
+{
+    int x;
+    int y;
+    int radius;
+    int spread;
+    QColor color;
+    QSize boxSize;
+    QImage image;
+    //BoxShadow():x(0),y(0),radius(0),spread(0),color(QColor()),boxSize(QSize()){}
+    bool operator==(const BoxShadow &rhs) const
+    {
+        return (this->radius == rhs.radius)
+                &&(this->spread == rhs.spread)
+                &&(this->color == rhs.color)
+                &&(this->boxSize == rhs.boxSize);
+    }
+    bool operator<(const BoxShadow &rhs) const
+    {
+        /*----------------------------------------------------------------
+         * QMap中通过<运算符来比较两个参数是否相等
+         * 即通过a<b来判断是否相等,若小于成立,则说明不相等,便会插入;
+         * 若小于不成立,则说明要么大于,要么等于;
+         * 然后再反过来比较一次,即b<a,若这次小于成立,则b>a,则说明它们不相等,便会插入,否则相等。
+        ----------------------------------------------------------------*/
+        if((this->radius == rhs.radius)
+            &&(this->spread == rhs.spread)
+            &&(this->color == rhs.color)
+            &&(this->boxSize == rhs.boxSize))
+        {
+            return false;
+        }
+        else 
+        {
+            return true;    
+        }
+        //return this->radius < rhs.radius;
+    }
+    friend QDebug operator<<(QDebug debug, const BoxShadow &boxShadow)
+    {
+//        QString info = QString("[x: %1][y: %2][radius: %3][spread: %4][size: (%5,%6)]")
+//                .arg(boxShadow.x).arg(boxShadow.y).arg(boxShadow.radius).arg(boxShadow.spread)
+//                .arg(boxShadow.boxSize.width()).arg(boxShadow.boxSize.height());
+        debug << QString("(%1,%2)").arg(boxShadow.x).arg(boxShadow.y)
+              <<boxShadow.color<<boxShadow.radius<<boxShadow.spread<<boxShadow.boxSize;
+        return debug;
+    }
+};
+Q_DECLARE_METATYPE(BoxShadow);
+
+class IDropShadowable
+{
+public:
+    IDropShadowable(){}
+    IDropShadowable(QWidget *selfWidget);
+protected:
+    void SetDropShadow(const BoxShadow &boxShadow, const QSize &size);
+    void SetDropShadows(const QList<BoxShadow> &shadows, const QSize &size);
+    void ClearDropShadow();
+private:
+    QWidget *m_pSelfWidget;
+    QList<BoxShadow> m_listShadows;
+public:
+    void PaintShadows();
+};
+
+#endif // IDROPSHADOWABLE_H

+ 27 - 0
common/LHColorDialog/ImageBlur/blurutility.cpp

@@ -0,0 +1,27 @@
+#include "blurutility.h"
+#include "imageblur.h"
+#include <QPainter>
+
+//------------------------------------------------------------------------
+//函    数: CreateInnerShadow(QImage &image, const QColor &color, int radius)
+//
+//说    明: 创建内阴影image
+//
+//参    数: 
+//[传入传出]image 传入已分配好内存空间(且具备长宽)的image对象, 传出处理后的image对象
+//[传入]color 阴影颜色
+//[传入]radius 阴影扩散程度
+//
+//返 回 值:是否成功
+//------------------------------------------------------------------------
+bool BlurUtility::CreateInnerShadow(QImage &image, const QColor &color, int radius)
+{
+    if(image.isNull()) return false;
+    QPainter p;
+    p.begin(&image);
+    p.setPen(QPen(color, 2));
+    p.drawRect(QRect(0, 0, image.width(), image.height()));
+    p.end();
+    GaussBlur::Blur(image, radius);
+    return true;
+}

+ 13 - 0
common/LHColorDialog/ImageBlur/blurutility.h

@@ -0,0 +1,13 @@
+#ifndef BLURUTILITY_H
+#define BLURUTILITY_H
+
+#include <QColor>
+#include <QImage>
+
+class BlurUtility
+{
+public:
+    static bool CreateInnerShadow(QImage &image, const QColor &color = Qt::black, int radius = 8);
+};
+
+#endif // BLURUTILITY_H

+ 99 - 0
common/LHColorDialog/ImageBlur/imageblur.cpp

@@ -0,0 +1,99 @@
+#include "imageblur.h"
+#include <QtMath>
+#include <QDebug>
+
+//边缘算法
+//i: 偏移
+//x: 当前位置
+//w: 范围(位置范围是0 -> w)
+//返回: x周边第i个的位置
+template <typename T>
+T ImageBlurUtility::Edge(T i, T x, T w)
+{
+    //x周边第i个的位置
+    T i_k = x + i;
+    if      (i_k < 0)  i_k = -x;
+    else if (i_k >= w) i_k = w - 1 - x;
+    else               i_k = i;
+    return i_k;
+}
+//归一化
+void ImageBlurUtility::Normalization(std::vector<double> &kernels)
+{
+    double sum = std::accumulate(kernels.begin(), kernels.end(), 0.0);
+    if(qFuzzyCompare(sum, 0)) return;
+    if(qFuzzyCompare(sum, 1.0)) return;
+    std::transform(kernels.begin(), kernels.end(), kernels.begin(),
+                   [sum](double x){ return x/sum; });
+}
+//得到高斯核(把radius带入高斯公式求解)
+std::vector<double> GaussBlur::GetKernels(int radius)
+{
+    static const double SQRT2PI = qSqrt(2.0 * 3.14159265358979323);
+
+    double sigma = (double)radius / 3.0;
+    double sigma2 = 2.0 * sigma * sigma;
+    double sigmap = sigma * SQRT2PI;
+    
+    std::vector<double> kernels;
+    for(int i = -radius; i <= radius; ++i)
+    {
+        kernels.push_back(qExp(-(double)(i * i) / sigma2) / sigmap);
+    }
+    return kernels;
+}
+
+
+void GaussBlur::Blur(QImage &image, int radius)
+{
+    std::vector<double> kernels = GetKernels(radius);
+    ImageBlurUtility::Normalization(kernels);
+    
+    typedef ImageBlurUtility::pixel_t pixel; 
+    typedef ImageBlurUtility::buff_t buff; 
+    
+    pixel *pData = (pixel*)image.bits();
+    
+    //栈的空间小, 所以这里buffer分配到堆
+    const int size = image.width() * image.height();
+    buff *pBuffer = new buff[size];
+    
+    for(int inx = 0, y = 0; y < image.height(); ++y)
+    {
+        for(int x = 0; x < image.width(); ++x, ++inx)
+        {
+            for(int n = 0, i = -radius; i <= radius; ++i, ++n)
+            {
+                long i_k = ImageBlurUtility::Edge(i, x, image.width());
+                long inx_k = inx + i_k;
+                pBuffer[inx].r += pData[inx_k].r() * kernels[n];
+                pBuffer[inx].g += pData[inx_k].g() * kernels[n];
+                pBuffer[inx].b += pData[inx_k].b() * kernels[n];
+                pBuffer[inx].a += pData[inx_k].a() * kernels[n];
+            }
+        }
+    }
+    
+    for(int inx = 0, x = 0; x < image.width(); ++x)
+    {
+        for(int y = 0; y < image.height(); ++y)
+        {
+            inx = y * image.width() + x;
+            buff buffer;
+            for(int n = 0, i = -radius; i <= radius; ++i, ++n)
+            {
+                int i_k = ImageBlurUtility::Edge(i, y, image.height());
+                int inx_k = inx + i_k * image.width();
+                buffer.r += pBuffer[inx_k].r * kernels[n];
+                buffer.g += pBuffer[inx_k].g * kernels[n];
+                buffer.b += pBuffer[inx_k].b * kernels[n];
+                buffer.a += pBuffer[inx_k].a * kernels[n];
+            }
+            pData[inx].Set(buffer.Red(), buffer.Green(), buffer.Blue(), buffer.Alpha());
+            //pData[inx].Set(Clamp<int>(r), Clamp<int>(g), Clamp<int>(b), Clamp<int>(a));
+        }
+    }
+    delete[] pBuffer;
+}
+
+

+ 48 - 0
common/LHColorDialog/ImageBlur/imageblur.h

@@ -0,0 +1,48 @@
+#ifndef IMAGEBLUR_H
+#define IMAGEBLUR_H
+
+#include <QImage>
+
+class ImageBlurUtility
+{
+public:
+    //QImage存储数据的方式参考qrgb.h, 按AARRGGBB存
+    //unsigned int4字节, 刚好存放rgba
+    struct pixel_t
+    {
+        unsigned int rgba = 0;
+        inline int r() const { return ((rgba >> 16) & 0xff); }
+        inline int g() const { return ((rgba >> 8) & 0xff); }
+        inline int b() const { return (rgba & 0xff); }
+        inline int a() const { return rgba >> 24; }
+        inline void Set(int r, int g, int b, int a)
+        { rgba = ((a & 0xffu) << 24) | ((r & 0xffu) << 16) | ((g & 0xffu) << 8) | (b & 0xffu); }
+    };
+    //计算时用, 将整数的rgba值变为double类型来作计算, 最后再用qRound转回整数
+    struct buff_t
+    {
+        double r, g, b, a;
+        buff_t() : r(0.0), g(0.0), b(0.0), a(0.0) {}
+        buff_t(const pixel_t &pixel):r(pixel.r()),g(pixel.g()),b(pixel.b()),a(pixel.a()) {}
+        inline int Red() const { return qRound(r); }
+        inline int Green() const { return qRound(g); }
+        inline int Blue() const { return qRound(b); }
+        inline int Alpha() const { return qRound(a); }
+    };
+    
+public:
+    template <typename T>
+    static T Edge(T i, T x, T w);
+public:
+    static void Normalization(std::vector<double> &kernels);
+};
+
+class GaussBlur
+{
+public:
+    static void Blur(QImage &image, int radius);
+private:
+    static std::vector<double> GetKernels(int radius);
+};
+
+#endif // IMAGEBLUR_H

+ 37 - 0
common/LHColorDialog/LHColorDialog.pro

@@ -0,0 +1,37 @@
+QT -= gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TEMPLATE = lib
+DEFINES += EXPORT_LIBRARY
+
+CONFIG += c++11
+
+# You can make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+QMAKE_RPATHDIR += ./
+
+SOURCES += \
+    colordialogapi.cpp \
+    lhcolordialog.cpp \
+    $$files(DropShadow/*.cpp, false) \
+    $$files(ImageBlur/*.cpp, false) \
+    $$files(PaintHelper/*.cpp, false)
+
+HEADERS += \
+    colordialogapi.h \
+    lhcolordialog.h \
+    $$files(DropShadow/*.h, false) \
+    $$files(ImageBlur/*.h, false) \
+    $$files(PaintHelper/*.h, false)
+
+# Default rules for deployment.
+unix {
+    target.path = /usr/lib
+}
+!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+    resource.qrc

+ 12 - 0
common/LHColorDialog/LHColorDialog_global.h

@@ -0,0 +1,12 @@
+#ifndef LHCOLORDIALOG_GLOBAL_H
+#define LHCOLORDIALOG_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(LHCOLORDIALOG_LIBRARY)
+#  define LHCOLORDIALOG_EXPORT Q_DECL_EXPORT
+#else
+#  define LHCOLORDIALOG_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // LHCOLORDIALOG_GLOBAL_H

+ 186 - 0
common/LHColorDialog/PaintHelper/painthelper.cpp

@@ -0,0 +1,186 @@
+#include "painthelper.h"
+
+FontEx::FontEx(const QString &family, int pixelSize, bool bold) : QFont(family)
+{
+    setPixelSize(pixelSize);
+    setBold(bold);
+}
+
+FontEx::FontEx(FontEx::NotoSansType type, int pixelSize)
+{
+    QString family = "黑体";
+    if(type == NotoSansType::Normal) family = "思源黑体 CN Normal";
+    if(type == NotoSansType::Medium) family = "思源黑体 CN Medium";
+    if(type == NotoSansType::Regular) family = "思源黑体 CN Regular";
+    if(type == NotoSansType::Bold) family = "思源黑体 CN Bold";
+    if(type == NotoSansType::Light) family = "思源黑体 CN Light";
+    setFamily(family);
+    setPixelSize(pixelSize);
+}
+
+PainterEx::PainterEx(QPaintDevice *device): QPainter(device)
+{
+    
+}
+
+
+void PainterEx::SetBrushOnly(const QColor &color)
+{
+    setPen(Qt::transparent);
+    setBrush(color);
+}
+
+void PainterEx::SetPenOnly(const QColor &color, qreal width, Qt::PenStyle style)
+{
+    setPen(QPen(color, width, style));
+    setBrush(Qt::transparent);
+}
+//------------------------------------------------------------------------
+//函    数:DrawCircle(QPointF center, double radius, const QColor &color = QColor())
+//
+//说    明:画圆的函数
+//
+//参    数:
+//[传入]center 中心点
+//[传入]radius 半径
+//
+//返 回 值:
+//------------------------------------------------------------------------
+void PainterEx::DrawCircle(QPointF center, double radius, const QColor &brush, const QPen &pen)
+{
+    save();
+    setRenderHint(QPainter::Antialiasing);
+    setPen(pen);
+    setBrush(brush.isValid()?brush:QColor(0,0,0,0));
+    translate(center - QPointF(radius, radius));
+    drawEllipse(QRectF(0, 0, radius*2, radius*2));
+    restore();
+}
+//------------------------------------------------------------------------
+//函    数:DrawTextTwice(const QRectF &textRect, const QString &text, const QColor &color = QColor(), Qt::Alignment flags = Qt::AlignHCenter|Qt::AlignVCenter);
+//
+//说    明:思源黑体连续绘制两次, 否则会有点失真
+//
+//参    数:
+//[传入]textRect 
+//[传入]text 
+//[传入]color 
+//[传入]flags 
+//
+//返 回 值:
+//------------------------------------------------------------------------
+void PainterEx::DrawTextTwice(const QRectF &textRect, const QString &text, const QColor &color, Qt::Alignment flags)
+{
+    save();
+    if(color.isValid()) SetPenOnly(color);
+    drawText(textRect, static_cast<int>(flags), text);
+    drawText(textRect, static_cast<int>(flags), text);
+    restore();
+}
+void PainterEx::DrawText(const QRectF &textRect, const QString &text, const QColor &color, Qt::Alignment flags)
+{
+    save();
+    if(color.isValid()) SetPenOnly(color);
+    drawText(textRect, static_cast<int>(flags), text);
+    restore();
+}
+
+void PainterEx::DrawRoundedRect(const QRectF &rect, int radius, const QColor &color, RoundedCorners flags)
+{
+//    save();
+//    setRenderHint(QPainter::Antialiasing);
+//    if(color.isValid()) SetBrushOnly(color);
+//    //先画4个圆
+//    DrawCircle(QPointF(radius, radius), radius, color);
+//    DrawCircle(QPointF(textRect.width() - radius, radius), radius, color);
+//    DrawCircle(QPointF(radius, textRect.height() - radius), radius, color);
+//    DrawCircle(QPointF(textRect.width() - radius, textRect.height() - radius), radius, color);
+//    //再画2个矩形
+//    drawRect(textRect.adjusted(0, radius, 0, -radius));
+//    drawRect(textRect.adjusted(radius, 0, -radius, 0));
+//    restore();
+    
+    save();
+    setRenderHint(QPainter::Antialiasing);
+    if(color.isValid()) SetBrushOnly(color);
+    QRectF cornerRect(0, 0, radius*2, radius*2);
+    //下面arcTo都是逆时针画90°弧
+    QPainterPath roundPath; //圆角矩形
+    roundPath.setFillRule(Qt::WindingFill);
+    
+    //起点
+    QPointF topLeftPoint = flags.testFlag(RoundedCorner::TopLeft)?QPointF(radius, 0):QPointF(0, 0);
+    QPointF bottomLeftPoint = flags.testFlag(RoundedCorner::BottomLeft)?QPointF(0, rect.height()-radius):QPointF(0, rect.height());
+    QPointF bottomRightPoint = flags.testFlag(RoundedCorner::BottomRight)?QPointF(rect.width()-radius, rect.height()):QPointF(rect.width(), rect.height());
+    QPointF topRightPoint = flags.testFlag(RoundedCorner::TopRight)?QPointF(rect.width(), radius):QPointF(rect.width(), 0);
+    
+    roundPath.moveTo(topLeftPoint);//左上角
+    if(flags.testFlag(RoundedCorner::TopLeft)) roundPath.arcTo(cornerRect, 90, 90);
+    roundPath.lineTo(bottomLeftPoint);//左下角
+    if(flags.testFlag(RoundedCorner::BottomLeft)) roundPath.arcTo(cornerRect.translated(0, rect.height()-radius*2), 180, 90);
+    roundPath.lineTo(bottomRightPoint);//右下角
+    if(flags.testFlag(RoundedCorner::BottomRight)) roundPath.arcTo(cornerRect.translated(rect.width()-radius*2, rect.height()-radius*2), 270, 90);
+    roundPath.lineTo(topRightPoint);//右上角
+    if(flags.testFlag(RoundedCorner::TopRight)) roundPath.arcTo(cornerRect.translated(rect.width()-radius*2, 0), 360, 90);
+    roundPath.closeSubpath();
+    
+    translate(rect.topLeft());
+    drawPath(roundPath);
+    restore();
+}
+
+void PainterEx::DrawPixmap(const QRectF &rect, const QPixmap &pixmap)
+{
+    QRectF sourceRect(0.0, 0.0, pixmap.width(), pixmap.height());
+    drawPixmap(rect, pixmap, sourceRect);
+}
+
+void PainterEx::DrawPixmap(const QRectF &rect, const QString &srcPath, int alpha)
+{
+    save();
+    QPixmap pixmap(srcPath);
+    if(alpha != 255)
+    {//将pixmap处理成半透明
+        QPixmap temp(pixmap.size());
+        temp.fill(Qt::transparent);
+        QPainter p1(&temp);
+        p1.setCompositionMode(QPainter::CompositionMode_Source);
+        p1.drawPixmap(0, 0, pixmap);
+        p1.setCompositionMode(QPainter::CompositionMode_DestinationIn);
+        p1.fillRect(temp.rect(), QColor(0, 0, 0, alpha));
+        p1.end();
+        pixmap = temp;
+    }
+    QRectF sourceRect(0.0, 0.0, pixmap.width(), pixmap.height());
+    drawPixmap(rect, pixmap, sourceRect);
+    restore();
+}
+
+void PainterEx::DrawBorder(const QRect &rect, const QPen &pen, RectBorders flags)
+{
+    save();
+    setPen(pen);
+    if(flags.testFlag(RectBorder::RectBorderLeft)) drawLine(rect.topLeft(), rect.bottomLeft());
+    if(flags.testFlag(RectBorder::RectBorderRight)) drawLine(rect.topRight(), rect.bottomRight());
+    if(flags.testFlag(RectBorder::RectBorderTop)) drawLine(rect.topLeft(), rect.topRight());
+    if(flags.testFlag(RectBorder::RectBorderBottom)) drawLine(rect.bottomLeft(), rect.bottomRight());
+    restore();
+}
+
+void PainterEx::DrawTriangle(const QRect &rect, bool isUp, const QColor &brush, const QPen &pen)
+{
+    save();
+    setRenderHint(QPainter::Antialiasing);
+    setPen(pen);
+    setBrush(brush.isValid()?brush:QColor(0,0,0,0));
+    QPainterPath roundPath;
+    roundPath.setFillRule(Qt::WindingFill);
+    
+    roundPath.moveTo(isUp?rect.bottomLeft():rect.topLeft()); //底边-左
+    roundPath.lineTo(isUp?rect.bottomRight():rect.topRight()); //底边-右
+    roundPath.lineTo(QPoint(rect.center().x(), isUp?rect.top():rect.bottom()));//头
+    roundPath.closeSubpath();
+    
+    drawPath(roundPath);
+    restore();
+}

+ 75 - 0
common/LHColorDialog/PaintHelper/painthelper.h

@@ -0,0 +1,75 @@
+#ifndef PAINTHELPER_H
+#define PAINTHELPER_H
+
+#include <QFont>
+#include <QPainter>
+
+class PainterEx : public QPainter
+{
+public:
+    enum RoundedCorner
+    {
+        None                = 0x0000,
+        TopLeft             = 0x0001,
+        TopRight            = 0x0002,
+        BottomLeft          = 0x0004,
+        BottomRight         = 0x0008,
+        Left                = TopLeft|BottomLeft,
+        Right               = TopRight|BottomRight,
+        Top                 = TopLeft|TopRight,
+        Bottom              = BottomLeft|BottomRight,
+        All                 = TopLeft|TopRight|BottomLeft|BottomRight,
+    };
+    Q_DECLARE_FLAGS(RoundedCorners, RoundedCorner)
+    enum RectBorder
+    {
+        RectBorderNone                = 0x0000,
+        RectBorderLeft                = 0x0001,
+        RectBorderRight               = 0x0002,
+        RectBorderTop                 = 0x0004,
+        RectBorderBottom              = 0x0008,
+        RectBorderAll                 = TopLeft|TopRight|BottomLeft|BottomRight,
+        RectBorderExceptLeft          = RectBorderAll & (~RectBorderLeft),
+        RectBorderExceptRight         = RectBorderAll & (~RectBorderRight),
+        RectBorderExceptTop           = RectBorderAll & (~RectBorderTop),
+        RectBorderExceptBottom        = RectBorderAll & (~RectBorderBottom),
+    };
+    Q_DECLARE_FLAGS(RectBorders, RectBorder)
+public:
+    explicit PainterEx(QPaintDevice *device);
+    void SetBrushOnly(const QColor &color);
+    void SetPenOnly(const QColor &color, qreal width = 1, Qt::PenStyle s = Qt::SolidLine);
+    void DrawCircle(QPointF center, double radius, const QColor &brush = QColor(), const QPen &pen = QPen(Qt::transparent));
+    void DrawTextTwice(const QRectF &textRect, const QString &text, const QColor &color = QColor(), Qt::Alignment flags = Qt::AlignHCenter|Qt::AlignVCenter);
+    void DrawText(const QRectF &textRect, const QString &text, const QColor &color, Qt::Alignment flags = Qt::AlignHCenter|Qt::AlignVCenter);
+    void DrawRoundedRect(const QRectF &rect, int radius, const QColor &color = QColor(), RoundedCorners flags = RoundedCorner::All);
+    void DrawPixmap(const QRectF &rect, const QPixmap &pixmap);
+    void DrawPixmap(const QRectF &rect, const QString &srcPath, int alpha = 255);
+    void DrawBorder(const QRect &rect, const QPen &pen, RectBorders flags = RectBorder::RectBorderAll);
+    void DrawTriangle(const QRect &rect, bool isUp, const QColor &brush = QColor(), const QPen &pen = QPen(Qt::transparent));
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(PainterEx::RoundedCorners)
+Q_DECLARE_OPERATORS_FOR_FLAGS(PainterEx::RectBorders)
+
+class FontEx : public QFont
+{
+public:
+    enum NotoSansType
+    {
+        Unkown,
+        Normal,
+        Regular,
+        Medium,
+        Light,
+        Bold
+    };
+public:
+    explicit FontEx(const QString &family, int pixelSize, bool bold = false);
+    explicit FontEx(NotoSansType type, int pixelSize);
+    
+signals:
+    
+public slots:
+};
+
+#endif // PAINTHELPER_H

+ 33 - 0
common/LHColorDialog/api/colordialogapi.cpp

@@ -0,0 +1,33 @@
+#include "colordialogapi.h"
+#include <QTranslator>
+#include <QCoreApplication>
+
+#include "lhcolordialog.h"
+
+// EXPORT_DLL
+QColor getColor(QWidget* parent, ColorDlgSkin skin, const QString& qss,const QColor& initClr,
+                const QList<QColor>& baseClrs, const QList<QColor>& customClrs)
+{   
+    QTranslator trans;
+    trans.load(":/qt_zh_CN.qm");
+    QCoreApplication::installTranslator(&trans);
+
+    LHColorDialog* pColorDlg = new LHColorDialog(static_cast<Skin>(skin), qss, initClr, parent);
+    if (nullptr != pColorDlg) {
+        for (int i = 0; i < baseClrs.count(); ++i) {
+            pColorDlg->setStandardColor(i, baseClrs.at(i));
+        }
+        for (int j = 0; j < customClrs.count(); ++j) {
+            pColorDlg->setCustomColor(j, customClrs.at(j));
+        }
+
+        if (QDialog::Accepted == pColorDlg->exec()) {
+            QColor clr = pColorDlg->selectedColor();
+            delete pColorDlg; pColorDlg = nullptr;
+            return clr;
+        }
+        delete pColorDlg; pColorDlg = nullptr;
+    }
+    return QColor();
+}
+

+ 25 - 0
common/LHColorDialog/api/colordialogapi.h

@@ -0,0 +1,25 @@
+#ifndef COLORDIALOGAPI_H
+#define COLORDIALOGAPI_H
+
+#include <QWidget>
+
+#if defined (EXPORT_LIBRARY)
+# define EXPORT_DLL Q_DECL_EXPORT
+#else
+# define EXPORT_DLL Q_DECL_IMPORT
+#endif
+
+
+enum class ColorDlgSkin {
+    BRIGHT = 0, // 浅色皮肤
+    DARK = 1,   // 深色皮肤
+    OTHER = 2,  // 自定义皮肤文件,需传入样式
+};
+// EXPORT_DLL
+QColor getColor(QWidget* parent, ColorDlgSkin skin, const QString& qss = QString(),
+                                     const QColor& initClr = QColor(),
+                                     const QList<QColor>& baseClrs = QList<QColor>(),
+                                     const QList<QColor>& customClrs = QList<QColor>());
+
+
+#endif // COLORDIALOGAPI_H

+ 203 - 0
common/LHColorDialog/lhcolordialog.cpp

@@ -0,0 +1,203 @@
+#include "lhcolordialog.h"
+
+#include <QTimer>
+#include <QLabel>
+#include <QDialogButtonBox>
+#include <QPushButton>
+
+LHColorDialog::LHColorDialog(Skin sk, const QString& qss, QWidget* parent) :
+    QDialog(parent),
+    IDropShadowable(this),
+    m_pLayout(new QHBoxLayout),
+    m_skinQss(qss)
+{
+    //设置无边框属性
+    setWindowFlag(Qt::FramelessWindowHint);
+    //设置背景透明属性
+    setAttribute(Qt::WA_TranslucentBackground, true);
+
+    createColorDialog(sk);
+}
+// call this constructor
+LHColorDialog::LHColorDialog(Skin sk, const QString& qss, const QColor& initial, QWidget* parent) :
+    QDialog(parent),
+    IDropShadowable(this),
+    m_pLayout(new QHBoxLayout),
+    m_skinQss(qss)
+{
+    //设置无边框属性
+    setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint);
+    //设置背景透明属性
+    setAttribute(Qt::WA_TranslucentBackground, true);
+
+    createColorDialog(sk, initial);
+}
+
+LHColorDialog::~LHColorDialog()
+{
+    qInfo() << "LHColorDialog: destructor...";
+}
+
+void LHColorDialog::setStandardColor(int idx, const QColor &clr)
+{
+    if (nullptr != m_pColorDlg) {
+        m_pColorDlg->setStandardColor(idx, clr);
+    }
+}
+
+void LHColorDialog::setCustomColor(int idx, const QColor &clr)
+{
+    if (nullptr != m_pColorDlg) {
+        m_pColorDlg->setCustomColor(idx, clr);
+    }
+}
+
+void LHColorDialog::createColorDialog(Skin sk, const QColor& initial)
+{
+    QHBoxLayout* pLay = new QHBoxLayout(this);
+    QWidget* pMain = new QWidget(this);
+    pMain->setLayout(m_pLayout);
+    // XXX:加载样式表
+    QFile* pf = nullptr;
+    if (sk == emDARK) {
+        pf = new QFile(":/skins/dark.qss", this);
+    } else if (sk == emBRIGHT) {
+        pf = new QFile(":/skins/bright.qss", this);
+    }
+
+    if (!pf && !m_skinQss.isEmpty()) {// 加载自定义样式
+        pMain->setStyleSheet(m_skinQss);
+    }
+    if (pf && pf->open(QIODevice::ReadOnly)) {
+        QString str(QString::fromUtf8(pf->readAll()));
+        pMain->setStyleSheet(str);
+        pf->close();
+    }
+    pLay->addWidget(pMain);
+    pLay->setMargin(SHADOW_RADIUS);
+
+    m_pColorDlg = new QColorDialog(initial, this);
+    if (nullptr != m_pColorDlg) {
+        customDialog();
+        setButtonName();
+
+        connect(m_pColorDlg, &QColorDialog::colorSelected, this, [this](const QColor& clr) {
+            m_selColor = clr;
+        });
+        connect(m_pColorDlg, &QColorDialog::currentColorChanged, this, [this](const QColor& clr) {
+            m_selColor = clr;
+        });
+        connect(m_pColorDlg, &QDialog::finished, this, [this](int code) {
+            m_selColor = m_pColorDlg->selectedColor();
+            if (code == QDialog::Accepted) {
+                accept();
+            } else {
+                reject();
+            }
+        });
+        m_pColorDlg->hide();
+        m_pColorDlg->setOptions(QColorDialog::DontUseNativeDialog);
+        m_pColorDlg->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
+
+        m_pLayout->addWidget(m_pColorDlg);
+        m_pLayout->setMargin(0);
+
+        m_pColorDlg->show();
+        m_pColorDlg->move(0, 0);
+        pMain->resize(m_pColorDlg->size());
+        this->resize(m_pColorDlg->width() + 2 * SHADOW_RADIUS, m_pColorDlg->height() + 2 * SHADOW_RADIUS);
+
+        BoxShadow shadows = {0, 0, SHADOW_RADIUS, 0, QColor(0, 0, 0, 90), QSize(0, 0), QImage()};
+        SetDropShadow(shadows, pMain->size());
+    }
+    setMinimumHeight(2 * SHADOW_RADIUS);
+    setMinimumWidth(2 * SHADOW_RADIUS);
+}
+
+void LHColorDialog::setButtonName()
+{
+    if (nullptr == m_pColorDlg) return;
+    QList<QPushButton*> objs = m_pColorDlg->findChildren<QPushButton*>();
+    for (auto& btn : objs) {
+        if (btn->text() == "确定") {// Ok
+            btn->setObjectName("btn_ok");
+        } else if (btn->text() == "取消") {// Cancel
+            btn->setObjectName("btn_cancel");
+        }
+    }
+}
+
+void LHColorDialog::customDialog()
+{
+    if (nullptr == m_pColorDlg) return;
+    auto pLay = m_pColorDlg->layout();
+    if (!pLay) return;
+    pLay->setMargin(16);// 设置窗口外层边距16px
+    // 拉伸颜色图
+    auto pTopLay = pLay->itemAt(0);
+    if (pTopLay && pTopLay->layout()) {
+        auto pTop = pTopLay->layout();
+        auto pRightLay = pTop->itemAt(1);
+        if (pRightLay && pRightLay->layout()) {
+            auto pPickLay = pRightLay->layout()->itemAt(0);
+            if (QBoxLayout* pPick = qobject_cast<QBoxLayout*>(pPickLay->layout())) {
+                pPick->takeAt(pPick->count() - 1);// 拿掉弹簧
+                auto cLay = pPick->itemAt(0)->layout();
+                if (QWidget* pWdg = cLay->itemAt(1)->widget()) {
+                    pWdg->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
+                }
+            }
+        }
+    }
+    // 调整按钮
+    int nLay = pLay->count();
+    auto subLay = pLay->itemAt(nLay - 1);
+    if (subLay && subLay->widget()) {
+        auto pWidget = subLay->widget();
+        QDialogButtonBox* pbb = qobject_cast<QDialogButtonBox*>(pWidget);
+        if (!pbb) return;
+        pbb->clear();
+
+        QPushButton* cancel = pbb->addButton("取消", QDialogButtonBox::NoRole);
+        connect(cancel, &QPushButton::clicked, m_pColorDlg, &QColorDialog::reject);
+        QPushButton* empty = pbb->addButton("", QDialogButtonBox::NoRole);
+        empty->setObjectName("empty");
+        empty->setVisible(false);
+        empty->setEnabled(false);
+        QPushButton* ok = pbb->addButton("确定", QDialogButtonBox::NoRole);
+        connect(ok, &QPushButton::clicked, m_pColorDlg, &QColorDialog::accept);
+        ok->setDefault(true);
+        QPushButton* empty2 = pbb->addButton("", QDialogButtonBox::NoRole);
+        empty2->setObjectName("empty");
+        empty2->setVisible(false);
+        empty2->setEnabled(false);
+
+        auto pBtnLayout = pbb->layout();
+        if (QBoxLayout* pboxlay = qobject_cast<QBoxLayout*>(pBtnLayout)) {
+            pboxlay->setSpacing(8);
+        }
+    }
+}
+
+void LHColorDialog::mousePressEvent(QMouseEvent *event)
+{
+    if (Qt::LeftButton == event->button()) {
+        m_bMousePress = true;
+        m_prePos = event->globalPos()-this->pos();
+    }
+    event->accept();
+}
+
+void LHColorDialog::mouseReleaseEvent(QMouseEvent *event)
+{
+    m_bMousePress = false;
+    event->accept();
+}
+
+void LHColorDialog::mouseMoveEvent(QMouseEvent *event)
+{
+    if (m_bMousePress && (Qt::LeftButton & event->buttons())) {
+        this->move(event->globalPos() - m_prePos);
+    }
+    event->accept();
+}

+ 51 - 0
common/LHColorDialog/lhcolordialog.h

@@ -0,0 +1,51 @@
+#ifndef LHCOLORDIALOG_H
+#define LHCOLORDIALOG_H
+
+#include <QWidget>
+#include <QColorDialog>
+#include <QHBoxLayout>
+
+#include "DropShadow/idropshadowable.h"
+
+enum Skin {
+    emBRIGHT = 0,
+    emDARK = 1,
+    emOTHER = 2
+};
+
+class LHColorDialog : public QDialog, public IDropShadowable
+{
+    Q_OBJECT
+public:
+    explicit LHColorDialog(Skin sk, const QString& qss, QWidget* parent = nullptr);
+    explicit LHColorDialog(Skin sk, const QString& qss, const QColor& initial, QWidget* parent = nullptr);
+    virtual ~LHColorDialog();
+
+    void setStandardColor(int idx, const QColor& clr);
+    void setCustomColor(int idx, const QColor& clr);
+
+    QColor selectedColor() const {return m_selColor;}
+protected:
+    void mousePressEvent(QMouseEvent*) override;
+    void mouseReleaseEvent(QMouseEvent*) override;
+    void mouseMoveEvent(QMouseEvent* ) override;
+signals:
+    void sigColorSelected(const QColor& clr);
+    void sigCurrentColorChanged(const QColor& clr);
+private slots:
+    void createColorDialog(Skin sk, const QColor& initial = QColor());
+private:
+    void setButtonName();   // 设置确认,取消按钮名称
+    void customDialog();    // 自定义设置
+private:
+    const int SHADOW_RADIUS = 20;
+
+    QColorDialog* m_pColorDlg{nullptr};
+    QHBoxLayout* m_pLayout{nullptr};
+    bool m_bMousePress{false};
+    QPoint m_prePos;
+    QColor m_selColor;
+    QString m_skinQss;
+};
+
+#endif // LHCOLORDIALOG_H

BIN
common/LHColorDialog/qt_zh_CN.qm


+ 7144 - 0
common/LHColorDialog/qt_zh_CN.qm.ts

@@ -0,0 +1,7144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh_CN">
+<context>
+    <name>QWidget</name>
+    <message>
+        <source>*</source>
+        <translation>*</translation>
+    </message>
+</context>
+<context>
+    <name>QShortcut</name>
+    <message>
+        <source>+</source>
+        <translation>+</translation>
+    </message>
+    <message>
+        <source>CD</source>
+        <translation>CD</translation>
+    </message>
+    <message>
+        <source>Go</source>
+        <translation>前往</translation>
+    </message>
+    <message>
+        <source>No</source>
+        <translation>否</translation>
+    </message>
+    <message>
+        <source>Up</source>
+        <translation>Up</translation>
+    </message>
+    <message>
+        <source>Alt</source>
+        <translation>Alt</translation>
+    </message>
+    <message>
+        <source>F%1</source>
+        <translation>F%1</translation>
+    </message>
+    <message>
+        <source>DOS</source>
+        <translation>DOS</translation>
+    </message>
+    <message>
+        <source>Del</source>
+        <translation>Del</translation>
+    </message>
+    <message>
+        <source>Cut</source>
+        <translation>剪切</translation>
+    </message>
+    <message>
+        <source>End</source>
+        <translation>End</translation>
+    </message>
+    <message>
+        <source>Esc</source>
+        <translation>Esc</translation>
+    </message>
+    <message>
+        <source>Ins</source>
+        <translation>Ins</translation>
+    </message>
+    <message>
+        <source>New</source>
+        <translation>新建</translation>
+    </message>
+    <message>
+        <source>Num</source>
+        <translation>Num</translation>
+    </message>
+    <message>
+        <source>Red</source>
+        <translation>红色</translation>
+    </message>
+    <message>
+        <source>Tab</source>
+        <translation>Tab</translation>
+    </message>
+    <message>
+        <source>WWW</source>
+        <translation>WWW</translation>
+    </message>
+    <message>
+        <source>Yes</source>
+        <translation>是</translation>
+    </message>
+    <message>
+        <source>Back</source>
+        <translation>后退</translation>
+    </message>
+    <message>
+        <source>Away</source>
+        <translation>离开</translation>
+    </message>
+    <message>
+        <source>Blue</source>
+        <translation>蓝色</translation>
+    </message>
+    <message>
+        <source>Book</source>
+        <translation>预定</translation>
+    </message>
+    <message>
+        <source>Call</source>
+        <translation>呼叫</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation>复制</translation>
+    </message>
+    <message>
+        <source>Ctrl</source>
+        <translation>Ctrl</translation>
+    </message>
+    <message>
+        <source>Down</source>
+        <translation>Down</translation>
+    </message>
+    <message>
+        <source>Exit</source>
+        <translation>退出</translation>
+    </message>
+    <message>
+        <source>Find</source>
+        <translation>查找</translation>
+    </message>
+    <message>
+        <source>Flip</source>
+        <translation>翻转</translation>
+    </message>
+    <message>
+        <source>Game</source>
+        <translation>游戏</translation>
+    </message>
+    <message>
+        <source>Help</source>
+        <translation>帮助</translation>
+    </message>
+    <message>
+        <source>Home</source>
+        <translation>Home</translation>
+    </message>
+    <message>
+        <source>Info</source>
+        <translation>信息</translation>
+    </message>
+    <message>
+        <source>Left</source>
+        <translation>Left</translation>
+    </message>
+    <message>
+        <source>Menu</source>
+        <translation>菜单</translation>
+    </message>
+    <message>
+        <source>Meta</source>
+        <translation>Meta</translation>
+    </message>
+    <message>
+        <source>News</source>
+        <translation>新闻</translation>
+    </message>
+    <message>
+        <source>Open</source>
+        <translation>打开</translation>
+    </message>
+    <message>
+        <source>PgUp</source>
+        <translation>PgUp</translation>
+    </message>
+    <message>
+        <source>Play</source>
+        <translation>播放</translation>
+    </message>
+    <message>
+        <source>Redo</source>
+        <translation>恢复</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>保存</translation>
+    </message>
+    <message>
+        <source>Send</source>
+        <translation>发送</translation>
+    </message>
+    <message>
+        <source>Shop</source>
+        <translation>商店</translation>
+    </message>
+    <message>
+        <source>Stop</source>
+        <translation>停止</translation>
+    </message>
+    <message>
+        <source>Time</source>
+        <translation>时间</translation>
+    </message>
+    <message>
+        <source>Undo</source>
+        <translation>撤销</translation>
+    </message>
+    <message>
+        <source>XFer</source>
+        <translation>XFer</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>查看</translation>
+    </message>
+    <message>
+        <source>Zoom</source>
+        <translation>缩放</translation>
+    </message>
+    <message>
+        <source>Split Screen</source>
+        <translation>分屏</translation>
+    </message>
+    <message>
+        <source>Clear</source>
+        <translation>清除</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation>关闭</translation>
+    </message>
+    <message>
+        <source>Eject</source>
+        <translation>弹出</translation>
+    </message>
+    <message>
+        <source>Enter</source>
+        <translation>Enter</translation>
+    </message>
+    <message>
+        <source>Green</source>
+        <translation>绿色</translation>
+    </message>
+    <message>
+        <source>Guide</source>
+        <translation>指南</translation>
+    </message>
+    <message>
+        <source>Kanji</source>
+        <translation>Kanji</translation>
+    </message>
+    <message>
+        <source>Music</source>
+        <translation>音乐</translation>
+    </message>
+    <message>
+        <source>Paste</source>
+        <translation>粘贴</translation>
+    </message>
+    <message>
+        <source>Pause</source>
+        <translation>Pause</translation>
+    </message>
+    <message>
+        <source>Phone</source>
+        <translation>电话</translation>
+    </message>
+    <message>
+        <source>Print</source>
+        <translation>Print</translation>
+    </message>
+    <message>
+        <source>Reply</source>
+        <translation>答复</translation>
+    </message>
+    <message>
+        <source>Right</source>
+        <translation>Right</translation>
+    </message>
+    <message>
+        <source>Shift</source>
+        <translation>Shift</translation>
+    </message>
+    <message>
+        <source>Sleep</source>
+        <translation>睡眠</translation>
+    </message>
+    <message>
+        <source>Space</source>
+        <translation>Space</translation>
+    </message>
+    <message>
+        <source>Tools</source>
+        <translation>工具</translation>
+    </message>
+    <message>
+        <source>Video</source>
+        <translation>视频</translation>
+    </message>
+    <message>
+        <source>Hiragana</source>
+        <translation>Hiragana</translation>
+    </message>
+    <message>
+        <source>Wireless</source>
+        <translation>无线</translation>
+    </message>
+    <message>
+        <source>Media Record</source>
+        <translation>媒体录制</translation>
+    </message>
+    <message>
+        <source>Media Rewind</source>
+        <translation>媒体倒回</translation>
+    </message>
+    <message>
+        <source>Multiple Candidate</source>
+        <translation>多个候选</translation>
+    </message>
+    <message>
+        <source>Zenkaku</source>
+        <translation>Zenkaku</translation>
+    </message>
+    <message>
+        <source>Print Screen</source>
+        <translation>Print Screen</translation>
+    </message>
+    <message>
+        <source>Audio Repeat</source>
+        <translation>音频重复</translation>
+    </message>
+    <message>
+        <source>Toggle Call/Hangup</source>
+        <translation>切换呼叫/挂断</translation>
+    </message>
+    <message>
+        <source>Zoom In</source>
+        <translation>放大</translation>
+    </message>
+    <message>
+        <source>Camera Shutter</source>
+        <translation>相机快门</translation>
+    </message>
+    <message>
+        <source>Ultra Wide Band</source>
+        <translation>超宽带</translation>
+    </message>
+    <message>
+        <source>Hangul Special</source>
+        <translation>Hangul Special</translation>
+    </message>
+    <message>
+        <source>Treble Down</source>
+        <translation>高音减小</translation>
+    </message>
+    <message>
+        <source>Scroll Lock</source>
+        <translation>Scroll Lock</translation>
+    </message>
+    <message>
+        <source>Media Pause</source>
+        <translation>媒体暂停</translation>
+    </message>
+    <message>
+        <source>Word Processor</source>
+        <translation>文字处理</translation>
+    </message>
+    <message>
+        <source>Volume Down</source>
+        <translation>音量减小</translation>
+    </message>
+    <message>
+        <source>Volume Mute</source>
+        <translation>音量静音</translation>
+    </message>
+    <message>
+        <source>Kana Shift</source>
+        <translation>Kana Shift</translation>
+    </message>
+    <message>
+        <source>Media Previous</source>
+        <translation>媒体上一个</translation>
+    </message>
+    <message>
+        <source>Home Page</source>
+        <translation>主页</translation>
+    </message>
+    <message>
+        <source>Meeting</source>
+        <translation>会议</translation>
+    </message>
+    <message>
+        <source>Touchpad Off</source>
+        <translation>触控板关</translation>
+    </message>
+    <message>
+        <source>Volume Up</source>
+        <translation>音量增大</translation>
+    </message>
+    <message>
+        <source>Menu PB</source>
+        <translation>菜单 PB</translation>
+    </message>
+    <message>
+        <source>Keyboard Brightness Up</source>
+        <translation>键盘亮度增高</translation>
+    </message>
+    <message>
+        <source>Hangul PostHanja</source>
+        <translation>Hangul PostHanja</translation>
+    </message>
+    <message>
+        <source>Kana Lock</source>
+        <translation>Kana Lock</translation>
+    </message>
+    <message>
+        <source>Community</source>
+        <translation>社区</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <source>Launch (6)</source>
+        <translation>启动 (6)</translation>
+    </message>
+    <message>
+        <source>Launch (7)</source>
+        <translation>启动 (7)</translation>
+    </message>
+    <message>
+        <source>Launch (8)</source>
+        <translation>启动 (8)</translation>
+    </message>
+    <message>
+        <source>Launch (9)</source>
+        <translation>启动 (9)</translation>
+    </message>
+    <message>
+        <source>Launch (2)</source>
+        <translation>启动 (2)</translation>
+    </message>
+    <message>
+        <source>Launch (3)</source>
+        <translation>启动 (3)</translation>
+    </message>
+    <message>
+        <source>Launch (4)</source>
+        <translation>启动 (4)</translation>
+    </message>
+    <message>
+        <source>Launch (5)</source>
+        <translation>启动 (5)</translation>
+    </message>
+    <message>
+        <source>Launch (0)</source>
+        <translation>启动 (0)</translation>
+    </message>
+    <message>
+        <source>Launch (1)</source>
+        <translation>启动 (1)</translation>
+    </message>
+    <message>
+        <source>Launch (F)</source>
+        <translation>启动 (F)</translation>
+    </message>
+    <message>
+        <source>Launch (B)</source>
+        <translation>启动 (B)</translation>
+    </message>
+    <message>
+        <source>Launch (C)</source>
+        <translation>启动 (C)</translation>
+    </message>
+    <message>
+        <source>Launch (D)</source>
+        <translation>启动 (D)</translation>
+    </message>
+    <message>
+        <source>Launch (E)</source>
+        <translation>启动 (E)</translation>
+    </message>
+    <message>
+        <source>Launch (A)</source>
+        <translation>启动 (A)</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <source>Escape</source>
+        <translation>Escape</translation>
+    </message>
+    <message>
+        <source>Audio Random Play</source>
+        <translation>音频随机播放</translation>
+    </message>
+    <message>
+        <source>Hangul</source>
+        <translation>Hangul</translation>
+    </message>
+    <message>
+        <source>Hangup</source>
+        <translation>挂断</translation>
+    </message>
+    <message>
+        <source>Henkan</source>
+        <translation>Henkan</translation>
+    </message>
+    <message>
+        <source>Insert</source>
+        <translation>Insert</translation>
+    </message>
+    <message>
+        <source>Home Office</source>
+        <translation>家庭办公室</translation>
+    </message>
+    <message>
+        <source>Last Number Redial</source>
+        <translation>最后号码重拨</translation>
+    </message>
+    <message>
+        <source>Logoff</source>
+        <translation>注销</translation>
+    </message>
+    <message>
+        <source>Market</source>
+        <translation>市场</translation>
+    </message>
+    <message>
+        <source>Massyo</source>
+        <translation>Massyo</translation>
+    </message>
+    <message>
+        <source>Bass Boost</source>
+        <translation>低音增强</translation>
+    </message>
+    <message>
+        <source>Channel Up</source>
+        <translation>频道增加</translation>
+    </message>
+    <message>
+        <source>Option</source>
+        <translation>选项</translation>
+    </message>
+    <message>
+        <source>PgDown</source>
+        <translation>PgDown</translation>
+    </message>
+    <message>
+        <source>Reload</source>
+        <translation>重新加载</translation>
+    </message>
+    <message>
+        <source>Return</source>
+        <translation>Return</translation>
+    </message>
+    <message>
+        <source>Romaji</source>
+        <translation>Romaji</translation>
+    </message>
+    <message>
+        <source>Search</source>
+        <translation>搜索</translation>
+    </message>
+    <message>
+        <source>Select</source>
+        <translation>选择</translation>
+    </message>
+    <message>
+        <source>SysReq</source>
+        <translation>SysReq</translation>
+    </message>
+    <message>
+        <source>Travel</source>
+        <translation>旅行</translation>
+    </message>
+    <message>
+        <source>NumLock</source>
+        <translation>NumLock</translation>
+    </message>
+    <message>
+        <source>WebCam</source>
+        <translation>摄像头</translation>
+    </message>
+    <message>
+        <source>Hiragana Katakana</source>
+        <translation>Hiragana Katakana</translation>
+    </message>
+    <message>
+        <source>Yellow</source>
+        <translation>黄色</translation>
+    </message>
+    <message>
+        <source>Top Menu</source>
+        <translation>顶部菜单</translation>
+    </message>
+    <message>
+        <source>ScrollLock</source>
+        <translation>ScrollLock</translation>
+    </message>
+    <message>
+        <source>Hot Links</source>
+        <translation>热门链接</translation>
+    </message>
+    <message>
+        <source>Audio Cycle Track</source>
+        <translation>音频循环轨道</translation>
+    </message>
+    <message>
+        <source>Context1</source>
+        <translation>Context1</translation>
+    </message>
+    <message>
+        <source>Context2</source>
+        <translation>Context2</translation>
+    </message>
+    <message>
+        <source>Context3</source>
+        <translation>Context3</translation>
+    </message>
+    <message>
+        <source>Context4</source>
+        <translation>Context4</translation>
+    </message>
+    <message>
+        <source>Zoom Out</source>
+        <translation>缩小</translation>
+    </message>
+    <message>
+        <source>Page Up</source>
+        <translation>Page Up</translation>
+    </message>
+    <message>
+        <source>Open URL</source>
+        <translation>打开网址</translation>
+    </message>
+    <message>
+        <source>iTouch</source>
+        <translation>iTouch</translation>
+    </message>
+    <message>
+        <source>Previous Candidate</source>
+        <translation>上一个候选</translation>
+    </message>
+    <message>
+        <source>Toggle Media Play/Pause</source>
+        <translation>切换媒体播放/暂停</translation>
+    </message>
+    <message>
+        <source>Caps Lock</source>
+        <translation>Caps Lock</translation>
+    </message>
+    <message>
+        <source>Eisu Shift</source>
+        <translation>Eisu Shift</translation>
+    </message>
+    <message>
+        <source>Code input</source>
+        <translation>代码输入</translation>
+    </message>
+    <message>
+        <source>Printer</source>
+        <translation>打印机</translation>
+    </message>
+    <message>
+        <source>Camera Focus</source>
+        <translation>相机聚焦</translation>
+    </message>
+    <message>
+        <source>Adjust Brightness</source>
+        <translation>调整亮度</translation>
+    </message>
+    <message>
+        <source>Spreadsheet</source>
+        <translation>电子表格</translation>
+    </message>
+    <message>
+        <source>Eisu toggle</source>
+        <translation>Eisu toggle</translation>
+    </message>
+    <message>
+        <source>Keyboard Brightness Down</source>
+        <translation>键盘亮度降低</translation>
+    </message>
+    <message>
+        <source>Clear Grab</source>
+        <translation>清除 Grab</translation>
+    </message>
+    <message>
+        <source>Monitor Brightness Up</source>
+        <translation>监视器亮度增高</translation>
+    </message>
+    <message>
+        <source>System Request</source>
+        <translation>System Request</translation>
+    </message>
+    <message>
+        <source>Microphone Volume Up</source>
+        <translation>麦克风音量增大</translation>
+    </message>
+    <message>
+        <source>CapsLock</source>
+        <translation>CapsLock</translation>
+    </message>
+    <message>
+        <source>Backtab</source>
+        <translation>Backtab</translation>
+    </message>
+    <message>
+        <source>Bass Up</source>
+        <translation>低音增大</translation>
+    </message>
+    <message>
+        <source>Battery</source>
+        <translation>电池</translation>
+    </message>
+    <message>
+        <source>Katakana</source>
+        <translation>Katakana</translation>
+    </message>
+    <message>
+        <source>Refresh</source>
+        <translation>刷新</translation>
+    </message>
+    <message>
+        <source>Hibernate</source>
+        <translation>休眠</translation>
+    </message>
+    <message>
+        <source>Application Left</source>
+        <translation>应用程序 左</translation>
+    </message>
+    <message>
+        <source>Voice Dial</source>
+        <translation>语音拨号</translation>
+    </message>
+    <message>
+        <source>Browser</source>
+        <translation>浏览器</translation>
+    </message>
+    <message>
+        <source>Keyboard Menu</source>
+        <translation>键盘菜单</translation>
+    </message>
+    <message>
+        <source>Back Forward</source>
+        <translation>后退前进</translation>
+    </message>
+    <message>
+        <source>Launch Mail</source>
+        <translation>启动邮件</translation>
+    </message>
+    <message>
+        <source>Keyboard Light On/Off</source>
+        <translation>键盘灯开/关</translation>
+    </message>
+    <message>
+        <source>Backspace</source>
+        <translation>Backspace</translation>
+    </message>
+    <message>
+        <source>Bass Down</source>
+        <translation>低音减小</translation>
+    </message>
+    <message>
+        <source>Mail Forward</source>
+        <translation>邮件转发</translation>
+    </message>
+    <message>
+        <source>Messenger</source>
+        <translation>信使</translation>
+    </message>
+    <message>
+        <source>Hangul Banja</source>
+        <translation>Hangul Banja</translation>
+    </message>
+    <message>
+        <source>Hangul Hanja</source>
+        <translation>Hangul Hanja</translation>
+    </message>
+    <message>
+        <source>Standby</source>
+        <translation>待机</translation>
+    </message>
+    <message>
+        <source>Hangul Start</source>
+        <translation>Hangul Start</translation>
+    </message>
+    <message>
+        <source>Rotation KB</source>
+        <translation>旋转 KB</translation>
+    </message>
+    <message>
+        <source>Rotation PB</source>
+        <translation>旋转 PB</translation>
+    </message>
+    <message>
+        <source>Documents</source>
+        <translation>文档</translation>
+    </message>
+    <message>
+        <source>Calculator</source>
+        <translation>计算器</translation>
+    </message>
+    <message>
+        <source>Support</source>
+        <translation>支持</translation>
+    </message>
+    <message>
+        <source>Suspend</source>
+        <translation>暂停</translation>
+    </message>
+    <message>
+        <source>Display</source>
+        <translation>显示</translation>
+    </message>
+    <message>
+        <source>Hangul Romaja</source>
+        <translation>Hangul Romaja</translation>
+    </message>
+    <message>
+        <source>My Sites</source>
+        <translation>我的网站</translation>
+    </message>
+    <message>
+        <source>Rotate Windows</source>
+        <translation>旋转窗口</translation>
+    </message>
+    <message>
+        <source>Touroku</source>
+        <translation>Touroku</translation>
+    </message>
+    <message>
+        <source>Zenkaku Hankaku</source>
+        <translation>Zenkaku Hankaku</translation>
+    </message>
+    <message>
+        <source>Hangul Jeonja</source>
+        <translation>Hangul Jeonja</translation>
+    </message>
+    <message>
+        <source>Treble Up</source>
+        <translation>高音增大</translation>
+    </message>
+    <message>
+        <source>Subtitle</source>
+        <translation>字幕</translation>
+    </message>
+    <message>
+        <source>Hangul Jamo</source>
+        <translation>Hangul Jamo</translation>
+    </message>
+    <message>
+        <source>Bluetooth</source>
+        <translation>蓝牙</translation>
+    </message>
+    <message>
+        <source>Muhenkan</source>
+        <translation>Muhenkan</translation>
+    </message>
+    <message>
+        <source>Num Lock</source>
+        <translation>Num Lock</translation>
+    </message>
+    <message>
+        <source>Screensaver</source>
+        <translation>屏幕保护</translation>
+    </message>
+    <message>
+        <source>Number Lock</source>
+        <translation>Number Lock</translation>
+    </message>
+    <message>
+        <source>Power Down</source>
+        <translation>断电</translation>
+    </message>
+    <message>
+        <source>Spellchecker</source>
+        <translation>拼写检查</translation>
+    </message>
+    <message>
+        <source>Hangul PreHanja</source>
+        <translation>Hangul PreHanja</translation>
+    </message>
+    <message>
+        <source>Terminal</source>
+        <translation>终端</translation>
+    </message>
+    <message>
+        <source>Settings</source>
+        <translation>设置</translation>
+    </message>
+    <message>
+        <source>Add Favorite</source>
+        <translation>添加收藏</translation>
+    </message>
+    <message>
+        <source>Execute</source>
+        <translation>执行</translation>
+    </message>
+    <message>
+        <source>Finance</source>
+        <translation>金融</translation>
+    </message>
+    <message>
+        <source>Microphone Volume Down</source>
+        <translation>麦克风音量减小</translation>
+    </message>
+    <message>
+        <source>Task Panel</source>
+        <translation>任务面板</translation>
+    </message>
+    <message>
+        <source>Favorites</source>
+        <translation>收藏</translation>
+    </message>
+    <message>
+        <source>Forward</source>
+        <translation>前进</translation>
+    </message>
+    <message>
+        <source>Page Down</source>
+        <translation>Page Down</translation>
+    </message>
+    <message>
+        <source>Wake Up</source>
+        <translation>醒来</translation>
+    </message>
+    <message>
+        <source>Power Off</source>
+        <translation>关机</translation>
+    </message>
+    <message>
+        <source>LightBulb</source>
+        <translation>护眼</translation>
+    </message>
+    <message>
+        <source>Touchpad Toggle</source>
+        <translation>触摸板切换</translation>
+    </message>
+    <message>
+        <source>Hankaku</source>
+        <translation>Hankaku</translation>
+    </message>
+    <message>
+        <source>Media Fast Forward</source>
+        <translation>媒体快进</translation>
+    </message>
+    <message>
+        <source>Hangul End</source>
+        <translation>Hangul End</translation>
+    </message>
+    <message>
+        <source>Monitor Brightness Down</source>
+        <translation>监视器亮度降低</translation>
+    </message>
+    <message>
+        <source>Microphone Mute</source>
+        <translation>麦克风静音</translation>
+    </message>
+    <message>
+        <source>History</source>
+        <translation>历史</translation>
+    </message>
+    <message>
+        <source>Media Play</source>
+        <translation>媒体播放</translation>
+    </message>
+    <message>
+        <source>Media Stop</source>
+        <translation>媒体停止</translation>
+    </message>
+    <message>
+        <source>Media Next</source>
+        <translation>媒体下一个</translation>
+    </message>
+    <message>
+        <source>Touchpad On</source>
+        <translation>触摸板开</translation>
+    </message>
+    <message>
+        <source>Channel Down</source>
+        <translation>频道减少</translation>
+    </message>
+    <message>
+        <source>Launch Media</source>
+        <translation>启动媒体</translation>
+    </message>
+    <message>
+        <source>Application Right</source>
+        <translation>应用程序 右</translation>
+    </message>
+    <message>
+        <source>Pictures</source>
+        <translation>图片</translation>
+    </message>
+</context>
+<context>
+    <name>QPageSize</name>
+    <message>
+        <source>A0</source>
+        <translation>A0</translation>
+    </message>
+    <message>
+        <source>A1</source>
+        <translation>A1</translation>
+    </message>
+    <message>
+        <source>A2</source>
+        <translation>A2</translation>
+    </message>
+    <message>
+        <source>A3</source>
+        <translation>A3</translation>
+    </message>
+    <message>
+        <source>A4</source>
+        <translation>A4</translation>
+    </message>
+    <message>
+        <source>A5</source>
+        <translation>A5</translation>
+    </message>
+    <message>
+        <source>A6</source>
+        <translation>A6</translation>
+    </message>
+    <message>
+        <source>A7</source>
+        <translation>A7</translation>
+    </message>
+    <message>
+        <source>A8</source>
+        <translation>A8</translation>
+    </message>
+    <message>
+        <source>A9</source>
+        <translation>A9</translation>
+    </message>
+    <message>
+        <source>B0</source>
+        <translation>B0</translation>
+    </message>
+    <message>
+        <source>B1</source>
+        <translation>B1</translation>
+    </message>
+    <message>
+        <source>B2</source>
+        <translation>B2</translation>
+    </message>
+    <message>
+        <source>B3</source>
+        <translation>B3</translation>
+    </message>
+    <message>
+        <source>B4</source>
+        <translation>B4</translation>
+    </message>
+    <message>
+        <source>B5</source>
+        <translation>B5</translation>
+    </message>
+    <message>
+        <source>B6</source>
+        <translation>B6</translation>
+    </message>
+    <message>
+        <source>B7</source>
+        <translation>B7</translation>
+    </message>
+    <message>
+        <source>B8</source>
+        <translation>B8</translation>
+    </message>
+    <message>
+        <source>B9</source>
+        <translation>B9</translation>
+    </message>
+    <message>
+        <source>A10</source>
+        <translation>A10</translation>
+    </message>
+    <message>
+        <source>B10</source>
+        <translation>B10</translation>
+    </message>
+    <message>
+        <source>Note</source>
+        <translation>Note</translation>
+    </message>
+    <message>
+        <source>Letter / ANSI A</source>
+        <translation>Letter / ANSI A</translation>
+    </message>
+    <message>
+        <source>Legal</source>
+        <translation>Legal</translation>
+    </message>
+    <message>
+        <source>Envelope Monarch</source>
+        <translation>Envelope Monarch</translation>
+    </message>
+    <message>
+        <source>Architect A</source>
+        <translation>Architect A</translation>
+    </message>
+    <message>
+        <source>Architect B</source>
+        <translation>Architect B</translation>
+    </message>
+    <message>
+        <source>Architect C</source>
+        <translation>Architect C</translation>
+    </message>
+    <message>
+        <source>Architect D</source>
+        <translation>Architect D</translation>
+    </message>
+    <message>
+        <source>Architect E</source>
+        <translation>Architect E</translation>
+    </message>
+    <message>
+        <source>Letter Extra</source>
+        <translation>Letter Extra</translation>
+    </message>
+    <message>
+        <source>Letter Small</source>
+        <translation>Letter Small</translation>
+    </message>
+    <message>
+        <source>Envelope You 4</source>
+        <translation>Envelope You 4</translation>
+    </message>
+    <message>
+        <source>Envelope US 10</source>
+        <translation>Envelope US 10</translation>
+    </message>
+    <message>
+        <source>Envelope US 11</source>
+        <translation>Envelope US 11</translation>
+    </message>
+    <message>
+        <source>Envelope US 12</source>
+        <translation>Envelope US 12</translation>
+    </message>
+    <message>
+        <source>Envelope US 14</source>
+        <translation>Envelope US 14</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 1</source>
+        <translation>Envelope PRC 1</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 2</source>
+        <translation>Envelope PRC 2</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 3</source>
+        <translation>Envelope PRC 3</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 4</source>
+        <translation>Envelope PRC 4</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 5</source>
+        <translation>Envelope PRC 5</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 6</source>
+        <translation>Envelope PRC 6</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 7</source>
+        <translation>Envelope PRC 7</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 8</source>
+        <translation>Envelope PRC 8</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 9</source>
+        <translation>Envelope PRC 9</translation>
+    </message>
+    <message>
+        <source>Envelope C65</source>
+        <translation>Envelope C65</translation>
+    </message>
+    <message>
+        <source>Envelope DL</source>
+        <translation>Envelope DL</translation>
+    </message>
+    <message>
+        <source>Envelope B4</source>
+        <translation>Envelope B4</translation>
+    </message>
+    <message>
+        <source>Envelope B5</source>
+        <translation>Envelope B5</translation>
+    </message>
+    <message>
+        <source>Envelope B6</source>
+        <translation>Envelope B6</translation>
+    </message>
+    <message>
+        <source>Envelope C0</source>
+        <translation>Envelope C0</translation>
+    </message>
+    <message>
+        <source>Envelope C1</source>
+        <translation>Envelope C1</translation>
+    </message>
+    <message>
+        <source>Envelope C2</source>
+        <translation>Envelope C2</translation>
+    </message>
+    <message>
+        <source>Envelope C3</source>
+        <translation>Envelope C3</translation>
+    </message>
+    <message>
+        <source>Envelope C4</source>
+        <translation>Envelope C4</translation>
+    </message>
+    <message>
+        <source>Envelope C5</source>
+        <translation>Envelope C5</translation>
+    </message>
+    <message>
+        <source>Envelope C6</source>
+        <translation>Envelope C6</translation>
+    </message>
+    <message>
+        <source>Envelope C7</source>
+        <translation>Envelope C7</translation>
+    </message>
+    <message>
+        <source>Executive (7.5 x 10 in)</source>
+        <translation>Executive (7.5 x 10 in)</translation>
+    </message>
+    <message>
+        <source>ANSI C</source>
+        <translation>ANSI C</translation>
+    </message>
+    <message>
+        <source>ANSI D</source>
+        <translation>ANSI D</translation>
+    </message>
+    <message>
+        <source>ANSI E</source>
+        <translation>ANSI E</translation>
+    </message>
+    <message>
+        <source>A4 Plus</source>
+        <translation>A4 Plus</translation>
+    </message>
+    <message>
+        <source>Custom</source>
+        <translation>自定义</translation>
+    </message>
+    <message>
+        <source>JIS B0</source>
+        <translation>JIS B0</translation>
+    </message>
+    <message>
+        <source>JIS B1</source>
+        <translation>JIS B1</translation>
+    </message>
+    <message>
+        <source>JIS B2</source>
+        <translation>JIS B2</translation>
+    </message>
+    <message>
+        <source>JIS B3</source>
+        <translation>JIS B3</translation>
+    </message>
+    <message>
+        <source>JIS B4</source>
+        <translation>JIS B4</translation>
+    </message>
+    <message>
+        <source>JIS B5</source>
+        <translation>JIS B5</translation>
+    </message>
+    <message>
+        <source>JIS B6</source>
+        <translation>JIS B6</translation>
+    </message>
+    <message>
+        <source>JIS B7</source>
+        <translation>JIS B7</translation>
+    </message>
+    <message>
+        <source>JIS B8</source>
+        <translation>JIS B8</translation>
+    </message>
+    <message>
+        <source>JIS B9</source>
+        <translation>JIS B9</translation>
+    </message>
+    <message>
+        <source>A3 Extra</source>
+        <translation>A3 Extra</translation>
+    </message>
+    <message>
+        <source>PRC 16K</source>
+        <translation>PRC 16K</translation>
+    </message>
+    <message>
+        <source>PRC 32K</source>
+        <translation>PRC 32K</translation>
+    </message>
+    <message>
+        <source>Quarto</source>
+        <translation>Quarto</translation>
+    </message>
+    <message>
+        <source>PRC 32K Big</source>
+        <translation>PRC 32K Big</translation>
+    </message>
+    <message>
+        <source>A4 Extra</source>
+        <translation>A4 Extra</translation>
+    </message>
+    <message>
+        <source>A4 Small</source>
+        <translation>A4 Small</translation>
+    </message>
+    <message>
+        <source>Executive (7.25 x 10.5 in)</source>
+        <translation>Executive (7.25 x 10.5 in)</translation>
+    </message>
+    <message>
+        <source>Postcard</source>
+        <translation>Postcard</translation>
+    </message>
+    <message>
+        <source>Tabloid / ANSI B</source>
+        <translation>Tabloid / ANSI B</translation>
+    </message>
+    <message>
+        <source>A5 Extra</source>
+        <translation>A5 Extra</translation>
+    </message>
+    <message>
+        <source>B5 Extra</source>
+        <translation>B5 Extra</translation>
+    </message>
+    <message>
+        <source>Envelope Invite</source>
+        <translation>Envelope Invite</translation>
+    </message>
+    <message>
+        <source>Envelope Chou 3</source>
+        <translation>Envelope Chou 3</translation>
+    </message>
+    <message>
+        <source>Envelope Chou 4</source>
+        <translation>Envelope Chou 4</translation>
+    </message>
+    <message>
+        <source>Statement</source>
+        <translation>Statement</translation>
+    </message>
+    <message>
+        <source>Fan-fold German (8.5 x 12 in)</source>
+        <translation>Fan-fold German (8.5 x 12 in)</translation>
+    </message>
+    <message>
+        <source>Envelope PRC 10</source>
+        <translation>Envelope PRC 10</translation>
+    </message>
+    <message>
+        <source>Envelope Kaku 2</source>
+        <translation>Envelope Kaku 2</translation>
+    </message>
+    <message>
+        <source>Envelope Kaku 3</source>
+        <translation>Envelope Kaku 3</translation>
+    </message>
+    <message>
+        <source>Envelope US 9</source>
+        <translation>Envelope US 9</translation>
+    </message>
+    <message>
+        <source>%1 x %2 in</source>
+        <translation>%1 x %2 in</translation>
+    </message>
+    <message>
+        <source>Super A</source>
+        <translation>Super A</translation>
+    </message>
+    <message>
+        <source>Super B</source>
+        <translation>Super B</translation>
+    </message>
+    <message>
+        <source>Fan-fold US (14.875 x 11 in)</source>
+        <translation>Fan-fold US (14.875 x 11 in)</translation>
+    </message>
+    <message>
+        <source>Fan-fold German Legal (8.5 x 13 in)</source>
+        <translation>Fan-fold German Legal (8.5 x 13 in)</translation>
+    </message>
+    <message>
+        <source>Custom (%1in x %2in)</source>
+        <translation>自定义 (%1in x %2in)</translation>
+    </message>
+    <message>
+        <source>Custom (%1mm x %2mm)</source>
+        <translation>自定义 (%1mm x %2mm)</translation>
+    </message>
+    <message>
+        <source>Custom (%1CC x %2CC)</source>
+        <translation>自定义 (%1CC x %2CC)</translation>
+    </message>
+    <message>
+        <source>Custom (%1DD x %2DD)</source>
+        <translation>自定义 (%1DD x %2DD)</translation>
+    </message>
+    <message>
+        <source>Custom (%1pc x %2pc)</source>
+        <translation>自定义 (%1pc x %2pc)</translation>
+    </message>
+    <message>
+        <source>Custom (%1pt x %2pt)</source>
+        <translation>自定义 (%1pt x %2pt)</translation>
+    </message>
+    <message>
+        <source>Letter Plus</source>
+        <translation>Letter Plus</translation>
+    </message>
+    <message>
+        <source>Tabloid Extra</source>
+        <translation>Tabloid Extra</translation>
+    </message>
+    <message>
+        <source>Envelope Italian</source>
+        <translation>Envelope Italian</translation>
+    </message>
+    <message>
+        <source>Double Postcard</source>
+        <translation>Double Postcard</translation>
+    </message>
+    <message>
+        <source>Legal Extra</source>
+        <translation>Legal Extra</translation>
+    </message>
+    <message>
+        <source>Folio (8.27 x 13 in)</source>
+        <translation>Folio (8.27 x 13 in)</translation>
+    </message>
+    <message>
+        <source>Ledger / ANSI B</source>
+        <translation>Ledger / ANSI B</translation>
+    </message>
+    <message>
+        <source>JIS B10</source>
+        <translation>JIS B10</translation>
+    </message>
+    <message>
+        <source>Envelope Personal</source>
+        <translation>Envelope Personal</translation>
+    </message>
+</context>
+<context>
+    <name>QDateTimeParser</name>
+    <message>
+        <source>AM</source>
+        <translation>AM</translation>
+    </message>
+    <message>
+        <source>PM</source>
+        <translation>PM</translation>
+    </message>
+    <message>
+        <source>am</source>
+        <translation>am</translation>
+    </message>
+    <message>
+        <source>pm</source>
+        <translation>pm</translation>
+    </message>
+</context>
+<context>
+    <name>QPageSetupWidget</name>
+    <message>
+        <source>CC</source>
+        <translation>CC</translation>
+    </message>
+    <message>
+        <source>DD</source>
+        <translation>DD</translation>
+    </message>
+    <message>
+        <source>in</source>
+        <translation>in</translation>
+    </message>
+    <message>
+        <source>mm</source>
+        <translation>mm</translation>
+    </message>
+    <message>
+        <source>pt</source>
+        <translation>pt</translation>
+    </message>
+    <message>
+        <source>P̸</source>
+        <translation>P̸</translation>
+    </message>
+    <message>
+        <source>Form</source>
+        <translation>窗体</translation>
+    </message>
+    <message>
+        <source>bottom margin</source>
+        <translation>下边距</translation>
+    </message>
+    <message>
+        <source>Paper</source>
+        <translation>纸张</translation>
+    </message>
+    <message>
+        <source>Paper source:</source>
+        <translation>纸张源:</translation>
+    </message>
+    <message>
+        <source>right margin</source>
+        <translation>右边距</translation>
+    </message>
+    <message>
+        <source>Pica (P̸)</source>
+        <translation>Pica (P̸)</translation>
+    </message>
+    <message>
+        <source>Margins</source>
+        <translation>边距</translation>
+    </message>
+    <message>
+        <source>Custom</source>
+        <translation>自定义</translation>
+    </message>
+    <message>
+        <source>Landscape</source>
+        <translation>横向</translation>
+    </message>
+    <message>
+        <source>Page Layout</source>
+        <translation>页面布局</translation>
+    </message>
+    <message>
+        <source>Width:</source>
+        <translation>宽度:</translation>
+    </message>
+    <message>
+        <source>Orientation</source>
+        <translation>方向</translation>
+    </message>
+    <message>
+        <source>Didot (DD)</source>
+        <translation>Didot (DD)</translation>
+    </message>
+    <message>
+        <source>Portrait</source>
+        <translation>纵向</translation>
+    </message>
+    <message>
+        <source>Page order:</source>
+        <translation>页面顺序:</translation>
+    </message>
+    <message>
+        <source>top margin</source>
+        <translation>上边距</translation>
+    </message>
+    <message>
+        <source>left margin</source>
+        <translation>左边距</translation>
+    </message>
+    <message>
+        <source>Page size:</source>
+        <translation>纸张大小:</translation>
+    </message>
+    <message>
+        <source>Cicero (CC)</source>
+        <translation>Cicero (CC)</translation>
+    </message>
+    <message>
+        <source>Reverse portrait</source>
+        <translation>反向纵向</translation>
+    </message>
+    <message>
+        <source>Millimeters (mm)</source>
+        <translation>毫米 (mm)</translation>
+    </message>
+    <message>
+        <source>Points (pt)</source>
+        <translation>点 (pt)</translation>
+    </message>
+    <message>
+        <source>Pages per sheet:</source>
+        <translation>每张页数:</translation>
+    </message>
+    <message>
+        <source>Inches (in)</source>
+        <translation>英寸 (in)</translation>
+    </message>
+    <message>
+        <source>Reverse landscape</source>
+        <translation>反向横向</translation>
+    </message>
+    <message>
+        <source>Height:</source>
+        <translation>高度:</translation>
+    </message>
+</context>
+<context>
+    <name>QDBusTrayIcon</name>
+    <message>
+        <source>OK</source>
+        <translation>确定</translation>
+    </message>
+</context>
+<context>
+    <name>QDialogButtonBox</name>
+    <message>
+        <source>OK</source>
+        <translation>确定</translation>
+    </message>
+</context>
+<context>
+    <name>QPlatformTheme</name>
+    <message>
+        <source>OK</source>
+        <translation>确定</translation>
+    </message>
+    <message>
+        <source>&amp;No</source>
+        <translation>否(&amp;N)</translation>
+    </message>
+    <message>
+        <source>&amp;Yes</source>
+        <translation>是(&amp;Y)</translation>
+    </message>
+    <message>
+        <source>Help</source>
+        <translation>帮助</translation>
+    </message>
+    <message>
+        <source>Open</source>
+        <translation>打开</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation>保存</translation>
+    </message>
+    <message>
+        <source>Abort</source>
+        <translation>中止</translation>
+    </message>
+    <message>
+        <source>Apply</source>
+        <translation>应用</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation>关闭</translation>
+    </message>
+    <message>
+        <source>Reset</source>
+        <translation>重置</translation>
+    </message>
+    <message>
+        <source>Retry</source>
+        <translation>重试</translation>
+    </message>
+    <message>
+        <source>Restore Defaults</source>
+        <translation>恢复默认</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <source>Ignore</source>
+        <translation>忽略</translation>
+    </message>
+    <message>
+        <source>N&amp;o to All</source>
+        <translation>全否(&amp;O)</translation>
+    </message>
+    <message>
+        <source>Save All</source>
+        <translation>全部保存</translation>
+    </message>
+    <message>
+        <source>Discard</source>
+        <translation>放弃</translation>
+    </message>
+    <message>
+        <source>Yes to &amp;All</source>
+        <translation>全是(&amp;A)</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintDialog</name>
+    <message>
+        <source>OK</source>
+        <translation>确定</translation>
+    </message>
+    <message>
+        <source>Even Pages</source>
+        <translation>偶数页</translation>
+    </message>
+    <message>
+        <source>Print</source>
+        <translation>打印</translation>
+    </message>
+    <message>
+        <source>&amp;Options &lt;&lt;</source>
+        <translation>选项(&amp;O) &lt;&lt;</translation>
+    </message>
+    <message>
+        <source>&amp;Options &gt;&gt;</source>
+        <translation>选项(&amp;O) &gt;&gt;</translation>
+    </message>
+    <message>
+        <source>Left to Right, Top to Bottom</source>
+        <translation>从左到右,从上到下</translation>
+    </message>
+    <message>
+        <source>Right to Left, Bottom to Top</source>
+        <translation>从右到左,从下到上</translation>
+    </message>
+    <message>
+        <source>Write PDF file</source>
+        <translation>写 PDF 文件</translation>
+    </message>
+    <message>
+        <source>&amp;Print</source>
+        <translation>打印(&amp;P)</translation>
+    </message>
+    <message>
+        <source>1 (1x1)</source>
+        <translation>1 (1x1)</translation>
+    </message>
+    <message>
+        <source>Options &apos;Pages Per Sheet&apos; and &apos;Page Set&apos; cannot be used together.
+Please turn one of those options off.</source>
+        <translation>选项 &apos;每张页数&apos; 和 &apos;页面集&apos; 不能一起使用。
+请关闭其中一个选项。</translation>
+    </message>
+    <message>
+        <source>%1 already exists.
+Do you want to overwrite it?</source>
+        <translation>%1 已经存在。
+要覆盖它么?</translation>
+    </message>
+    <message>
+        <source>2 (2x1)</source>
+        <translation>2 (2x1)</translation>
+    </message>
+    <message>
+        <source>Left to Right, Bottom to Top</source>
+        <translation>从左到右,从下到上</translation>
+    </message>
+    <message>
+        <source>4 (2x2)</source>
+        <translation>4 (2x2)</translation>
+    </message>
+    <message>
+        <source>Odd Pages</source>
+        <translation>奇数页</translation>
+    </message>
+    <message>
+        <source>Local file</source>
+        <translation>本地文件</translation>
+    </message>
+    <message>
+        <source>6 (2x3)</source>
+        <translation>6 (2x3)</translation>
+    </message>
+    <message>
+        <source>16 (4x4)</source>
+        <translation>16 (4x4)</translation>
+    </message>
+    <message>
+        <source>There are conflicts in duplex settings. Do you want to fix them?</source>
+        <translation>双面打印设置中存在冲突。修复它们吗?</translation>
+    </message>
+    <message>
+        <source>Print to File (PDF)</source>
+        <translation>打印到文件(PDF)</translation>
+    </message>
+    <message>
+        <source>Print To File ...</source>
+        <translation>打印到文件…</translation>
+    </message>
+    <message>
+        <source>Invalid Pages Definition</source>
+        <translation>页面定义无效</translation>
+    </message>
+    <message>
+        <source>%1 does not follow the correct syntax. Please use &apos;,&apos; to separate ranges and pages, &apos;-&apos; to define ranges and make sure ranges do not intersect with each other.</source>
+        <translation>%1 未遵循正确的语法。请使用“,”分隔范围和页面,“-”定义范围并确保范围不相互交叉。</translation>
+    </message>
+    <message>
+        <source>9 (3x3)</source>
+        <translation>9 (3x3)</translation>
+    </message>
+    <message>
+        <source>Automatic</source>
+        <translation>自动</translation>
+    </message>
+    <message>
+        <source>Right to Left, Top to Bottom</source>
+        <translation>从右到左,从上到下</translation>
+    </message>
+    <message>
+        <source>Bottom to Top, Left to Right</source>
+        <translation>从下到上,从左到右</translation>
+    </message>
+    <message>
+        <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+        <translation>“从”的数值不能大于“到”的数值。</translation>
+    </message>
+    <message>
+        <source>All Pages</source>
+        <translation>所有页</translation>
+    </message>
+    <message>
+        <source>Duplex Settings Conflicts</source>
+        <translation>双面打印设置冲突</translation>
+    </message>
+    <message>
+        <source>%1 is a directory.
+Please choose a different file name.</source>
+        <translation>%1 是目录。
+请选择一个不同的文件名。</translation>
+    </message>
+    <message>
+        <source>File %1 is not writable.
+Please choose a different file name.</source>
+        <translation>文件 %1 不可写。
+请选择一个不同的文件名。</translation>
+    </message>
+    <message>
+        <source>Bottom to Top, Right to Left</source>
+        <translation>从下到上,从右到左</translation>
+    </message>
+    <message>
+        <source>Top to Bottom, Left to Right</source>
+        <translation>从上到下,从左到右</translation>
+    </message>
+    <message>
+        <source>Top to Bottom, Right to Left</source>
+        <translation>从上到下,从右到左</translation>
+    </message>
+</context>
+<context>
+    <name>QAndroidPlatformTheme</name>
+    <message>
+        <source>No</source>
+        <translation>否</translation>
+    </message>
+    <message>
+        <source>Yes</source>
+        <translation>是</translation>
+    </message>
+    <message>
+        <source>No to All</source>
+        <translation>全否</translation>
+    </message>
+    <message>
+        <source>Yes to All</source>
+        <translation>全是</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintSettingsOutput</name>
+    <message>
+        <source>to</source>
+        <translation>到</translation>
+    </message>
+    <message>
+        <source>Form</source>
+        <translation>窗体</translation>
+    </message>
+    <message>
+        <source>None</source>
+        <translation>无</translation>
+    </message>
+    <message>
+        <source>Color</source>
+        <translation>彩色</translation>
+    </message>
+    <message>
+        <source>Print all</source>
+        <translation>打印全部</translation>
+    </message>
+    <message>
+        <source>Pages</source>
+        <translation>页数</translation>
+    </message>
+    <message>
+        <source>Current Page</source>
+        <translation>当前页</translation>
+    </message>
+    <message>
+        <source>Selection</source>
+        <translation>选择</translation>
+    </message>
+    <message>
+        <source>Long side</source>
+        <translation>长侧</translation>
+    </message>
+    <message>
+        <source>Copies</source>
+        <translation>份数</translation>
+    </message>
+    <message>
+        <source>Print range</source>
+        <translation>打印范围</translation>
+    </message>
+    <message>
+        <source>Color Mode</source>
+        <translation>彩色模式</translation>
+    </message>
+    <message>
+        <source>Options</source>
+        <translation>选项</translation>
+    </message>
+    <message>
+        <source>Output Settings</source>
+        <translation>输出设置</translation>
+    </message>
+    <message>
+        <source>Reverse</source>
+        <translation>反向</translation>
+    </message>
+    <message>
+        <source>Grayscale</source>
+        <translation>灰度</translation>
+    </message>
+    <message>
+        <source>Short side</source>
+        <translation>短侧</translation>
+    </message>
+    <message>
+        <source>Collate</source>
+        <translation>校对</translation>
+    </message>
+    <message>
+        <source>Copies:</source>
+        <translation>份数:</translation>
+    </message>
+    <message>
+        <source>Specify pages or ranges separated by commas. Ranges are specified by two numbers separated by a hyphen. E.g: 3,5-7,9 prints pages 3, 5, 6, 7 and 9.</source>
+        <translation>指定用逗号分隔的页或范围。范围由两个用连字符分隔的数字指定。例如:3,5-7,9 打印第 3、5、6、7 和 9 页。</translation>
+    </message>
+    <message>
+        <source>Pages from</source>
+        <translation>页数从</translation>
+    </message>
+    <message>
+        <source>Page Set:</source>
+        <translation>页面集:</translation>
+    </message>
+    <message>
+        <source>Duplex Printing</source>
+        <translation>双面打印</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPreviewDialog</name>
+    <message>
+        <source>%1%</source>
+        <translation>%1%</translation>
+    </message>
+    <message>
+        <source>Print Preview</source>
+        <translation>打印预览</translation>
+    </message>
+    <message>
+        <source>Print</source>
+        <translation>打印</translation>
+    </message>
+    <message>
+        <source>Fit page</source>
+        <translation>适应页面</translation>
+    </message>
+    <message>
+        <source>Zoom in</source>
+        <translation>放大</translation>
+    </message>
+    <message>
+        <source>Landscape</source>
+        <translation>横向</translation>
+    </message>
+    <message>
+        <source>Zoom out</source>
+        <translation>缩小</translation>
+    </message>
+    <message>
+        <source>Fit width</source>
+        <translation>适应宽度</translation>
+    </message>
+    <message>
+        <source>Portrait</source>
+        <translation>纵向</translation>
+    </message>
+    <message>
+        <source>Page Setup</source>
+        <translation>页面设置</translation>
+    </message>
+    <message>
+        <source>Page setup</source>
+        <translation>打印设置</translation>
+    </message>
+    <message>
+        <source>Show overview of all pages</source>
+        <translation>显示所有页的概览</translation>
+    </message>
+    <message>
+        <source>First page</source>
+        <translation>第一页</translation>
+    </message>
+    <message>
+        <source>Last page</source>
+        <translation>最后一页</translation>
+    </message>
+    <message>
+        <source>Show single page</source>
+        <translation>显示单页</translation>
+    </message>
+    <message>
+        <source>Export to PDF</source>
+        <translation>导出为 PDF</translation>
+    </message>
+    <message>
+        <source>Previous page</source>
+        <translation>上一页</translation>
+    </message>
+    <message>
+        <source>Next page</source>
+        <translation>下一页</translation>
+    </message>
+    <message>
+        <source>Show facing pages</source>
+        <translation>显示当前页</translation>
+    </message>
+</context>
+<context>
+    <name>QErrorMessage</name>
+    <message>
+        <source>&amp;OK</source>
+        <translation>确定(&amp;O)</translation>
+    </message>
+    <message>
+        <source>Fatal Error:</source>
+        <translation>致命错误:</translation>
+    </message>
+    <message>
+        <source>&amp;Show this message again</source>
+        <translation>再次显示这个消息(&amp;S)</translation>
+    </message>
+    <message>
+        <source>Critical Error:</source>
+        <translation>严重错误:</translation>
+    </message>
+    <message>
+        <source>Information:</source>
+        <translation>信息:</translation>
+    </message>
+    <message>
+        <source>Debug Message:</source>
+        <translation>调试消息:</translation>
+    </message>
+    <message>
+        <source>Warning:</source>
+        <translation>警告:</translation>
+    </message>
+</context>
+<context>
+    <name>QGnomeTheme</name>
+    <message>
+        <source>&amp;OK</source>
+        <translation>确定(&amp;O)</translation>
+    </message>
+    <message>
+        <source>&amp;Save</source>
+        <translation>保存(&amp;S)</translation>
+    </message>
+    <message>
+        <source>&amp;Close</source>
+        <translation>关闭(&amp;C)</translation>
+    </message>
+    <message>
+        <source>Close without Saving</source>
+        <translation>不保存关闭</translation>
+    </message>
+    <message>
+        <source>&amp;Cancel</source>
+        <translation>取消(&amp;C)</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintWidget</name>
+    <message>
+        <source>...</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Form</source>
+        <translation>窗体</translation>
+    </message>
+    <message>
+        <source>Type:</source>
+        <translation>类型:</translation>
+    </message>
+    <message>
+        <source>&amp;Name:</source>
+        <translation>名称(&amp;N):</translation>
+    </message>
+    <message>
+        <source>Output &amp;file:</source>
+        <translation>输出文件(&amp;F):</translation>
+    </message>
+    <message>
+        <source>P&amp;roperties</source>
+        <translation>属性(&amp;R)</translation>
+    </message>
+    <message>
+        <source>Preview</source>
+        <translation>预览</translation>
+    </message>
+    <message>
+        <source>Printer</source>
+        <translation>打印机</translation>
+    </message>
+    <message>
+        <source>Location:</source>
+        <translation>位置:</translation>
+    </message>
+</context>
+<context>
+    <name>QFontDatabase</name>
+    <message>
+        <source>Any</source>
+        <translation>任意</translation>
+    </message>
+    <message>
+        <source>Lao</source>
+        <translation>老挝文</translation>
+    </message>
+    <message>
+        <source>Bold</source>
+        <translation>粗体</translation>
+    </message>
+    <message>
+        <source>Demi</source>
+        <translation>半体</translation>
+    </message>
+    <message>
+        <source>N&apos;Ko</source>
+        <translation>N&apos;Ko(西非书面语)</translation>
+    </message>
+    <message>
+        <source>Thai</source>
+        <translation>泰文</translation>
+    </message>
+    <message>
+        <source>Thin</source>
+        <translation>细体</translation>
+    </message>
+    <message>
+        <source>Black</source>
+        <translation>黑体</translation>
+    </message>
+    <message>
+        <source>Extra</source>
+        <translation>额外</translation>
+    </message>
+    <message>
+        <source>Greek</source>
+        <translation>希腊文</translation>
+    </message>
+    <message>
+        <source>Khmer</source>
+        <translation>谷美尔文</translation>
+    </message>
+    <message>
+        <source>Latin</source>
+        <translation>拉丁文</translation>
+    </message>
+    <message>
+        <source>Light</source>
+        <translation>轻体</translation>
+    </message>
+    <message>
+        <source>Ogham</source>
+        <translation>欧甘文</translation>
+    </message>
+    <message>
+        <source>Oriya</source>
+        <translation>奥里雅文</translation>
+    </message>
+    <message>
+        <source>Runic</source>
+        <translation>古北欧文</translation>
+    </message>
+    <message>
+        <source>Tamil</source>
+        <translation>泰米尔文</translation>
+    </message>
+    <message>
+        <source>Cyrillic</source>
+        <translation>西里尔文</translation>
+    </message>
+    <message>
+        <source>Kannada</source>
+        <translation>埃纳德文</translation>
+    </message>
+    <message>
+        <source>Malayalam</source>
+        <translation>马拉亚拉姆文</translation>
+    </message>
+    <message>
+        <source>Extra Light</source>
+        <translation>特细</translation>
+    </message>
+    <message>
+        <source>Simplified Chinese</source>
+        <translation>简体中文</translation>
+    </message>
+    <message>
+        <source>Demi Bold</source>
+        <translation>半粗体</translation>
+    </message>
+    <message>
+        <source>Arabic</source>
+        <translation>阿拉伯文</translation>
+    </message>
+    <message>
+        <source>Hebrew</source>
+        <translation>希伯来文</translation>
+    </message>
+    <message>
+        <source>Myanmar</source>
+        <translation>缅甸文</translation>
+    </message>
+    <message>
+        <source>Italic</source>
+        <translation>斜体</translation>
+    </message>
+    <message>
+        <source>Korean</source>
+        <translation>韩文</translation>
+    </message>
+    <message>
+        <source>Medium</source>
+        <translation>中等</translation>
+    </message>
+    <message>
+        <source>Normal</source>
+        <translation>常规</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>倾斜</translation>
+    </message>
+    <message>
+        <source>Telugu</source>
+        <translation>泰卢固文</translation>
+    </message>
+    <message>
+        <source>Thaana</source>
+        <translation>马尔代夫文</translation>
+    </message>
+    <message>
+        <source>Symbol</source>
+        <translation>符号</translation>
+    </message>
+    <message>
+        <source>Syriac</source>
+        <translation>叙利亚文</translation>
+    </message>
+    <message>
+        <source>Extra Bold</source>
+        <translation>特粗</translation>
+    </message>
+    <message>
+        <source>Devanagari</source>
+        <translation>梵文</translation>
+    </message>
+    <message>
+        <source>Japanese</source>
+        <translation>日文</translation>
+    </message>
+    <message>
+        <source>Bengali</source>
+        <translation>孟加拉文</translation>
+    </message>
+    <message>
+        <source>Armenian</source>
+        <translation>亚美尼亚文</translation>
+    </message>
+    <message>
+        <source>Sinhala</source>
+        <translation>僧伽罗文</translation>
+    </message>
+    <message>
+        <source>Tibetan</source>
+        <translation>藏文</translation>
+    </message>
+    <message>
+        <source>Vietnamese</source>
+        <translation>越南文</translation>
+    </message>
+    <message>
+        <source>Gujarati</source>
+        <translation>古吉拉特文</translation>
+    </message>
+    <message>
+        <source>Traditional Chinese</source>
+        <translation>繁体中文</translation>
+    </message>
+    <message>
+        <source>Georgian</source>
+        <translation>格鲁吉亚文</translation>
+    </message>
+    <message>
+        <source>Gurmukhi</source>
+        <translation>旁遮普文</translation>
+    </message>
+</context>
+<context>
+    <name>QCocoaMenuItem</name>
+    <message>
+        <source>Cut</source>
+        <translation>剪切</translation>
+    </message>
+    <message>
+        <source>Copy</source>
+        <translation>复制</translation>
+    </message>
+    <message>
+        <source>Exit</source>
+        <translation>退出</translation>
+    </message>
+    <message>
+        <source>Quit</source>
+        <translation>退出</translation>
+    </message>
+    <message>
+        <source>About</source>
+        <translation>关于</translation>
+    </message>
+    <message>
+        <source>Paste</source>
+        <translation>粘贴</translation>
+    </message>
+    <message>
+        <source>Setup</source>
+        <translation>设置</translation>
+    </message>
+    <message>
+        <source>Config</source>
+        <translation>配置</translation>
+    </message>
+    <message>
+        <source>Options</source>
+        <translation>选项</translation>
+    </message>
+    <message>
+        <source>About Qt</source>
+        <translation>关于 Qt</translation>
+    </message>
+    <message>
+        <source>Setting</source>
+        <translation>设置</translation>
+    </message>
+    <message>
+        <source>Select All</source>
+        <translation>全选</translation>
+    </message>
+    <message>
+        <source>Preference</source>
+        <translation>首选项</translation>
+    </message>
+</context>
+<context>
+    <name>QCupsJobWidget</name>
+    <message>
+        <source>Job</source>
+        <translation>作业</translation>
+    </message>
+    <message>
+        <source>End:</source>
+        <translation>结束:</translation>
+    </message>
+    <message>
+        <source>None</source>
+        <translation>无</translation>
+    </message>
+    <message>
+        <source>Banner Pages</source>
+        <translation>横幅页</translation>
+    </message>
+    <message>
+        <source>Night (18:00 to 05:59)</source>
+        <translation>晚上(18:00至05:59)</translation>
+    </message>
+    <message>
+        <source>Specific Time</source>
+        <translation>特定时间</translation>
+    </message>
+    <message>
+        <source>Billing information:</source>
+        <translation>计费信息:</translation>
+    </message>
+    <message>
+        <source>Scheduled printing:</source>
+        <translation>计划打印:</translation>
+    </message>
+    <message>
+        <source>Secret</source>
+        <translation>秘密</translation>
+    </message>
+    <message>
+        <source>Top Secret</source>
+        <translation>绝密</translation>
+    </message>
+    <message>
+        <source>Start:</source>
+        <translation>开始:</translation>
+    </message>
+    <message>
+        <source>Day (06:00 to 17:59)</source>
+        <translation>白天(06:00至17:59)</translation>
+    </message>
+    <message>
+        <source>Second Shift (16:00 to 23:59)</source>
+        <translation>第二班(16:00至23:59)</translation>
+    </message>
+    <message>
+        <source>Job Control</source>
+        <translation>作业控制</translation>
+    </message>
+    <message>
+        <source>Weekend (Saturday to Sunday)</source>
+        <translation>周末(周六至周日)</translation>
+    </message>
+    <message>
+        <source>Standard</source>
+        <translation>标准</translation>
+    </message>
+    <message>
+        <source>Classified</source>
+        <translation>分类</translation>
+    </message>
+    <message>
+        <source>Third Shift (00:00 to 07:59)</source>
+        <translation>第三班(00:00至07:59)</translation>
+    </message>
+    <message>
+        <source>Hold Indefinitely</source>
+        <translation>无限期持有</translation>
+    </message>
+    <message>
+        <source>Print Immediately</source>
+        <translation>立即打印</translation>
+    </message>
+    <message>
+        <source>Confidential</source>
+        <translation>机密</translation>
+    </message>
+    <message>
+        <source>Job priority:</source>
+        <translation>工作优先级:</translation>
+    </message>
+    <message>
+        <source>Unclassified</source>
+        <translation>未分类</translation>
+    </message>
+</context>
+<context>
+    <name>QScrollBar</name>
+    <message>
+        <source>Top</source>
+        <translation>顶部</translation>
+    </message>
+    <message>
+        <source>Scroll down</source>
+        <translation>向下滚动</translation>
+    </message>
+    <message>
+        <source>Scroll here</source>
+        <translation>滚动到这里</translation>
+    </message>
+    <message>
+        <source>Scroll left</source>
+        <translation>向左滚动</translation>
+    </message>
+    <message>
+        <source>Bottom</source>
+        <translation>底部</translation>
+    </message>
+    <message>
+        <source>Page up</source>
+        <translation>上一页</translation>
+    </message>
+    <message>
+        <source>Page right</source>
+        <translation>右一页</translation>
+    </message>
+    <message>
+        <source>Scroll up</source>
+        <translation>向上滚动</translation>
+    </message>
+    <message>
+        <source>Scroll right</source>
+        <translation>向右滚动</translation>
+    </message>
+    <message>
+        <source>Left edge</source>
+        <translation>左边缘</translation>
+    </message>
+    <message>
+        <source>Page down</source>
+        <translation>下一页</translation>
+    </message>
+    <message>
+        <source>Page left</source>
+        <translation>左一页</translation>
+    </message>
+    <message>
+        <source>Right edge</source>
+        <translation>右边缘</translation>
+    </message>
+</context>
+<context>
+    <name>QSpiAccessibleBridge</name>
+    <message>
+        <source>row</source>
+        <translation>行</translation>
+    </message>
+    <message>
+        <source>cell</source>
+        <translation>单元格</translation>
+    </message>
+    <message>
+        <source>dial</source>
+        <translation>表盘</translation>
+    </message>
+    <message>
+        <source>form</source>
+        <translation>窗体</translation>
+    </message>
+    <message>
+        <source>grip</source>
+        <translation>底框</translation>
+    </message>
+    <message>
+        <source>link</source>
+        <translation>链接</translation>
+    </message>
+    <message>
+        <source>list</source>
+        <translation>列表</translation>
+    </message>
+    <message>
+        <source>note</source>
+        <translation>便笺</translation>
+    </message>
+    <message>
+        <source>text</source>
+        <translation>文本</translation>
+    </message>
+    <message>
+        <source>tree</source>
+        <translation>树</translation>
+    </message>
+    <message>
+        <source>animation</source>
+        <translation>动画</translation>
+    </message>
+    <message>
+        <source>chart</source>
+        <translation>图表</translation>
+    </message>
+    <message>
+        <source>clock</source>
+        <translation>时钟</translation>
+    </message>
+    <message>
+        <source>frame</source>
+        <translation>框架</translation>
+    </message>
+    <message>
+        <source>label</source>
+        <translation>标签</translation>
+    </message>
+    <message>
+        <source>panel</source>
+        <translation>面板</translation>
+    </message>
+    <message>
+        <source>space</source>
+        <translation>空间</translation>
+    </message>
+    <message>
+        <source>sound</source>
+        <translation>声音</translation>
+    </message>
+    <message>
+        <source>table</source>
+        <translation>表格</translation>
+    </message>
+    <message>
+        <source>radio button</source>
+        <translation>单选按钮</translation>
+    </message>
+    <message>
+        <source>page tab list</source>
+        <translation>选项卡列表</translation>
+    </message>
+    <message>
+        <source>web document</source>
+        <translation>网络文件</translation>
+    </message>
+    <message>
+        <source>combo box</source>
+        <translation>组合框</translation>
+    </message>
+    <message>
+        <source>color chooser</source>
+        <translation>颜色选择器</translation>
+    </message>
+    <message>
+        <source>menu item</source>
+        <translation>菜单项目</translation>
+    </message>
+    <message>
+        <source>document</source>
+        <translation>文档</translation>
+    </message>
+    <message>
+        <source>scroll bar</source>
+        <translation>滚动条</translation>
+    </message>
+    <message>
+        <source>tool bar</source>
+        <translation>工具栏</translation>
+    </message>
+    <message>
+        <source>tool tip</source>
+        <translation>工具提示</translation>
+    </message>
+    <message>
+        <source>text caret</source>
+        <translation>文字插入符号</translation>
+    </message>
+    <message>
+        <source>button menu</source>
+        <translation>按钮菜单</translation>
+    </message>
+    <message>
+        <source>separator</source>
+        <translation>分隔符</translation>
+    </message>
+    <message>
+        <source>canvas</source>
+        <translation>画布</translation>
+    </message>
+    <message>
+        <source>column</source>
+        <translation>列</translation>
+    </message>
+    <message>
+        <source>cursor</source>
+        <translation>光标</translation>
+    </message>
+    <message>
+        <source>dialog</source>
+        <translation>对话框</translation>
+    </message>
+    <message>
+        <source>filler</source>
+        <translation>填充</translation>
+    </message>
+    <message>
+        <source>footer</source>
+        <translation>页脚</translation>
+    </message>
+    <message>
+        <source>push button</source>
+        <translation>按下按钮</translation>
+    </message>
+    <message>
+        <source>row header</source>
+        <translation>行标题</translation>
+    </message>
+    <message>
+        <source>spin box</source>
+        <translation>数字显示框</translation>
+    </message>
+    <message>
+        <source>splitter</source>
+        <translation>拆分器</translation>
+    </message>
+    <message>
+        <source>slider</source>
+        <translation>滑块</translation>
+    </message>
+    <message>
+        <source>button with drop down grid</source>
+        <translation>下拉式网格按钮</translation>
+    </message>
+    <message>
+        <source>page tab</source>
+        <translation>选项卡</translation>
+    </message>
+    <message>
+        <source>invalid role</source>
+        <translation>无效角色</translation>
+    </message>
+    <message>
+        <source>paragraph</source>
+        <translation>段落</translation>
+    </message>
+    <message>
+        <source>equation</source>
+        <translation>方程式</translation>
+    </message>
+    <message>
+        <source>notification</source>
+        <translation>通知</translation>
+    </message>
+    <message>
+        <source>complementary content</source>
+        <translation>补充内容</translation>
+    </message>
+    <message>
+        <source>section</source>
+        <translation>分段</translation>
+    </message>
+    <message>
+        <source>assistant</source>
+        <translation>助理</translation>
+    </message>
+    <message>
+        <source>list item</source>
+        <translation>列表项目</translation>
+    </message>
+    <message>
+        <source>desktop</source>
+        <translation>桌面</translation>
+    </message>
+    <message>
+        <source>indicator</source>
+        <translation>指示器</translation>
+    </message>
+    <message>
+        <source>title bar</source>
+        <translation>标题栏</translation>
+    </message>
+    <message>
+        <source>tree item</source>
+        <translation>树项目</translation>
+    </message>
+    <message>
+        <source>check box</source>
+        <translation>复选框</translation>
+    </message>
+    <message>
+        <source>status bar</source>
+        <translation>状态栏</translation>
+    </message>
+    <message>
+        <source>progress bar</source>
+        <translation>进度栏</translation>
+    </message>
+    <message>
+        <source>alert message</source>
+        <translation>通知邮件</translation>
+    </message>
+    <message>
+        <source>property page</source>
+        <translation>属性页</translation>
+    </message>
+    <message>
+        <source>popup menu</source>
+        <translation>弹出式菜单</translation>
+    </message>
+    <message>
+        <source>layered pane</source>
+        <translation>分层窗格</translation>
+    </message>
+    <message>
+        <source>unknown</source>
+        <translation>未知</translation>
+    </message>
+    <message>
+        <source>menu bar</source>
+        <translation>菜单栏</translation>
+    </message>
+    <message>
+        <source>column header</source>
+        <translation>列标题</translation>
+    </message>
+    <message>
+        <source>terminal</source>
+        <translation>终端</translation>
+    </message>
+    <message>
+        <source>button with drop down</source>
+        <translation>下拉按钮</translation>
+    </message>
+    <message>
+        <source>hotkey field</source>
+        <translation>热键字段</translation>
+    </message>
+    <message>
+        <source>graphic</source>
+        <translation>图形</translation>
+    </message>
+    <message>
+        <source>help balloon</source>
+        <translation>气球式帮助</translation>
+    </message>
+    <message>
+        <source>heading</source>
+        <translation>标题</translation>
+    </message>
+    <message>
+        <source>application</source>
+        <translation>应用</translation>
+    </message>
+</context>
+<context>
+    <name>QFile</name>
+    <message>
+        <source>Cannot remove source file</source>
+        <translation>无法删除源文件</translation>
+    </message>
+    <message>
+        <source>Destination file is the same file.</source>
+        <translation>目标文件是同一个文件。</translation>
+    </message>
+    <message>
+        <source>Cannot create %1 for output</source>
+        <translation>无法为输出创建 %1</translation>
+    </message>
+    <message>
+        <source>Failure to write block</source>
+        <translation>写入块失败</translation>
+    </message>
+    <message>
+        <source>Cannot open %1 for input</source>
+        <translation>无法打开 %1 进行输入</translation>
+    </message>
+    <message>
+        <source>Destination file exists</source>
+        <translation>目标文件已存在</translation>
+    </message>
+    <message>
+        <source>Cannot open destination file: %1</source>
+        <translation>无法打开目标文件:%1</translation>
+    </message>
+    <message>
+        <source>Cannot open for output</source>
+        <translation>无法打开以进行输出</translation>
+    </message>
+    <message>
+        <source>Will not rename sequential file using block copy</source>
+        <translation>不会使用块复制重命名顺序文件</translation>
+    </message>
+    <message>
+        <source>Error while renaming: %1</source>
+        <translation>重命名时出错:%1</translation>
+    </message>
+    <message>
+        <source>Source file does not exist.</source>
+        <translation>源文件不存在。</translation>
+    </message>
+    <message>
+        <source>Unable to restore from %1: %2</source>
+        <translation>无法从 %1 恢复:%2</translation>
+    </message>
+</context>
+<context>
+    <name>QXmlStream</name>
+    <message>
+        <source>&apos;%1&apos;</source>
+        <translation>“%1”</translation>
+    </message>
+    <message>
+        <source>Reference to unparsed entity &apos;%1&apos;.</source>
+        <translation>未解析实体“%1”的引用。</translation>
+    </message>
+    <message>
+        <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+        <translation>在公有标识文本中有异常的字符“%1”。</translation>
+    </message>
+    <message>
+        <source>Illegal namespace declaration.</source>
+        <translation>非法的命名空间声明。</translation>
+    </message>
+    <message>
+        <source>Invalid XML character.</source>
+        <translation>无效的 XML 字符。</translation>
+    </message>
+    <message>
+        <source>Expected character data.</source>
+        <translation>需要字符数据。</translation>
+    </message>
+    <message>
+        <source>Standalone accepts only yes or no.</source>
+        <translation>独立运行只允许是或者否。</translation>
+    </message>
+    <message>
+        <source>Invalid XML version string.</source>
+        <translation>无效的 XML 版本字符串。</translation>
+    </message>
+    <message>
+        <source>Invalid processing instruction name.</source>
+        <translation>无效的处理指令名称。</translation>
+    </message>
+    <message>
+        <source>Namespace prefix &apos;%1&apos; not declared</source>
+        <translation>命名空间的“%1”前缀没有被声明</translation>
+    </message>
+    <message>
+        <source>Entity &apos;%1&apos; not declared.</source>
+        <translation>实体“%1”没有被声明。</translation>
+    </message>
+    <message>
+        <source>%1, &apos;%2&apos;</source>
+        <translation>%1,“%2”</translation>
+    </message>
+    <message>
+        <source>%1 is an invalid processing instruction name.</source>
+        <translation>%1 是无效的处理指令名称。</translation>
+    </message>
+    <message>
+        <source>The standalone pseudo attribute must appear after the encoding.</source>
+        <translation>独立运行伪属性必须出现在编码之后。</translation>
+    </message>
+    <message>
+        <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+        <translation>内容中不允许有“]]&gt;”序列。</translation>
+    </message>
+    <message>
+        <source>%1 is an invalid encoding name.</source>
+        <translation>%1 是无效的编码名称。</translation>
+    </message>
+    <message>
+        <source>%1 or &apos;%2&apos;</source>
+        <translation>%1 或“%2”</translation>
+    </message>
+    <message>
+        <source>%1, or &apos;%2&apos;</source>
+        <translation>%1,或“%2”</translation>
+    </message>
+    <message>
+        <source>Start tag expected.</source>
+        <translation>需要开始标记。</translation>
+    </message>
+    <message>
+        <source>Invalid character reference.</source>
+        <translation>无效的字符引用。</translation>
+    </message>
+    <message>
+        <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+        <translation>在属性值中的外部实体“%1”的引用。</translation>
+    </message>
+    <message>
+        <source>Expected %1, but got &apos;%2&apos;.</source>
+        <translation>应为 %1,但得到了“%2”。</translation>
+    </message>
+    <message>
+        <source>Invalid document.</source>
+        <translation>无效的文档。</translation>
+    </message>
+    <message>
+        <source>Opening and ending tag mismatch.</source>
+        <translation>开始标记和结束标记不匹配。</translation>
+    </message>
+    <message>
+        <source>Unexpected &apos;%1&apos;.</source>
+        <translation>异常的“%1”。</translation>
+    </message>
+    <message>
+        <source>Encountered incorrectly encoded content.</source>
+        <translation>遇到不正确的编码内容。</translation>
+    </message>
+    <message>
+        <source>Invalid attribute in XML declaration.</source>
+        <translation>在 XML 声明中无效的属性。</translation>
+    </message>
+    <message>
+        <source>%1 is an invalid PUBLIC identifier.</source>
+        <translation>%1 是一个无效的公有(PUBLIC)标识符。</translation>
+    </message>
+    <message>
+        <source>Extra content at end of document.</source>
+        <translation>文档末尾有额外内容。</translation>
+    </message>
+    <message>
+        <source>Attribute &apos;%1&apos; redefined.</source>
+        <translation>属性“%1”已重新定义。</translation>
+    </message>
+    <message>
+        <source>Invalid XML name.</source>
+        <translation>无效的 XML 名称。</translation>
+    </message>
+    <message>
+        <source>Premature end of document.</source>
+        <translation>文档过早的结束。</translation>
+    </message>
+    <message>
+        <source>XML declaration not at start of document.</source>
+        <translation>XML 声明没有在文档的开始位置。</translation>
+    </message>
+    <message>
+        <source>Unsupported XML version.</source>
+        <translation>不被支持的 XML 版本。</translation>
+    </message>
+    <message>
+        <source>Invalid entity value.</source>
+        <translation>无效的实体值。</translation>
+    </message>
+    <message>
+        <source>Encoding %1 is unsupported</source>
+        <translation>编码 %1 不被支持</translation>
+    </message>
+    <message>
+        <source>NDATA in parameter entity declaration.</source>
+        <translation>在参数实体声明中有 NDATA。</translation>
+    </message>
+</context>
+<context>
+    <name>QFileDialog</name>
+    <message>
+        <source>Back</source>
+        <translation>后退</translation>
+    </message>
+    <message>
+        <source>File</source>
+        <translation>文件</translation>
+    </message>
+    <message>
+        <source>Open</source>
+        <translation>打开</translation>
+    </message>
+    <message>
+        <source>&amp;Open</source>
+        <translation>打开(&amp;O)</translation>
+    </message>
+    <message>
+        <source>&amp;Save</source>
+        <translation>保存(&amp;S)</translation>
+    </message>
+    <message>
+        <source>Alias</source>
+        <translation>别名</translation>
+    </message>
+    <message>
+        <source>Drive</source>
+        <translation>驱动器</translation>
+    </message>
+    <message>
+        <source>Files</source>
+        <translation>文件</translation>
+    </message>
+    <message>
+        <source>Show </source>
+        <translation>显示 </translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+        <translation>“%1”是写保护的。
+是否仍要删除它?</translation>
+    </message>
+    <message>
+        <source>Are you sure you want to delete &apos;%1&apos;?</source>
+        <translation>确定要删除“%1”吗?</translation>
+    </message>
+    <message>
+        <source>List of places and bookmarks</source>
+        <translation>地点和书签列表</translation>
+    </message>
+    <message>
+        <source>File &amp;name:</source>
+        <translation>文件名称(&amp;N):</translation>
+    </message>
+    <message>
+        <source>Alt+Left</source>
+        <translation>Alt+Left</translation>
+    </message>
+    <message>
+        <source>Alt+Up</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>File Folder</source>
+        <translation>文件夹</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>删除</translation>
+    </message>
+    <message>
+        <source>New Folder</source>
+        <translation>新建文件夹</translation>
+    </message>
+    <message>
+        <source>Folder</source>
+        <translation>文件夹</translation>
+    </message>
+    <message>
+        <source>Parent Directory</source>
+        <translation>父目录</translation>
+    </message>
+    <message>
+        <source>&amp;New Folder</source>
+        <translation>新建文件夹(&amp;N)</translation>
+    </message>
+    <message>
+        <source>Remove</source>
+        <translation>移除</translation>
+    </message>
+    <message>
+        <source>My Computer</source>
+        <translation>我的计算机</translation>
+    </message>
+    <message>
+        <source>Look in:</source>
+        <translation>查找范围:</translation>
+    </message>
+    <message>
+        <source>Alt+Right</source>
+        <translation>Alt+Right</translation>
+    </message>
+    <message>
+        <source>Create a New Folder</source>
+        <translation>创建新文件夹</translation>
+    </message>
+    <message>
+        <source>%1 File</source>
+        <translation>%1 文件</translation>
+    </message>
+    <message>
+        <source>Files of type:</source>
+        <translation>文件类型:</translation>
+    </message>
+    <message>
+        <source>Find Directory</source>
+        <translation>查找目录</translation>
+    </message>
+    <message>
+        <source>Show &amp;hidden files</source>
+        <translation>显示隐藏文件(&amp;H)</translation>
+    </message>
+    <message>
+        <source>Save As</source>
+        <translation>另存为</translation>
+    </message>
+    <message>
+        <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+        <translation>目录 %1
+没有找到。
+请核实已给定正确目录名。</translation>
+    </message>
+    <message>
+        <source>Sidebar</source>
+        <translation>侧边栏</translation>
+    </message>
+    <message>
+        <source>List View</source>
+        <translation>列表视图</translation>
+    </message>
+    <message>
+        <source>&amp;Choose</source>
+        <translation>选择(&amp;C)</translation>
+    </message>
+    <message>
+        <source>&amp;Delete</source>
+        <translation>删除(&amp;D)</translation>
+    </message>
+    <message>
+        <source>All files (*)</source>
+        <translation>所有文件 (*)</translation>
+    </message>
+    <message>
+        <source>All Files (*)</source>
+        <translation>所有文件 (*)</translation>
+    </message>
+    <message>
+        <source>Directories</source>
+        <translation>目录</translation>
+    </message>
+    <message>
+        <source>&amp;Rename</source>
+        <translation>重命名(&amp;R)</translation>
+    </message>
+    <message>
+        <source>Could not delete directory.</source>
+        <translation>不能删除目录。</translation>
+    </message>
+    <message>
+        <source>Directory:</source>
+        <translation>目录:</translation>
+    </message>
+    <message>
+        <source>Unknown</source>
+        <translation>未知</translation>
+    </message>
+    <message>
+        <source>%1 already exists.
+Do you want to replace it?</source>
+        <translation>%1 已存在。
+是否要替换它?</translation>
+    </message>
+    <message>
+        <source>Forward</source>
+        <translation>前进</translation>
+    </message>
+    <message>
+        <source>Go forward</source>
+        <translation>向前</translation>
+    </message>
+    <message>
+        <source>Go to the parent directory</source>
+        <translation>转到父目录</translation>
+    </message>
+    <message>
+        <source>Recent Places</source>
+        <translation>最近的位置</translation>
+    </message>
+    <message>
+        <source>Go back</source>
+        <translation>返回</translation>
+    </message>
+    <message>
+        <source>Change to detail view mode</source>
+        <translation>切换到详细视图模式</translation>
+    </message>
+    <message>
+        <source>Create New Folder</source>
+        <translation>创建新文件夹</translation>
+    </message>
+    <message>
+        <source>Shortcut</source>
+        <translation>快捷方式</translation>
+    </message>
+    <message>
+        <source>Detail View</source>
+        <translation>详细视图</translation>
+    </message>
+    <message>
+        <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+        <translation>文件 %1
+没有找到。
+请核实已给定正确文件名。</translation>
+    </message>
+    <message>
+        <source>Change to list view mode</source>
+        <translation>更改为列表视图模式</translation>
+    </message>
+</context>
+<context>
+    <name>QLineEdit</name>
+    <message>
+        <source>Cu&amp;t</source>
+        <translation>剪切(&amp;T)</translation>
+    </message>
+    <message>
+        <source>&amp;Copy</source>
+        <translation>复制(&amp;C)</translation>
+    </message>
+    <message>
+        <source>&amp;Redo</source>
+        <translation>恢复(&amp;R)</translation>
+    </message>
+    <message>
+        <source>&amp;Undo</source>
+        <translation>撤消(&amp;U)</translation>
+    </message>
+    <message>
+        <source>&amp;Paste</source>
+        <translation>粘贴(&amp;P)</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>删除</translation>
+    </message>
+    <message>
+        <source>Select All</source>
+        <translation>全选</translation>
+    </message>
+</context>
+<context>
+    <name>QWidgetTextControl</name>
+    <message>
+        <source>Cu&amp;t</source>
+        <translation>剪切(&amp;T)</translation>
+    </message>
+    <message>
+        <source>&amp;Copy</source>
+        <translation>复制(&amp;C)</translation>
+    </message>
+    <message>
+        <source>&amp;Redo</source>
+        <translation>恢复(&amp;R)</translation>
+    </message>
+    <message>
+        <source>&amp;Undo</source>
+        <translation>撤消(&amp;U)</translation>
+    </message>
+    <message>
+        <source>&amp;Paste</source>
+        <translation>粘贴(&amp;P)</translation>
+    </message>
+    <message>
+        <source>Delete</source>
+        <translation>删除</translation>
+    </message>
+    <message>
+        <source>Select All</source>
+        <translation>全选</translation>
+    </message>
+    <message>
+        <source>Copy &amp;Link Location</source>
+        <translation>复制链接地址(&amp;L)</translation>
+    </message>
+</context>
+<context>
+    <name>QWizard</name>
+    <message>
+        <source>Done</source>
+        <translation>完成</translation>
+    </message>
+    <message>
+        <source>Help</source>
+        <translation>帮助</translation>
+    </message>
+    <message>
+        <source>&amp;Help</source>
+        <translation>帮助(&amp;H)</translation>
+    </message>
+    <message>
+        <source>&amp;Next</source>
+        <translation>下一步(&amp;N)</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <source>Commit</source>
+        <translation>提交</translation>
+    </message>
+    <message>
+        <source>Continue</source>
+        <translation>继续</translation>
+    </message>
+    <message>
+        <source>&amp;Finish</source>
+        <translation>完成(&amp;F)</translation>
+    </message>
+    <message>
+        <source>&amp;Next &gt;</source>
+        <translation>下一步(&amp;N) &gt;</translation>
+    </message>
+    <message>
+        <source>Go Back</source>
+        <translation>返回</translation>
+    </message>
+    <message>
+        <source>&lt; &amp;Back</source>
+        <translation>&lt; 上一步(&amp;B)</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPropertiesWidget</name>
+    <message>
+        <source>Form</source>
+        <translation>窗体</translation>
+    </message>
+    <message>
+        <source>Page</source>
+        <translation>页</translation>
+    </message>
+    <message>
+        <source>There are conflicts in some options. Please fix them.</source>
+        <translation>某些选项存在冲突。请修复它们。</translation>
+    </message>
+    <message>
+        <source>Advanced</source>
+        <translation>高级</translation>
+    </message>
+</context>
+<context>
+    <name>QMdiSubWindow</name>
+    <message>
+        <source>Help</source>
+        <translation>帮助</translation>
+    </message>
+    <message>
+        <source>Menu</source>
+        <translation>菜单</translation>
+    </message>
+    <message>
+        <source>&amp;Move</source>
+        <translation>移动(&amp;M)</translation>
+    </message>
+    <message>
+        <source>&amp;Size</source>
+        <translation>大小(&amp;S)</translation>
+    </message>
+    <message>
+        <source>Close</source>
+        <translation>关闭</translation>
+    </message>
+    <message>
+        <source>Minimize</source>
+        <translation>最小化</translation>
+    </message>
+    <message>
+        <source>Shade</source>
+        <translation>遮蔽</translation>
+    </message>
+    <message>
+        <source>Stay on &amp;Top</source>
+        <translation>总在最前(&amp;T)</translation>
+    </message>
+    <message>
+        <source>&amp;Close</source>
+        <translation>关闭(&amp;C)</translation>
+    </message>
+    <message>
+        <source>- [%1]</source>
+        <translation>- [%1]</translation>
+    </message>
+    <message>
+        <source>%1 - [%2]</source>
+        <translation>%1 - [%2]</translation>
+    </message>
+    <message>
+        <source>&amp;Restore</source>
+        <translation>恢复(&amp;R)</translation>
+    </message>
+    <message>
+        <source>Restore</source>
+        <translation>恢复</translation>
+    </message>
+    <message>
+        <source>Maximize</source>
+        <translation>最大化</translation>
+    </message>
+    <message>
+        <source>Unshade</source>
+        <translation>取消遮蔽</translation>
+    </message>
+    <message>
+        <source>Mi&amp;nimize</source>
+        <translation>最小化(&amp;N)</translation>
+    </message>
+    <message>
+        <source>Ma&amp;ximize</source>
+        <translation>最大化(&amp;X)</translation>
+    </message>
+    <message>
+        <source>Restore Down</source>
+        <translation>向下恢复</translation>
+    </message>
+</context>
+<context>
+    <name>QStandardPaths</name>
+    <message>
+        <source>Home</source>
+        <translation>主文件夹</translation>
+    </message>
+    <message>
+        <source>Cache</source>
+        <translation>缓存</translation>
+    </message>
+    <message>
+        <source>Fonts</source>
+        <translation>字体</translation>
+    </message>
+    <message>
+        <source>Music</source>
+        <translation>音乐</translation>
+    </message>
+    <message>
+        <source>Shared Cache</source>
+        <translation>共享缓存</translation>
+    </message>
+    <message>
+        <source>Shared Configuration</source>
+        <translation>共享配置</translation>
+    </message>
+    <message>
+        <source>Movies</source>
+        <translation>电影</translation>
+    </message>
+    <message>
+        <source>Application Configuration</source>
+        <translation>应用程序配置</translation>
+    </message>
+    <message>
+        <source>Download</source>
+        <translation>下载</translation>
+    </message>
+    <message>
+        <source>Configuration</source>
+        <translation>配置</translation>
+    </message>
+    <message>
+        <source>Application Data</source>
+        <translation>应用程序数据</translation>
+    </message>
+    <message>
+        <source>Runtime</source>
+        <translation>运行时</translation>
+    </message>
+    <message>
+        <source>Documents</source>
+        <translation>文档</translation>
+    </message>
+    <message>
+        <source>Desktop</source>
+        <translation>桌面</translation>
+    </message>
+    <message>
+        <source>Temporary Directory</source>
+        <translation>临时目录</translation>
+    </message>
+    <message>
+        <source>Shared Data</source>
+        <translation>共享数据</translation>
+    </message>
+    <message>
+        <source>Applications</source>
+        <translation>应用程序</translation>
+    </message>
+    <message>
+        <source>Pictures</source>
+        <translation>图片</translation>
+    </message>
+</context>
+<context>
+    <name>QDirModel</name>
+    <message>
+        <source>Kind</source>
+        <translation>种类</translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation>名称</translation>
+    </message>
+    <message>
+        <source>Size</source>
+        <translation>大小</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation>类型</translation>
+    </message>
+    <message>
+        <source>Date Modified</source>
+        <translation>修改日期</translation>
+    </message>
+</context>
+<context>
+    <name>QFileSystemModel</name>
+    <message>
+        <source>Kind</source>
+        <translation>种类</translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation>名称</translation>
+    </message>
+    <message>
+        <source>Size</source>
+        <translation>大小</translation>
+    </message>
+    <message>
+        <source>Type</source>
+        <translation>类型</translation>
+    </message>
+    <message>
+        <source>My Computer</source>
+        <translation>我的计算机</translation>
+    </message>
+    <message>
+        <source>Computer</source>
+        <translation>计算机</translation>
+    </message>
+    <message>
+        <source>Invalid filename</source>
+        <translation>无效的文件名</translation>
+    </message>
+    <message>
+        <source>&lt;b&gt;The name &quot;%1&quot; cannot be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuation marks.</source>
+        <translation>&lt;b&gt;名称“%1”不能被使用。&lt;/b&gt;&lt;p&gt;请使用另外一个包含更少字符或者不含有标点符号的名称。</translation>
+    </message>
+    <message>
+        <source>Date Modified</source>
+        <translation>修改日期</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoGroup</name>
+    <message>
+        <source>Redo</source>
+        <translation>恢复</translation>
+    </message>
+    <message>
+        <source>Undo</source>
+        <translation>撤销</translation>
+    </message>
+    <message>
+        <source>Redo %1</source>
+        <translation>恢复 %1</translation>
+    </message>
+    <message>
+        <source>Undo %1</source>
+        <translation>撤消 %1</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoStack</name>
+    <message>
+        <source>Redo</source>
+        <translation>恢复</translation>
+    </message>
+    <message>
+        <source>Undo</source>
+        <translation>撤销</translation>
+    </message>
+    <message>
+        <source>Redo %1</source>
+        <translation>恢复 %1</translation>
+    </message>
+    <message>
+        <source>Undo %1</source>
+        <translation>撤消 %1</translation>
+    </message>
+</context>
+<context>
+    <name>QComboBox</name>
+    <message>
+        <source>True</source>
+        <translation>真</translation>
+    </message>
+    <message>
+        <source>False</source>
+        <translation>假</translation>
+    </message>
+    <message>
+        <source>Open the combo box selection popup</source>
+        <translation>打开组合框选择弹出窗口</translation>
+    </message>
+</context>
+<context>
+    <name>QSslSocket</name>
+    <message>
+        <source>Error creating SSL session: %1</source>
+        <translation>创建 SSL 会话时出错:%1</translation>
+    </message>
+    <message>
+        <source>Error creating SSL session, %1</source>
+        <translation>创建 SSL 会话时出错,%1</translation>
+    </message>
+    <message>
+        <source>Error when setting the elliptic curves (%1)</source>
+        <translation>设置椭圆曲线时出错(%1)</translation>
+    </message>
+    <message>
+        <source>The certificate&apos;s notAfter field contains an invalid time</source>
+        <translation>证书的 notAfter 字段包含无效时间</translation>
+    </message>
+    <message>
+        <source>Expecting QByteArray for %1</source>
+        <translation>%1 应为 Qbytearray</translation>
+    </message>
+    <message>
+        <source>Unrecognized command %1 = %2</source>
+        <translation>无法识别的命令 %1 = %2</translation>
+    </message>
+    <message>
+        <source>OpenSSL version with disabled elliptic curves</source>
+        <translation>带禁用椭圆曲线的 OpenSSL 版本</translation>
+    </message>
+    <message>
+        <source>No error</source>
+        <translation>无错误</translation>
+    </message>
+    <message>
+        <source>Error when setting the OpenSSL configuration (%1)</source>
+        <translation>设置 OpenSSL 配置时出错(%1)</translation>
+    </message>
+    <message>
+        <source>SSL_CONF_finish() failed</source>
+        <translation>SSL_CONF_finish() 失败</translation>
+    </message>
+    <message>
+        <source>Cannot provide a certificate with no key, %1</source>
+        <translation>不能提供没有密钥的证书,%1</translation>
+    </message>
+    <message>
+        <source>Unable to write data: %1</source>
+        <translation>不能写入数据:%1</translation>
+    </message>
+    <message>
+        <source>The basicConstraints path length parameter has been exceeded</source>
+        <translation>已超过基本约束路径长度参数</translation>
+    </message>
+    <message>
+        <source>The certificate has expired</source>
+        <translation>证书已过期</translation>
+    </message>
+    <message>
+        <source>The TLS/SSL connection has been closed</source>
+        <translation>TLS/SSL 连接已关闭</translation>
+    </message>
+    <message>
+        <source>Error during SSL handshake: %1</source>
+        <translation>SSL 握手过程中出错:%1</translation>
+    </message>
+    <message>
+        <source>Error loading local certificate, %1</source>
+        <translation>不能载入本地证书,%1</translation>
+    </message>
+    <message>
+        <source>The certificate is self-signed, and untrusted</source>
+        <translation>证书是自签名的,不受信任</translation>
+    </message>
+    <message>
+        <source>Unable to init SSL Context: %1</source>
+        <translation>无法初始化 SSL 上下文:%1</translation>
+    </message>
+    <message>
+        <source>The peer did not present any certificate</source>
+        <translation>对等方没有提供任何证书</translation>
+    </message>
+    <message>
+        <source>unsupported protocol</source>
+        <translation>不支持的协议</translation>
+    </message>
+    <message>
+        <source>The root CA certificate is marked to reject the specified purpose</source>
+        <translation>根 CA 证书被标记为拒绝指定用途</translation>
+    </message>
+    <message>
+        <source>Invalid or empty cipher list (%1)</source>
+        <translation>无效或者空白的密码列表(%1)</translation>
+    </message>
+    <message>
+        <source>No certificates could be verified</source>
+        <translation>无法验证任何证书</translation>
+    </message>
+    <message>
+        <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
+        <translation>当前候选发行人证书被拒绝,因为其发行人姓名和序列号存在且与当前证书的授权密钥标识符不匹配</translation>
+    </message>
+    <message>
+        <source>The root CA certificate is not trusted for this purpose</source>
+        <translation>为此目的,根 CA 证书不可信</translation>
+    </message>
+    <message>
+        <source>Wrong value for %1 (%2)</source>
+        <translation>错误的值 %1(%2)</translation>
+    </message>
+    <message>
+        <source>SSL_CONF_CTX_new() failed</source>
+        <translation>SSL_CONF_CTX_new() 失败</translation>
+    </message>
+    <message>
+        <source>Error while setting the minimal protocol version</source>
+        <translation>设置最小协议版本时出错</translation>
+    </message>
+    <message>
+        <source>The host name did not match any of the valid hosts for this certificate</source>
+        <translation>主机名与此证书的任何有效主机不匹配</translation>
+    </message>
+    <message>
+        <source>DTLS server requires a &apos;VerifyNone&apos; mode with your version of OpenSSL</source>
+        <translation>DTLS 服务器需要与您的 OpenSSL 版本一起使用“VerifyNone”模式</translation>
+    </message>
+    <message>
+        <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+        <translation>证书链的根证书是自签名的,不可信</translation>
+    </message>
+    <message>
+        <source>The peer certificate is blacklisted</source>
+        <translation>对等方证书被列入黑名单</translation>
+    </message>
+    <message>
+        <source>The certificate signature could not be decrypted</source>
+        <translation>证书签名无法解密</translation>
+    </message>
+    <message>
+        <source>The supplied certificate is unsuitable for this purpose</source>
+        <translation>提供的证书不适用于此目的</translation>
+    </message>
+    <message>
+        <source>Private key does not certify public key, %1</source>
+        <translation>私钥不验证公钥,%1</translation>
+    </message>
+    <message>
+        <source>Error creating SSL context (%1)</source>
+        <translation>创建 SSL 上下文错误(%1)</translation>
+    </message>
+    <message>
+        <source>Error while setting the maximum protocol version</source>
+        <translation>设置最大协议版本时出错</translation>
+    </message>
+    <message>
+        <source>OpenSSL version too old, need at least v1.0.2</source>
+        <translation>OpenSSL 版本太旧了,至少需要 v1.0.2</translation>
+    </message>
+    <message>
+        <source>The issuer certificate could not be found</source>
+        <translation>无法找到颁发者证书</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+        <translation>当前候选颁发者证书被拒绝,因为其主题名称与当前证书的颁发者名称不匹配</translation>
+    </message>
+    <message>
+        <source>Error while reading: %1</source>
+        <translation>读取时出错:%1</translation>
+    </message>
+    <message>
+        <source>The certificate&apos;s notBefore field contains an invalid time</source>
+        <translation>证书的 notBefore 字段包含无效时间</translation>
+    </message>
+    <message>
+        <source>Error loading private key, %1</source>
+        <translation>不能载入私钥,%1</translation>
+    </message>
+    <message>
+        <source>Diffie-Hellman parameters are not valid</source>
+        <translation>Diffie-Hellman 参数无效</translation>
+    </message>
+    <message>
+        <source>The certificate is not yet valid</source>
+        <translation>证书尚未生效</translation>
+    </message>
+    <message>
+        <source>An error occurred attempting to set %1 to %2</source>
+        <translation>试图将 %1 设置为 %2 时出错</translation>
+    </message>
+    <message>
+        <source>The public key in the certificate could not be read</source>
+        <translation>无法读取证书中的公钥</translation>
+    </message>
+    <message>
+        <source>One of the CA certificates is invalid</source>
+        <translation>其中一个 CA 证书无效</translation>
+    </message>
+    <message>
+        <source>The signature of the certificate is invalid</source>
+        <translation>证书的签名无效</translation>
+    </message>
+    <message>
+        <source>The issuer certificate of a locally looked up certificate could not be found</source>
+        <translation>无法找到本地查找证书的颁发者证书</translation>
+    </message>
+    <message>
+        <source>Unable to decrypt data: %1</source>
+        <translation>无法解密数据:%1</translation>
+    </message>
+    <message>
+        <source>TLS initialization failed</source>
+        <translation>TLS 初始化失败</translation>
+    </message>
+</context>
+<context>
+    <name>QLocalSocket</name>
+    <message>
+        <source>%1: Connection error</source>
+        <translation>%1:连接错误</translation>
+    </message>
+    <message>
+        <source>%1: Access denied</source>
+        <translation>%1:访问被拒绝</translation>
+    </message>
+    <message>
+        <source>%1: Operation not permitted when socket is in this state</source>
+        <translation>%1:当套接字处于这种状态时不允许操作</translation>
+    </message>
+    <message>
+        <source>%1: Connection refused</source>
+        <translation>%1:连接被拒绝</translation>
+    </message>
+    <message>
+        <source>%1: Unknown error %2</source>
+        <translation>%1:未知错误 %2</translation>
+    </message>
+    <message>
+        <source>%1: Socket access error</source>
+        <translation>%1:套接字访问错误</translation>
+    </message>
+    <message>
+        <source>%1: Socket resource error</source>
+        <translation>%1:套接字资源错误</translation>
+    </message>
+    <message>
+        <source>Trying to connect while connection is in progress</source>
+        <translation>在连接正在进行时尝试连接</translation>
+    </message>
+    <message>
+        <source>%1: The socket operation is not supported</source>
+        <translation>%1:套接字操作不被支持</translation>
+    </message>
+    <message>
+        <source>%1: Invalid name</source>
+        <translation>%1:无效名称</translation>
+    </message>
+    <message>
+        <source>%1: Unknown error</source>
+        <translation>%1:未知错误</translation>
+    </message>
+    <message>
+        <source>%1: Socket operation timed out</source>
+        <translation>%1:套接字操作超时</translation>
+    </message>
+    <message>
+        <source>%1: Datagram too large</source>
+        <translation>%1:数据报太大</translation>
+    </message>
+    <message>
+        <source>%1: Remote closed</source>
+        <translation>%1:远程已关闭</translation>
+    </message>
+</context>
+<context>
+    <name>QRegularExpression</name>
+    <message>
+        <source>digit expected after (?+</source>
+        <translation>预期的数字 在 (?+ 之后</translation>
+    </message>
+    <message>
+        <source>using \C is disabled by the application</source>
+        <translation>应用程序禁止使用 \C</translation>
+    </message>
+    <message>
+        <source>UTF-16 error: isolated low surrogate</source>
+        <translation>UTF-16 错误:孤立的低代理</translation>
+    </message>
+    <message>
+        <source>(?R or (?[+-]digits must be followed by )</source>
+        <translation>(?R 或 (?[+-]数字 必须后跟 )</translation>
+    </message>
+    <message>
+        <source>patterns do not all use the same character tables</source>
+        <translation>模式并不都使用相同的字符表</translation>
+    </message>
+    <message>
+        <source>syntax error in subpattern name (missing terminator)</source>
+        <translation>子模式名称中的语法错误(缺少终止符)</translation>
+    </message>
+    <message>
+        <source>JIT stack limit reached</source>
+        <translation>已达到 JIT 堆栈限制</translation>
+    </message>
+    <message>
+        <source>missing terminating ] for character class</source>
+        <translation>字符类缺少终止 ]</translation>
+    </message>
+    <message>
+        <source>bad offset value</source>
+        <translation>错误的偏移值</translation>
+    </message>
+    <message>
+        <source>\k is not followed by a braced, angle-bracketed, or quoted name</source>
+        <translation>\k 后面没有括号,角括号或引用的名称</translation>
+    </message>
+    <message>
+        <source>internal error: unexpected repeat</source>
+        <translation>内部错误:异常的重复</translation>
+    </message>
+    <message>
+        <source>no error</source>
+        <translation>无错误</translation>
+    </message>
+    <message>
+        <source>pattern contains an item that is not supported for DFA matching</source>
+        <translation>模式包含 DFA 匹配不支持的项</translation>
+    </message>
+    <message>
+        <source>no match</source>
+        <translation>不匹配</translation>
+    </message>
+    <message>
+        <source>POSIX named classes are supported only within a class</source>
+        <translation>POSIX 命名类仅在类中受支持</translation>
+    </message>
+    <message>
+        <source>number after (?C is greater than 255</source>
+        <translation>(?C 之后的数字大于 255</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: overlong 6-byte sequence</source>
+        <translation>UTF-8 错误:超长 6 字节序列</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: overlong 4-byte sequence</source>
+        <translation>UTF-8 错误:超长 4 字节序列</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: overlong 3-byte sequence</source>
+        <translation>UTF-8 错误:超长 3 字节序列</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: overlong 2-byte sequence</source>
+        <translation>UTF-8 错误:超长 2 字节序列</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: overlong 5-byte sequence</source>
+        <translation>UTF-8 错误:超长 5 字节序列</translation>
+    </message>
+    <message>
+        <source>UTF-32 error: code points 0xd800-0xdfff are not defined</source>
+        <translation>UTF-32 错误:未定义代码点 0xd800-0xdfff</translation>
+    </message>
+    <message>
+        <source>bad JIT option</source>
+        <translation>错误的 JIT 选项</translation>
+    </message>
+    <message>
+        <source>bad offset into UTF string</source>
+        <translation>到 UTF 字符串的错误偏移量</translation>
+    </message>
+    <message>
+        <source>parentheses are too deeply nested (stack check)</source>
+        <translation>括号嵌套太深(堆栈检查)</translation>
+    </message>
+    <message>
+        <source>character code point value in \u.... sequence is too large</source>
+        <translation>\u.... 序列中的字符代码点值太大</translation>
+    </message>
+    <message>
+        <source>\g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number</source>
+        <translation>\g 后面没有括号,角括号或引用的 名称/数字 或普通数字</translation>
+    </message>
+    <message>
+        <source>invalid escape sequence in character class</source>
+        <translation>字符类中的转义序列无效</translation>
+    </message>
+    <message>
+        <source>syntax error in (?(VERSION condition</source>
+        <translation>(?(VERSION 条件 中的语法错误</translation>
+    </message>
+    <message>
+        <source>missing opening brace after \o</source>
+        <translation>\o 后面缺少左大括号</translation>
+    </message>
+    <message>
+        <source>range out of order in character class</source>
+        <translation>字符类中的不正常范围</translation>
+    </message>
+    <message>
+        <source>(*MARK) must have an argument</source>
+        <translation>(*MARK) 必须有一个参数</translation>
+    </message>
+    <message>
+        <source>quantifier does not follow a repeatable item</source>
+        <translation>量词不在可重复项之后</translation>
+    </message>
+    <message>
+        <source>a numbered reference must not be zero</source>
+        <translation>编号的引用不能为零</translation>
+    </message>
+    <message>
+        <source>\c must be followed by a printable ASCII character</source>
+        <translation>\c 必须后跟可打印的 ASCII 字符</translation>
+    </message>
+    <message>
+        <source>reference to non-existent subpattern</source>
+        <translation>引用不存在的子模式</translation>
+    </message>
+    <message>
+        <source>NULL argument passed</source>
+        <translation>传递了 NULL 参数</translation>
+    </message>
+    <message>
+        <source>backreference condition or recursion test is not supported for DFA matching</source>
+        <translation>DFA 匹配不支持反向引用条件或递归测试</translation>
+    </message>
+    <message>
+        <source>missing terminating delimiter for callout with string argument</source>
+        <translation>带字符串参数的调用缺少终止分隔符</translation>
+    </message>
+    <message>
+        <source>failed to allocate heap memory</source>
+        <translation>分配堆内存失败</translation>
+    </message>
+    <message>
+        <source>PCRE does not support \L, \l, \N{name}, \U, or \u</source>
+        <translation>PCRE 不支持 \L,\l,\N{name},\U或 \u</translation>
+    </message>
+    <message>
+        <source>bad data value</source>
+        <translation>错误的数据值</translation>
+    </message>
+    <message>
+        <source>internal error: overran compiling workspace</source>
+        <translation>内部错误:超过编译工作区</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: code points greater than 0x10ffff are not defined</source>
+        <translation>UTF-8 错误:未定义大于 0x10FFFF 的代码点</translation>
+    </message>
+    <message>
+        <source>using UTF is disabled by the application</source>
+        <translation>应用程序禁止使用 UTF</translation>
+    </message>
+    <message>
+        <source>using UCP is disabled by the application</source>
+        <translation>应用程序禁止使用 UCP</translation>
+    </message>
+    <message>
+        <source>unrecognized character follows \</source>
+        <translation>\ 后跟随未识别的字符</translation>
+    </message>
+    <message>
+        <source>regular expression is too complicated</source>
+        <translation>正则表达式太复杂</translation>
+    </message>
+    <message>
+        <source>invalid escape sequence in (*VERB) name</source>
+        <translation>(*VERB) 名称中的无效转义序列</translation>
+    </message>
+    <message>
+        <source>\N is not supported in a class</source>
+        <translation>类中不支持 \N</translation>
+    </message>
+    <message>
+        <source>non-hex character in \x{} (closing brace missing?)</source>
+        <translation>\x{} 中非十六进制字符(右大括号丢失?)</translation>
+    </message>
+    <message>
+        <source>\c must be followed by a letter or one of [\]^_?</source>
+        <translation>\c 后面必须跟一个字母或 [\]^_? 之一</translation>
+    </message>
+    <message>
+        <source>internal error: unknown newline setting</source>
+        <translation>内部错误:未知换行设置</translation>
+    </message>
+    <message>
+        <source>offset limit set without PCRE2_USE_OFFSET_LIMIT</source>
+        <translation>设置偏移量限制,但无 PCRE2_USE_OFFSET_LIMIT</translation>
+    </message>
+    <message>
+        <source>too many named subpatterns (maximum 256)</source>
+        <translation>命名子模式太多(最多256个)</translation>
+    </message>
+    <message>
+        <source>using \C is disabled in this PCRE2 library</source>
+        <translation>在此 PCRE2 库中禁止使用 \C</translation>
+    </message>
+    <message>
+        <source>invalid condition (?(0)</source>
+        <translation>无效条件 (?(0)</translation>
+    </message>
+    <message>
+        <source>regular expression is too large</source>
+        <translation>正则表达式太大</translation>
+    </message>
+    <message>
+        <source>match limit exceeded</source>
+        <translation>超过匹配限制</translation>
+    </message>
+    <message>
+        <source>unknown property name after \P or \p</source>
+        <translation>\P 或 \p 之后的未知属性名称</translation>
+    </message>
+    <message>
+        <source>internal error: code overflow</source>
+        <translation>内部错误:代码溢出</translation>
+    </message>
+    <message>
+        <source>bad escape sequence in replacement string</source>
+        <translation>替换字符串中的转义序列错误</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: byte 5 top bits not 0x80</source>
+        <translation>UTF-8 错误:字节 5 的高位不是 0x80</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 1 byte missing at end</source>
+        <translation>UTF-8 错误:末尾缺少 1 个字节</translation>
+    </message>
+    <message>
+        <source>character code point value in \x{} or \o{} is too large</source>
+        <translation>\x{} 或 \o{} 中的字符代码点值太大</translation>
+    </message>
+    <message>
+        <source>function is not supported for DFA matching</source>
+        <translation>DFA 匹配不支持该功能</translation>
+    </message>
+    <message>
+        <source>group name must start with a non-digit</source>
+        <translation>组名必须以非数字开头</translation>
+    </message>
+    <message>
+        <source>SPARE ERROR</source>
+        <translation>备用错误</translation>
+    </message>
+    <message>
+        <source>bad option value</source>
+        <translation>错误的选项值</translation>
+    </message>
+    <message>
+        <source>too much recursion for DFA matching</source>
+        <translation>DFA 匹配的递归太多</translation>
+    </message>
+    <message>
+        <source>number is too big</source>
+        <translation>数字太大</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: byte 6 top bits not 0x80</source>
+        <translation>UTF-8 错误:字节 6 的高位不是 0x80</translation>
+    </message>
+    <message>
+        <source>\c at end of pattern</source>
+        <translation>\c 在模式的末尾</translation>
+    </message>
+    <message>
+        <source>lookbehind assertion is too long</source>
+        <translation>“后发断言”太长</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: isolated byte with 0x80 bit set</source>
+        <translation>UTF-8 错误:设置为 0x80 位的隔离字节</translation>
+    </message>
+    <message>
+        <source>UTF-32 error: code points greater than 0x10ffff are not defined</source>
+        <translation>UTF-32 错误:未定义大于 0x10ffff 的代码点</translation>
+    </message>
+    <message>
+        <source>subpattern name expected</source>
+        <translation>子模式名称是预期的</translation>
+    </message>
+    <message>
+        <source>closing parenthesis for (?C expected</source>
+        <translation>(?C 需要右括号</translation>
+    </message>
+    <message>
+        <source>UTF-16 error: invalid low surrogate</source>
+        <translation>UTF-16 错误:低代理无效</translation>
+    </message>
+    <message>
+        <source>unmatched closing parenthesis</source>
+        <translation>右括号不匹配</translation>
+    </message>
+    <message>
+        <source>missing closing parenthesis</source>
+        <translation>缺少右括号</translation>
+    </message>
+    <message>
+        <source>no more memory</source>
+        <translation>没有更多的内存</translation>
+    </message>
+    <message>
+        <source>invalid range in character class</source>
+        <translation>字符类中的范围无效</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: byte 3 top bits not 0x80</source>
+        <translation>UTF-8 错误:字节 3 的高位不是 0x80</translation>
+    </message>
+    <message>
+        <source>internal error: previously-checked referenced subpattern not found</source>
+        <translation>内部错误:找不到先前检查过的引用子模式</translation>
+    </message>
+    <message>
+        <source>partial match</source>
+        <translation>部分匹配</translation>
+    </message>
+    <message>
+        <source>name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)</source>
+        <translation>名称在 (*MARK),(*PRUNE),(*SKIP) 或 (*THEN) 中太长</translation>
+    </message>
+    <message>
+        <source>internal error - pattern overwritten?</source>
+        <translation>内部错误 - 模式被覆盖?</translation>
+    </message>
+    <message>
+        <source>(?| and/or (?J: or (?x: parentheses are too deeply nested</source>
+        <translation>(?| 和/或 (?J: 或 (?x: 括号嵌套太深</translation>
+    </message>
+    <message>
+        <source>octal value is greater than \377 in 8-bit non-UTF-8 mode</source>
+        <translation>在 8 位非 UTF-8 模式下,八进制值大于 \377</translation>
+    </message>
+    <message>
+        <source>this version of PCRE2 does not have Unicode support</source>
+        <translation>此版本的 PCRE2 不支持 Unicode</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 4 bytes missing at end</source>
+        <translation>UTF-8 错误:末尾缺少 4 个字节</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 3 bytes missing at end</source>
+        <translation>UTF-8 错误:末尾缺少 3 个字节</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 5 bytes missing at end</source>
+        <translation>UTF-8 错误:末尾缺少 5 个字节</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 2 bytes missing at end</source>
+        <translation>UTF-8 错误:末尾缺少 2 个字节</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: byte 4 top bits not 0x80</source>
+        <translation>UTF-8 错误:字节 4 的高位不是 0x80</translation>
+    </message>
+    <message>
+        <source>an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)</source>
+        <translation>(*ACCEPT),(*FAIL) 或 (*COMMIT) 不允许参数</translation>
+    </message>
+    <message>
+        <source>subpattern name is too long (maximum 10000 characters)</source>
+        <translation>子模式名称太长(最多10000个字符)</translation>
+    </message>
+    <message>
+        <source>expected closing curly bracket in replacement string</source>
+        <translation>替换字符串中应有右大括号</translation>
+    </message>
+    <message>
+        <source>requested value is not set</source>
+        <translation>请求的值未设置</translation>
+    </message>
+    <message>
+        <source>bad substitution in replacement string</source>
+        <translation>替换字符串中的替换错误</translation>
+    </message>
+    <message>
+        <source>pattern passed as NULL</source>
+        <translation>模式作为 NULL 传递</translation>
+    </message>
+    <message>
+        <source>unrecognised compile-time option bit(s)</source>
+        <translation>无法识别的编译时选项位</translation>
+    </message>
+    <message>
+        <source>assertion expected after (?( or (?(?C)</source>
+        <translation>(?( 或 (?(?C) 之后应为断言</translation>
+    </message>
+    <message>
+        <source>letter or underscore expected after (?&lt; or (?&apos;</source>
+        <translation>(?&lt; 或 (?&apos; 之后应为字母或下划线</translation>
+    </message>
+    <message>
+        <source>malformed number or name after (?(</source>
+        <translation>(?( 之后格式错误的数字或名称</translation>
+    </message>
+    <message>
+        <source>number too big in {} quantifier</source>
+        <translation>{} 量词中的数字太大了</translation>
+    </message>
+    <message>
+        <source>nested recursion at the same subject position</source>
+        <translation>在同一主题位置嵌套递归</translation>
+    </message>
+    <message>
+        <source>non-unique substring name</source>
+        <translation>非唯一的子字符串名称</translation>
+    </message>
+    <message>
+        <source>too many replacements (more than INT_MAX)</source>
+        <translation>替换太多(超过 INT_MAX)</translation>
+    </message>
+    <message>
+        <source>UTF-16 error: missing low surrogate at end</source>
+        <translation>UTF-16 错误:末尾缺少低代理</translation>
+    </message>
+    <message>
+        <source>unrecognized character after (?P</source>
+        <translation>(?P 之后无法识别的字符</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: byte 2 top bits not 0x80</source>
+        <translation>UTF-8 错误:字节 2 的高位不是 0x80</translation>
+    </message>
+    <message>
+        <source>parentheses are too deeply nested</source>
+        <translation>括号嵌套太深</translation>
+    </message>
+    <message>
+        <source>match with end before start is not supported</source>
+        <translation>不支持在开始前与结束匹配</translation>
+    </message>
+    <message>
+        <source>\C is not allowed in a lookbehind assertion</source>
+        <translation>\C 不允许在“后发断言”中使用</translation>
+    </message>
+    <message>
+        <source>invalid replacement string</source>
+        <translation>无效的替换字符串</translation>
+    </message>
+    <message>
+        <source>pattern compiled in wrong mode: 8/16/32-bit error</source>
+        <translation>模式编译错误:8/16/32 位错误</translation>
+    </message>
+    <message>
+        <source>(*VERB) not recognized or malformed</source>
+        <translation>(*VERB) 未识别或格式不当</translation>
+    </message>
+    <message>
+        <source>non-octal character in \o{} (closing brace missing?)</source>
+        <translation>\o{} 中非八进制字符(右大括号丢失?)</translation>
+    </message>
+    <message>
+        <source>disallowed Unicode code point (&gt;= 0xd800 &amp;&amp; &lt;= 0xdfff)</source>
+        <translation>不允许使用 Unicode 代码点 (&gt;= 0xd800 &amp;&amp; &lt;= 0xdfff)</translation>
+    </message>
+    <message>
+        <source>recursion limit exceeded</source>
+        <translation>超过递归限制</translation>
+    </message>
+    <message>
+        <source>malformed \P or \p sequence</source>
+        <translation>格式错误的 \P 或 \p 序列</translation>
+    </message>
+    <message>
+        <source>internal error: unknown opcode in auto_possessify()</source>
+        <translation>内部错误:auto_possessify() 中的未知操作码</translation>
+    </message>
+    <message>
+        <source>\ at end of pattern</source>
+        <translation>\ 在模式的末尾</translation>
+    </message>
+    <message>
+        <source>unrecognized string delimiter follows (?C</source>
+        <translation>(?C 之后是无法识别的字符串分隔符</translation>
+    </message>
+    <message>
+        <source>callout error code</source>
+        <translation>调用错误代码</translation>
+    </message>
+    <message>
+        <source>POSIX collating elements are not supported</source>
+        <translation>不支持 POSIX 排序元素</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 6-byte character is not allowed (RFC 3629)</source>
+        <translation>UTF-8 错误:不允许使用 6 字节字符(RFC 3629)</translation>
+    </message>
+    <message>
+        <source>internal error in pcre2_study(): should not occur</source>
+        <translation>pcre2_study() 中的内部错误:不应发生</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: illegal byte (0xfe or 0xff)</source>
+        <translation>UTF-8 错误:非法字节(0xfe 或 0xff)</translation>
+    </message>
+    <message>
+        <source>invalid data in workspace for DFA restart</source>
+        <translation>工作区中用于重新启动 DFA 的数据无效</translation>
+    </message>
+    <message>
+        <source>missing ) after (?# comment</source>
+        <translation>(?# 注释 之后缺少 )</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: 5-byte character is not allowed (RFC 3629)</source>
+        <translation>UTF-8 错误:不允许使用 5 字节字符(RFC 3629)</translation>
+    </message>
+    <message>
+        <source>workspace size exceeded in DFA matching</source>
+        <translation>DFA 匹配中超出工作区大小</translation>
+    </message>
+    <message>
+        <source>unrecognized character after (? or (?-</source>
+        <translation>(? 或 (?- 之后未识别的字符</translation>
+    </message>
+    <message>
+        <source>requested value is not available</source>
+        <translation>请求的值不可用</translation>
+    </message>
+    <message>
+        <source>numbers out of order in {} quantifier</source>
+        <translation>{} 量词中的数字不正常</translation>
+    </message>
+    <message>
+        <source>pattern string is longer than the limit set by the application</source>
+        <translation>模式字符串长于应用程序设置的限制</translation>
+    </message>
+    <message>
+        <source>DEFINE group contains more than one branch</source>
+        <translation>&quot;定义&quot; 组包含多个分支</translation>
+    </message>
+    <message>
+        <source>two named subpatterns have the same name (PCRE2_DUPNAMES not set)</source>
+        <translation>两个命名的子模式具有相同的名称(未设置 PCRE2_DUPNAMES)</translation>
+    </message>
+    <message>
+        <source>this version of PCRE2 does not have support for \P, \p, or \X</source>
+        <translation>此版本的 PCRE2 不支持 \P,\p 或 \X</translation>
+    </message>
+    <message>
+        <source>unknown substring</source>
+        <translation>未知子字符串</translation>
+    </message>
+    <message>
+        <source>unknown POSIX class name</source>
+        <translation>未知的 POSIX 类名</translation>
+    </message>
+    <message>
+        <source>UTF-8 error: code points 0xd800-0xdfff are not defined</source>
+        <translation>UTF-8 错误:未定义代码点 0xD800-0xDFFF</translation>
+    </message>
+    <message>
+        <source>conditional group contains more than two branches</source>
+        <translation>条件组包含两个以上的分支</translation>
+    </message>
+    <message>
+        <source>lookbehind assertion is not fixed length</source>
+        <translation>“后发断言”不是固定的长度</translation>
+    </message>
+    <message>
+        <source>digits missing in \x{} or \o{}</source>
+        <translation>\x{} 或 \o{} 中缺少数值</translation>
+    </message>
+    <message>
+        <source>magic number missing</source>
+        <translation>魔数缺失</translation>
+    </message>
+    <message>
+        <source>internal error: unknown opcode in find_fixedlength()</source>
+        <translation>内部错误:find_fixedlength() 中的未知操作码</translation>
+    </message>
+    <message>
+        <source>different names for subpatterns of the same number are not allowed</source>
+        <translation>不允许同一编号的子模式有不同的名称</translation>
+    </message>
+</context>
+<context>
+    <name>QOCIResult</name>
+    <message>
+        <source>Unable to get statement type</source>
+        <translation>无法获取语句类型</translation>
+    </message>
+    <message>
+        <source>Unable to alloc statement</source>
+        <translation>不能分配语句</translation>
+    </message>
+    <message>
+        <source>Unable to goto next</source>
+        <translation>不能进入下一个</translation>
+    </message>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to bind column for batch execute</source>
+        <translation>不能绑定批处理执行的列</translation>
+    </message>
+    <message>
+        <source>Unable to prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Unable to execute batch statement</source>
+        <translation>不能执行批处理语句</translation>
+    </message>
+    <message>
+        <source>Unable to bind value</source>
+        <translation>不能绑定值</translation>
+    </message>
+</context>
+<context>
+    <name>QDtls</name>
+    <message>
+        <source>The DTLS connection has been closed</source>
+        <translation>DTLS 连接已关闭</translation>
+    </message>
+    <message>
+        <source>To start a handshake you must set peer&apos;s address and port first</source>
+        <translation>要开始握手,必须先设置对等机的地址和端口</translation>
+    </message>
+    <message>
+        <source>Cannot write a datagram, not in encrypted state</source>
+        <translation>无法写入数据报,未处于加密状态</translation>
+    </message>
+    <message>
+        <source>Invalid protocol version, DTLS protocol expected</source>
+        <translation>协议版本无效,应为 DTLS 协议</translation>
+    </message>
+    <message>
+        <source>Cannot start handshake, already done/in progress</source>
+        <translation>无法启动握手,已经完成/正在进行中</translation>
+    </message>
+    <message>
+        <source>Cannot start/continue handshake, invalid handshake state</source>
+        <translation>无法 启动/继续 握手,握手状态无效</translation>
+    </message>
+    <message>
+        <source>Invalid (empty) secret</source>
+        <translation>无效(空)的加密</translation>
+    </message>
+    <message>
+        <source>Cannot send shutdown alert, not encrypted</source>
+        <translation>无法发送关机警报,未加密</translation>
+    </message>
+    <message>
+        <source>No handshake in progress, nothing to abort</source>
+        <translation>没有握手正在进行中,没有什么可以中止的</translation>
+    </message>
+    <message>
+        <source>To start a handshake, DTLS server requires non-empty datagram (client hello)</source>
+        <translation>要开始握手,DTLS 服务器需要非空数据报(客户端 hello)</translation>
+    </message>
+    <message>
+        <source>BIO_ADD_new failed, cannot start handshake</source>
+        <translation>BIO_ADD_new 失败,无法启动握手</translation>
+    </message>
+    <message>
+        <source>%1 failed</source>
+        <translation>%1 失败</translation>
+    </message>
+    <message>
+        <source>Peer verification failed</source>
+        <translation>对等验证失败</translation>
+    </message>
+    <message>
+        <source>Cannot set configuration after handshake started</source>
+        <translation>握手开始后无法设置配置</translation>
+    </message>
+    <message>
+        <source>The DTLS connection has been shutdown</source>
+        <translation>DTLS 连接已断开</translation>
+    </message>
+    <message>
+        <source>Multicast and broadcast addresses are not supported</source>
+        <translation>不支持多播和广播地址</translation>
+    </message>
+    <message>
+        <source>Cannot continue handshake, not in InProgress state</source>
+        <translation>无法继续握手,未处于 InProgress 状态</translation>
+    </message>
+    <message>
+        <source>Cannot set peer after handshake started</source>
+        <translation>握手开始后无法设置对等机</translation>
+    </message>
+    <message>
+        <source>Invalid address</source>
+        <translation>无效地址</translation>
+    </message>
+    <message>
+        <source>Cannot set verification name after handshake started</source>
+        <translation>握手开始后无法设置验证名称</translation>
+    </message>
+    <message>
+        <source>A valid QUdpSocket and non-empty datagram are needed to continue the handshake</source>
+        <translation>需要有效的 QUdpSocket 和非空数据报来继续握手</translation>
+    </message>
+    <message>
+        <source>Error while reading: %1</source>
+        <translation>读取时出错:%1</translation>
+    </message>
+    <message>
+        <source>Error while writing: %1</source>
+        <translation>写入时出错:%1</translation>
+    </message>
+    <message>
+        <source>Invalid SslMode, SslServerMode or SslClientMode expected</source>
+        <translation>无效的 SslMode,应为 SslServerMode 或 SslClientMode</translation>
+    </message>
+    <message>
+        <source>Cannot resume, not in VerificationError state</source>
+        <translation>无法恢复,不在 VerificationError 状态</translation>
+    </message>
+    <message>
+        <source>Invalid (nullptr) socket</source>
+        <translation>无效 (nullptr) 套接字</translation>
+    </message>
+    <message>
+        <source>Cannot read a datagram, not in encrypted state</source>
+        <translation>无法读取数据报,未处于加密状态</translation>
+    </message>
+    <message>
+        <source>Cannot start the handshake, verified client hello expected</source>
+        <translation>无法启动握手,需要验证客户端 hello</translation>
+    </message>
+</context>
+<context>
+    <name>QFontDialog</name>
+    <message>
+        <source>&amp;Font</source>
+        <translation>字体(&amp;F)</translation>
+    </message>
+    <message>
+        <source>&amp;Size</source>
+        <translation>大小(&amp;S)</translation>
+    </message>
+    <message>
+        <source>Sample</source>
+        <translation>示例</translation>
+    </message>
+    <message>
+        <source>Font st&amp;yle</source>
+        <translation>字体风格(&amp;Y)</translation>
+    </message>
+    <message>
+        <source>Wr&amp;iting System</source>
+        <translation>书写系统(&amp;I)</translation>
+    </message>
+    <message>
+        <source>Select Font</source>
+        <translation>选择字体</translation>
+    </message>
+    <message>
+        <source>&amp;Underline</source>
+        <translation>下划线(&amp;U)</translation>
+    </message>
+    <message>
+        <source>Effects</source>
+        <translation>效果</translation>
+    </message>
+    <message>
+        <source>Stri&amp;keout</source>
+        <translation>删除线(&amp;K)</translation>
+    </message>
+</context>
+<context>
+    <name>QColorDialog</name>
+    <message>
+        <source>&amp;Red:</source>
+        <translation>红色(&amp;R):</translation>
+    </message>
+    <message>
+        <source>&amp;Sat:</source>
+        <translation>饱和度(&amp;S):</translation>
+    </message>
+    <message>
+        <source>&amp;Val:</source>
+        <translation>亮度(&amp;V):</translation>
+    </message>
+    <message>
+        <source>Hu&amp;e:</source>
+        <translation>色调(&amp;E):</translation>
+    </message>
+    <message>
+        <source>&amp;HTML:</source>
+        <translation>HTML(&amp;H):</translation>
+    </message>
+    <message>
+        <source>Select Color</source>
+        <translation>选择颜色</translation>
+    </message>
+    <message>
+        <source>&amp;Add to Custom Colors</source>
+        <translation>添加到自定义颜色(&amp;A)</translation>
+    </message>
+    <message>
+        <source>Bl&amp;ue:</source>
+        <translation>蓝色(&amp;B):</translation>
+    </message>
+    <message>
+        <source>&amp;Pick Screen Color</source>
+        <translation>选取屏幕颜色(&amp;P)</translation>
+    </message>
+    <message>
+        <source>Cursor at %1, %2
+Press ESC to cancel</source>
+        <translation>光标在 %1,%2
+按 ESC 取消</translation>
+    </message>
+    <message>
+        <source>&amp;Green:</source>
+        <translation>绿色(&amp;G):</translation>
+    </message>
+    <message>
+        <source>&amp;Basic colors</source>
+        <translation>推荐颜色(&amp;U)</translation>
+    </message>
+    <message>
+        <source>&amp;Custom colors</source>
+        <translation>自定义颜色(&amp;C)</translation>
+    </message>
+    <message>
+        <source>A&amp;lpha channel:</source>
+        <translation>Alpha 通道(&amp;A):</translation>
+    </message>
+</context>
+<context>
+    <name>QSharedMemory</name>
+    <message>
+        <source>%1: system-imposed size restrictions</source>
+        <translation>%1:系统预设大小限制</translation>
+    </message>
+    <message>
+        <source>%1: key is empty</source>
+        <translation>%1:键是空的</translation>
+    </message>
+    <message>
+        <source>%1: key error</source>
+        <translation>%1:键错误</translation>
+    </message>
+    <message>
+        <source>%1: bad name</source>
+        <translation>%1:错误的名称</translation>
+    </message>
+    <message>
+        <source>%1: create size is less then 0</source>
+        <translation>%1:创建的大小小于 0</translation>
+    </message>
+    <message>
+        <source>%1: already exists</source>
+        <translation>%1:已经存在</translation>
+    </message>
+    <message>
+        <source>%1: unknown error %2</source>
+        <translation>%1:未知错误 %2</translation>
+    </message>
+    <message>
+        <source>%1: invalid size</source>
+        <translation>%1:无效大小</translation>
+    </message>
+    <message>
+        <source>%1: unable to make key</source>
+        <translation>%1:不能生成键</translation>
+    </message>
+    <message>
+        <source>%1: unable to set key on lock</source>
+        <translation>%1:无法设置锁定的键</translation>
+    </message>
+    <message>
+        <source>%1: unable to unlock</source>
+        <translation>%1:无法取消锁定</translation>
+    </message>
+    <message>
+        <source>%1: permission denied</source>
+        <translation>%1:权限被拒绝</translation>
+    </message>
+    <message>
+        <source>%1: ftok failed</source>
+        <translation>%1:ftok 失败</translation>
+    </message>
+    <message>
+        <source>%1: out of resources</source>
+        <translation>%1:资源耗尽</translation>
+    </message>
+    <message>
+        <source>%1: not attached</source>
+        <translation>%1:没有附加</translation>
+    </message>
+    <message>
+        <source>%1: UNIX key file doesn&apos;t exist</source>
+        <translation>%1:UNIX 密钥文件不存在</translation>
+    </message>
+    <message>
+        <source>%1: doesn&apos;t exist</source>
+        <translation>%1:不存在</translation>
+    </message>
+    <message>
+        <source>%1: size query failed</source>
+        <translation>%1:大小查询失败</translation>
+    </message>
+    <message>
+        <source>%1: unable to lock</source>
+        <translation>%1:无法锁定</translation>
+    </message>
+</context>
+<context>
+    <name>QProcess</name>
+    <message>
+        <source>Error writing to process</source>
+        <translation>向进程写入时发生错误</translation>
+    </message>
+    <message>
+        <source>Resource error (fork failure): %1</source>
+        <translation>资源错误(fork 失败):%1</translation>
+    </message>
+    <message>
+        <source>Error reading from process</source>
+        <translation>从进程中读取时发生错误</translation>
+    </message>
+    <message>
+        <source>Process failed to start</source>
+        <translation>启动进程失败</translation>
+    </message>
+    <message>
+        <source>Process failed to start: %1</source>
+        <translation>进程启动失败:%1</translation>
+    </message>
+    <message>
+        <source>Could not open input redirection for reading</source>
+        <translation>无法打开用于读取的输入重定向</translation>
+    </message>
+    <message>
+        <source>No program defined</source>
+        <translation>没有定义程序</translation>
+    </message>
+    <message>
+        <source>Could not open output redirection for writing</source>
+        <translation>无法打开用于写入的输出重定向</translation>
+    </message>
+    <message>
+        <source>Process operation timed out</source>
+        <translation>进程处理超时</translation>
+    </message>
+    <message>
+        <source>Process crashed</source>
+        <translation>进程已崩溃</translation>
+    </message>
+</context>
+<context>
+    <name>QNativeSocketEngine</name>
+    <message>
+        <source>The proxy type is invalid for this operation</source>
+        <translation>对于这个操作代理类型是无效的</translation>
+    </message>
+    <message>
+        <source>Network operation timed out</source>
+        <translation>网络操作超时</translation>
+    </message>
+    <message>
+        <source>The remote host closed the connection</source>
+        <translation>远端主机关闭了这个连接</translation>
+    </message>
+    <message>
+        <source>Invalid socket descriptor</source>
+        <translation>无效的套接字描述符</translation>
+    </message>
+    <message>
+        <source>Host unreachable</source>
+        <translation>主机不能访问</translation>
+    </message>
+    <message>
+        <source>Protocol type not supported</source>
+        <translation>协议类型不被支持</translation>
+    </message>
+    <message>
+        <source>Datagram was too large to send</source>
+        <translation>不能发送过大的数据报</translation>
+    </message>
+    <message>
+        <source>Network dropped connection on reset</source>
+        <translation>重置时网络断开连接</translation>
+    </message>
+    <message>
+        <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+        <translation>试图在不支持 IPv6 支持的平台上使用 IPv6 套接字</translation>
+    </message>
+    <message>
+        <source>Unable to receive a message</source>
+        <translation>不能接收一个消息</translation>
+    </message>
+    <message>
+        <source>Permission denied</source>
+        <translation>权限被拒绝</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>连接被拒绝</translation>
+    </message>
+    <message>
+        <source>Unable to write</source>
+        <translation>不能写入</translation>
+    </message>
+    <message>
+        <source>Another socket is already listening on the same port</source>
+        <translation>另一个套接字已经正在监听同一端口</translation>
+    </message>
+    <message>
+        <source>Unable to send a message</source>
+        <translation>不能发送一个消息</translation>
+    </message>
+    <message>
+        <source>The bound address is already in use</source>
+        <translation>要启用的地址已经被使用</translation>
+    </message>
+    <message>
+        <source>Connection timed out</source>
+        <translation>连接超时</translation>
+    </message>
+    <message>
+        <source>Network error</source>
+        <translation>网络错误</translation>
+    </message>
+    <message>
+        <source>Unsupported socket operation</source>
+        <translation>不被支持的套接字操作</translation>
+    </message>
+    <message>
+        <source>Operation on non-socket</source>
+        <translation>对非套接字操作</translation>
+    </message>
+    <message>
+        <source>Unable to initialize broadcast socket</source>
+        <translation>不能初始化广播套接字</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Unable to initialize non-blocking socket</source>
+        <translation>不能初始化非阻塞套接字</translation>
+    </message>
+    <message>
+        <source>The address is protected</source>
+        <translation>这个地址被保护了</translation>
+    </message>
+    <message>
+        <source>Network unreachable</source>
+        <translation>网络不能访问</translation>
+    </message>
+    <message>
+        <source>The address is not available</source>
+        <translation>这个地址不可用</translation>
+    </message>
+    <message>
+        <source>Temporary error</source>
+        <translation>暂时的错误</translation>
+    </message>
+    <message>
+        <source>Out of resources</source>
+        <translation>资源不足</translation>
+    </message>
+    <message>
+        <source>Connection reset by peer</source>
+        <translation>对方将连接复位</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFtpBackend</name>
+    <message>
+        <source>No suitable proxy found</source>
+        <translation>未找到合适的代理</translation>
+    </message>
+    <message>
+        <source>Error while downloading %1: %2</source>
+        <translation>下载 %1 时错误:%2</translation>
+    </message>
+    <message>
+        <source>Error while uploading %1: %2</source>
+        <translation>上载 %1 时错误:%2</translation>
+    </message>
+    <message>
+        <source>Cannot open %1: is a directory</source>
+        <translation>无法读取 %1:是一个目录</translation>
+    </message>
+    <message>
+        <source>Logging in to %1 failed: authentication required</source>
+        <translation>登入 %1 失败:需要验证</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReplyHttpImpl</name>
+    <message>
+        <source>No suitable proxy found</source>
+        <translation>未找到合适的代理</translation>
+    </message>
+    <message>
+        <source>Operation canceled</source>
+        <translation>操作被取消</translation>
+    </message>
+</context>
+<context>
+    <name>QDockWidget</name>
+    <message>
+        <source>Close</source>
+        <translation>关闭</translation>
+    </message>
+    <message>
+        <source>Float</source>
+        <translation>浮动</translation>
+    </message>
+    <message>
+        <source>Undocks and re-attaches the dock widget</source>
+        <translation>取消并重新附加停靠小部件</translation>
+    </message>
+    <message>
+        <source>Closes the dock widget</source>
+        <translation>关闭停靠小部件</translation>
+    </message>
+</context>
+<context>
+    <name>QAccessibleActionInterface</name>
+    <message>
+        <source>Press</source>
+        <translation>按下</translation>
+    </message>
+    <message>
+        <source>Shows the menu</source>
+        <translation>显示菜单</translation>
+    </message>
+    <message>
+        <source>Scrolls to the left</source>
+        <translation>滚动到左边</translation>
+    </message>
+    <message>
+        <source>Scroll Down</source>
+        <translation>向下滚动</translation>
+    </message>
+    <message>
+        <source>Scroll Left</source>
+        <translation>向左滚动</translation>
+    </message>
+    <message>
+        <source>Goes back a page</source>
+        <translation>转到上一页</translation>
+    </message>
+    <message>
+        <source>Triggers the action</source>
+        <translation>触发操作</translation>
+    </message>
+    <message>
+        <source>Increase</source>
+        <translation>增加</translation>
+    </message>
+    <message>
+        <source>Toggle</source>
+        <translation>切换</translation>
+    </message>
+    <message>
+        <source>Toggles the state</source>
+        <translation>切换状态</translation>
+    </message>
+    <message>
+        <source>Scrolls up</source>
+        <translation>向上滚动</translation>
+    </message>
+    <message>
+        <source>Scrolls down</source>
+        <translation>向下滚动</translation>
+    </message>
+    <message>
+        <source>Scroll Up</source>
+        <translation>向上滚动</translation>
+    </message>
+    <message>
+        <source>Goes to the next page</source>
+        <translation>转到下一页</translation>
+    </message>
+    <message>
+        <source>Scrolls to the right</source>
+        <translation>滚动到右边</translation>
+    </message>
+    <message>
+        <source>Increase the value</source>
+        <translation>增加值</translation>
+    </message>
+    <message>
+        <source>Decrease the value</source>
+        <translation>减少值</translation>
+    </message>
+    <message>
+        <source>Decrease</source>
+        <translation>减少</translation>
+    </message>
+    <message>
+        <source>Scroll Right</source>
+        <translation>向右滚动</translation>
+    </message>
+    <message>
+        <source>Previous Page</source>
+        <translation>上一页</translation>
+    </message>
+    <message>
+        <source>Sets the focus</source>
+        <translation>设置焦点</translation>
+    </message>
+    <message>
+        <source>SetFocus</source>
+        <translation>设置焦点</translation>
+    </message>
+    <message>
+        <source>Next Page</source>
+        <translation>下一页</translation>
+    </message>
+    <message>
+        <source>ShowMenu</source>
+        <translation>显示菜单</translation>
+    </message>
+</context>
+<context>
+    <name>QSocks5SocketEngine</name>
+    <message>
+        <source>Network operation timed out</source>
+        <translation>网络操作超时</translation>
+    </message>
+    <message>
+        <source>Connection to proxy closed prematurely</source>
+        <translation>代理连接过早关闭</translation>
+    </message>
+    <message>
+        <source>Proxy authentication failed: %1</source>
+        <translation>代理认证失败:%1</translation>
+    </message>
+    <message>
+        <source>Proxy authentication failed</source>
+        <translation>代理认证失败</translation>
+    </message>
+    <message>
+        <source>General SOCKSv5 server failure</source>
+        <translation>常规 SOCKSv5 服务器故障</translation>
+    </message>
+    <message>
+        <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+        <translation>未知 SOCKSv5 代理,错误代码 0x%1</translation>
+    </message>
+    <message>
+        <source>Connection not allowed by SOCKSv5 server</source>
+        <translation>连接不被 SOCKSv5 服务器允许</translation>
+    </message>
+    <message>
+        <source>SOCKSv5 command not supported</source>
+        <translation>不支持的 SOCKSv5 命令</translation>
+    </message>
+    <message>
+        <source>Connection to proxy timed out</source>
+        <translation>代理连接超时</translation>
+    </message>
+    <message>
+        <source>Proxy host not found</source>
+        <translation>代理主机未找到</translation>
+    </message>
+    <message>
+        <source>TTL expired</source>
+        <translation>TTL 已过期</translation>
+    </message>
+    <message>
+        <source>Address type not supported</source>
+        <translation>不支持的地址类型</translation>
+    </message>
+    <message>
+        <source>Connection to proxy refused</source>
+        <translation>代理拒绝连接</translation>
+    </message>
+    <message>
+        <source>SOCKS version 5 protocol error</source>
+        <translation>SOCKS 版本 5 协议错误</translation>
+    </message>
+</context>
+<context>
+    <name>QPrintPropertiesDialog</name>
+    <message>
+        <source>Advanced Option Conflicts</source>
+        <translation>高级选项冲突</translation>
+    </message>
+    <message>
+        <source>Job Options</source>
+        <translation>作业选项</translation>
+    </message>
+    <message>
+        <source>Page Setup Conflicts</source>
+        <translation>页面设置冲突</translation>
+    </message>
+    <message>
+        <source>There are conflicts in some advanced options. Do you want to fix them?</source>
+        <translation>在一些高级选项存在冲突。要修复它吗?</translation>
+    </message>
+    <message>
+        <source>There are conflicts in page setup options. Do you want to fix them?</source>
+        <translation>在页面设置选项有冲突。要修复它吗?</translation>
+    </message>
+    <message>
+        <source>Printer Properties</source>
+        <translation>打印机属性</translation>
+    </message>
+</context>
+<context>
+    <name>QDnsLookupRunnable</name>
+    <message>
+        <source>No hostname given</source>
+        <translation>未指定主机名</translation>
+    </message>
+    <message>
+        <source>Server failure</source>
+        <translation>服务器故障</translation>
+    </message>
+    <message>
+        <source>Invalid text record</source>
+        <translation>无效的文本记录</translation>
+    </message>
+    <message>
+        <source>Invalid mail exchange record</source>
+        <translation>无效的邮件交换记录</translation>
+    </message>
+    <message>
+        <source>Invalid canonical name record</source>
+        <translation>无效的规范名称记录</translation>
+    </message>
+    <message>
+        <source>Invalid service record</source>
+        <translation>无效的服务记录</translation>
+    </message>
+    <message>
+        <source>Non existent domain</source>
+        <translation>不存在的域</translation>
+    </message>
+    <message>
+        <source>Server could not process query</source>
+        <translation>服务器无法处理查询</translation>
+    </message>
+    <message>
+        <source>Host %1 could not be found.</source>
+        <translation>找不到主机 %1。</translation>
+    </message>
+    <message>
+        <source>IPv6 addresses for nameservers are currently not supported</source>
+        <translation>目前不支持名称服务器的 IPv6 地址</translation>
+    </message>
+    <message>
+        <source>Not yet supported on Android</source>
+        <translation>Android 尚不支持</translation>
+    </message>
+    <message>
+        <source>Resolver functions not found</source>
+        <translation>找不到解析器函数</translation>
+    </message>
+    <message>
+        <source>Invalid domain name</source>
+        <translation>无效的域名</translation>
+    </message>
+    <message>
+        <source>Invalid pointer record</source>
+        <translation>无效的指针记录</translation>
+    </message>
+    <message>
+        <source>Invalid name server record</source>
+        <translation>无效的名称服务器记录</translation>
+    </message>
+    <message>
+        <source>Resolver library can&apos;t be loaded: No runtime library loading support</source>
+        <translation>无法加载解析器库:不支持运行时库加载</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Server refused to answer</source>
+        <translation>服务器拒绝回答</translation>
+    </message>
+    <message>
+        <source>Invalid hostname</source>
+        <translation>无效的主机名</translation>
+    </message>
+    <message>
+        <source>Could not expand domain name</source>
+        <translation>无法扩展域名</translation>
+    </message>
+    <message>
+        <source>Resolver initialization failed</source>
+        <translation>解析器初始化失败</translation>
+    </message>
+    <message>
+        <source>Invalid reply received</source>
+        <translation>收到的回复无效</translation>
+    </message>
+    <message>
+        <source>Invalid IPv6 address record</source>
+        <translation>无效的 IPv6 地址记录</translation>
+    </message>
+    <message>
+        <source>Invalid IPv4 address record</source>
+        <translation>无效的 IPv4 地址记录</translation>
+    </message>
+</context>
+<context>
+    <name>QLibrary</name>
+    <message>
+        <source>unexpected e_shsize</source>
+        <translation>异常的 e_shsize</translation>
+    </message>
+    <message>
+        <source>not a dynamic library</source>
+        <translation>不是动态库</translation>
+    </message>
+    <message>
+        <source>file too small</source>
+        <translation>文件太小</translation>
+    </message>
+    <message>
+        <source>shstrtab section header seems to be at %1</source>
+        <translation>shstrtab 区段头似乎位于 %1</translation>
+    </message>
+    <message>
+        <source>unexpected e_shentsize</source>
+        <translation>异常的 e_shentsize</translation>
+    </message>
+    <message>
+        <source>odd endianness</source>
+        <translation>奇字节序</translation>
+    </message>
+    <message>
+        <source>Cannot unload library %1: %2</source>
+        <translation>无法卸载库 %1:%2</translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is not a valid Mach-O binary (%2)</source>
+        <translation>“%1”不是有效的 Mach-O 二进制文件(%2)</translation>
+    </message>
+    <message>
+        <source>Cannot load library %1: %2</source>
+        <translation>无法加载库 %1:%2</translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is not a Qt plugin</source>
+        <translation>“%1” 不是 Qt 插件</translation>
+    </message>
+    <message>
+        <source>Failed to extract plugin meta data from &apos;%1&apos;</source>
+        <translation>无法从“%1”中提取插件元数据</translation>
+    </message>
+    <message>
+        <source>odd cpu architecture</source>
+        <translation>奇数 CPU 架构</translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is not an ELF object (%2)</source>
+        <translation>“%1”不是 ELF 对象(%2)</translation>
+    </message>
+    <message>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+        <translation>插件“%1”使用了不兼容的 Qt 库。(%2.%3.%4) [%5]</translation>
+    </message>
+    <message>
+        <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+        <translation>无法解析 %2 中的符号“%1”:%3</translation>
+    </message>
+    <message>
+        <source>wrong cpu architecture</source>
+        <translation>错误的 CPU 架构</translation>
+    </message>
+    <message>
+        <source>section name %1 of %2 behind end of file</source>
+        <translation>文件尾后面的第 %1 区段(共 %2 区段)</translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is an invalid ELF object (%2)</source>
+        <translation>“%1”是一个无效的 ELF 对象(%2)</translation>
+    </message>
+    <message>
+        <source>empty .rodata. not a library.</source>
+        <translation>空.rodata.不是库。</translation>
+    </message>
+    <message>
+        <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+        <translation>插件“%1”使用了不兼容的 Qt 库。(不能混合使用库的调试版本和发布版本。)</translation>
+    </message>
+    <message>
+        <source>&apos;%1&apos; is not an ELF object</source>
+        <translation>“%1”不是 ELF 对象</translation>
+    </message>
+    <message>
+        <source>string table seems to be at %1</source>
+        <translation>字符串表似乎位于 %1</translation>
+    </message>
+    <message>
+        <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+        <translation>文件“%1”不是有效的 Qt 插件。</translation>
+    </message>
+    <message>
+        <source>The shared library was not found.</source>
+        <translation>共享库没有被找到。</translation>
+    </message>
+    <message>
+        <source>wrong architecture</source>
+        <translation>错误的架构</translation>
+    </message>
+    <message>
+        <source>file is corrupt</source>
+        <translation>文件已损坏</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>missing section data. This is not a library.</source>
+        <translation>缺少区段数据。这不是一个库。</translation>
+    </message>
+    <message>
+        <source>no suitable architecture in fat binary</source>
+        <translation>FAT 二进制没有合适的架构</translation>
+    </message>
+    <message numerus="yes">
+        <source>announced %n section(s), each %1 byte(s), exceed file size</source>
+        <translation>
+            <numerusform>声明了 %n 个区段,每个 %1 个字节,超出了文件大小</numerusform>
+        </translation>
+    </message>
+    <message>
+        <source>invalid magic %1</source>
+        <translation>无效魔数 %1</translation>
+    </message>
+</context>
+<context>
+    <name>QSctpSocket</name>
+    <message>
+        <source>The remote host closed the connection</source>
+        <translation>远端主机关闭了这个连接</translation>
+    </message>
+</context>
+<context>
+    <name>QRegExp</name>
+    <message>
+        <source>invalid category</source>
+        <translation>无效的类别</translation>
+    </message>
+    <message>
+        <source>bad lookahead syntax</source>
+        <translation>错误的预测语法</translation>
+    </message>
+    <message>
+        <source>no error occurred</source>
+        <translation>没有错误发生</translation>
+    </message>
+    <message>
+        <source>missing left delim</source>
+        <translation>找不到左分隔符</translation>
+    </message>
+    <message>
+        <source>bad char class syntax</source>
+        <translation>错误的字符类语法</translation>
+    </message>
+    <message>
+        <source>disabled feature used</source>
+        <translation>使用了禁用功能</translation>
+    </message>
+    <message>
+        <source>invalid octal value</source>
+        <translation>无效的八进制数值</translation>
+    </message>
+    <message>
+        <source>bad repetition syntax</source>
+        <translation>错误的重复语法</translation>
+    </message>
+    <message>
+        <source>met internal limit</source>
+        <translation>遇到内部限制</translation>
+    </message>
+    <message>
+        <source>invalid interval</source>
+        <translation>无效的间隔</translation>
+    </message>
+    <message>
+        <source>unexpected end</source>
+        <translation>异常的终止</translation>
+    </message>
+    <message>
+        <source>lookbehinds not supported, see QTBUG-2371</source>
+        <translation>不支持向后查看,请参阅 QTBUG-2371</translation>
+    </message>
+</context>
+<context>
+    <name>QDialog</name>
+    <message>
+        <source>What&apos;s This?</source>
+        <translation>这是什么?</translation>
+    </message>
+</context>
+<context>
+    <name>QWhatsThisAction</name>
+    <message>
+        <source>What&apos;s This?</source>
+        <translation>这是什么?</translation>
+    </message>
+</context>
+<context>
+    <name>QFtp</name>
+    <message>
+        <source>Listing directory failed:
+%1</source>
+        <translation>列出目录失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Creating directory failed:
+%1</source>
+        <translation>创建目录失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Not connected</source>
+        <translation>未连接</translation>
+    </message>
+    <message>
+        <source>Login failed:
+%1</source>
+        <translation>登录失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Downloading file failed:
+%1</source>
+        <translation>下载文件失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Connection timed out to host %1</source>
+        <translation>主机 %1 连接超时</translation>
+    </message>
+    <message>
+        <source>Connected to host %1</source>
+        <translation>连接到主机 %1</translation>
+    </message>
+    <message>
+        <source>Connecting to host failed:
+%1</source>
+        <translation>连接主机失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Host %1 not found</source>
+        <translation>主机 %1 没有找到</translation>
+    </message>
+    <message>
+        <source>Uploading file failed:
+%1</source>
+        <translation>上传文件失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Changing directory failed:
+%1</source>
+        <translation>改变目录失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Data Connection refused</source>
+        <translation>数据连接被拒绝</translation>
+    </message>
+    <message>
+        <source>Removing directory failed:
+%1</source>
+        <translation>移除目录失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Connection refused to host %1</source>
+        <translation>连接被主机 %1 拒绝</translation>
+    </message>
+    <message>
+        <source>Removing file failed:
+%1</source>
+        <translation>移除文件失败:
+%1</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Connection closed</source>
+        <translation>连接已关闭</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Driver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to set autocommit</source>
+        <translation>不能设置自动提交</translation>
+    </message>
+    <message>
+        <source>Unable to connect</source>
+        <translation>无法连接</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseDriver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Could not start transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+    <message>
+        <source>Error opening database</source>
+        <translation>打开数据库出错</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+</context>
+<context>
+    <name>QIBaseResult</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to open BLOB</source>
+        <translation>不能打开 BLOB</translation>
+    </message>
+    <message>
+        <source>Could not describe statement</source>
+        <translation>不能描述语句</translation>
+    </message>
+    <message>
+        <source>Could not describe input statement</source>
+        <translation>不能描述输入语句</translation>
+    </message>
+    <message>
+        <source>Could not allocate statement</source>
+        <translation>不能分配语句</translation>
+    </message>
+    <message>
+        <source>Unable to write BLOB</source>
+        <translation>不能写入 BLOB</translation>
+    </message>
+    <message>
+        <source>Could not start transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+    <message>
+        <source>Unable to close statement</source>
+        <translation>不能关闭语句</translation>
+    </message>
+    <message>
+        <source>Could not get query info</source>
+        <translation>不能获取查询信息</translation>
+    </message>
+    <message>
+        <source>Could not find array</source>
+        <translation>找不到数组</translation>
+    </message>
+    <message>
+        <source>Could not get array data</source>
+        <translation>不能获取数组数据</translation>
+    </message>
+    <message>
+        <source>Unable to execute query</source>
+        <translation>不能执行查询</translation>
+    </message>
+    <message>
+        <source>Could not prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Could not fetch next item</source>
+        <translation>不能获取下一项</translation>
+    </message>
+    <message>
+        <source>Could not get statement info</source>
+        <translation>不能得到语句信息</translation>
+    </message>
+    <message>
+        <source>Unable to create BLOB</source>
+        <translation>不能创建 BLOB</translation>
+    </message>
+    <message>
+        <source>Unable to read BLOB</source>
+        <translation>不能读取 BLOB</translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLDriver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to open database &apos;%1&apos;</source>
+        <translation>无法打开数据库“%1”</translation>
+    </message>
+    <message>
+        <source>Unable to allocate a MYSQL object</source>
+        <translation>无法分配 MySQL 对象</translation>
+    </message>
+    <message>
+        <source>Unable to connect</source>
+        <translation>无法连接</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+    <message>
+        <source>Unable to begin transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+</context>
+<context>
+    <name>QOCIDriver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to initialize</source>
+        <translation>不能初始化</translation>
+    </message>
+    <message>
+        <source>Unable to logon</source>
+        <translation>不能登录</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+    <message>
+        <source>Unable to begin transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+</context>
+<context>
+    <name>QODBCDriver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to enable autocommit</source>
+        <translation>不能打开自动提交</translation>
+    </message>
+    <message>
+        <source>Unable to disable autocommit</source>
+        <translation>不能禁止自动提交</translation>
+    </message>
+    <message>
+        <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
+        <translation>无法连接 - 驱动程序不支持所有必需的功能</translation>
+    </message>
+    <message>
+        <source>Unable to connect</source>
+        <translation>无法连接</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Driver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Error opening database</source>
+        <translation>打开数据库出错</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+    <message>
+        <source>Unable to begin transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteDriver</name>
+    <message>
+        <source>Unable to commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Error closing database</source>
+        <translation>关闭数据库错误</translation>
+    </message>
+    <message>
+        <source>Error opening database</source>
+        <translation>打开数据库出错</translation>
+    </message>
+    <message>
+        <source>Unable to rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+    <message>
+        <source>Unable to begin transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSocket</name>
+    <message>
+        <source>Host not found</source>
+        <translation>主机未找到</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>连接被拒绝</translation>
+    </message>
+    <message>
+        <source>Connection timed out</source>
+        <translation>连接超时</translation>
+    </message>
+    <message>
+        <source>Trying to connect while connection is in progress</source>
+        <translation>在连接正在进行时尝试连接</translation>
+    </message>
+    <message>
+        <source>Socket is not connected</source>
+        <translation>套接字未连接</translation>
+    </message>
+    <message>
+        <source>Socket operation timed out</source>
+        <translation>套接字操作超时</translation>
+    </message>
+    <message>
+        <source>Network unreachable</source>
+        <translation>网络不能访问</translation>
+    </message>
+    <message>
+        <source>Operation on socket is not supported</source>
+        <translation>套接字操作不被支持</translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfoAgent</name>
+    <message>
+        <source>Host not found</source>
+        <translation>主机未找到</translation>
+    </message>
+    <message>
+        <source>No host name given</source>
+        <translation>未指定主机名</translation>
+    </message>
+    <message>
+        <source>Unknown address type</source>
+        <translation>未知的地址类型</translation>
+    </message>
+    <message>
+        <source>Invalid hostname</source>
+        <translation>无效的主机名</translation>
+    </message>
+    <message>
+        <source>Unknown error (%1)</source>
+        <translation>未知错误(%1)</translation>
+    </message>
+</context>
+<context>
+    <name>QTgaFile</name>
+    <message>
+        <source>Image type not supported</source>
+        <translation>不支持的图像类型</translation>
+    </message>
+    <message>
+        <source>Image header read failed</source>
+        <translation>图像头读取失败</translation>
+    </message>
+    <message>
+        <source>Seek file/device for image read failed</source>
+        <translation>查找 文件/设备 以读取图像失败</translation>
+    </message>
+    <message>
+        <source>Could not read image data</source>
+        <translation>无法读取图像数据</translation>
+    </message>
+    <message>
+        <source>Could not reset to read data</source>
+        <translation>无法重置为读取数据</translation>
+    </message>
+    <message>
+        <source>Image depth not valid</source>
+        <translation>图像深度无效</translation>
+    </message>
+    <message>
+        <source>Image size exceeds limit</source>
+        <translation>图像大小超出限制</translation>
+    </message>
+    <message>
+        <source>Could not read footer</source>
+        <translation>无法读取页脚</translation>
+    </message>
+    <message>
+        <source>Sequential device (eg socket) for image read not supported</source>
+        <translation>不支持图像读取的顺序设备(例如套接字)</translation>
+    </message>
+    <message>
+        <source>Image type (non-TrueVision 2.0) not supported</source>
+        <translation>不支持图像类型(非 TrueVision 2.0)</translation>
+    </message>
+    <message>
+        <source>Could not seek to image read footer</source>
+        <translation>无法查找图像读取页脚</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLiteResult</name>
+    <message>
+        <source>Unable to execute multiple statements at a time</source>
+        <translation>无法一次执行多个语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch row</source>
+        <translation>不能获取行</translation>
+    </message>
+    <message>
+        <source>No query</source>
+        <translation>没有查询</translation>
+    </message>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to bind parameters</source>
+        <translation>不能绑定参数</translation>
+    </message>
+    <message>
+        <source>Unable to reset statement</source>
+        <translation>不能重置语句</translation>
+    </message>
+    <message>
+        <source>Parameter count mismatch</source>
+        <translation>参数数量不匹配</translation>
+    </message>
+</context>
+<context>
+    <name>QXml</name>
+    <message>
+        <source>unparsed entity reference in wrong context</source>
+        <translation>没有解析的错误上下文中的实体参考</translation>
+    </message>
+    <message>
+        <source>external parsed general entity reference not allowed in DTD</source>
+        <translation>在 DTD 中不允许使用外部解析的通用实体参考</translation>
+    </message>
+    <message>
+        <source>wrong value for standalone declaration</source>
+        <translation>独立声明的值错误</translation>
+    </message>
+    <message>
+        <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+        <translation>读取 XML 声明时需要编码声明或独立声明</translation>
+    </message>
+    <message>
+        <source>no error occurred</source>
+        <translation>没有错误发生</translation>
+    </message>
+    <message>
+        <source>error occurred while parsing reference</source>
+        <translation>解析参考时发生错误</translation>
+    </message>
+    <message>
+        <source>standalone declaration expected while reading the XML declaration</source>
+        <translation>读取 XML 声明时需要独立声明</translation>
+    </message>
+    <message>
+        <source>invalid name for processing instruction</source>
+        <translation>无效的处理指令名称</translation>
+    </message>
+    <message>
+        <source>error triggered by consumer</source>
+        <translation>消费者触发的错误</translation>
+    </message>
+    <message>
+        <source>error occurred while parsing element</source>
+        <translation>解析元素时发生错误</translation>
+    </message>
+    <message>
+        <source>unexpected character</source>
+        <translation>异常的字符</translation>
+    </message>
+    <message>
+        <source>tag mismatch</source>
+        <translation>标记不匹配</translation>
+    </message>
+    <message>
+        <source>error occurred while parsing content</source>
+        <translation>解析内容时发生错误</translation>
+    </message>
+    <message>
+        <source>error occurred while parsing comment</source>
+        <translation>解析注释时发生错误</translation>
+    </message>
+    <message>
+        <source>internal general entity reference not allowed in DTD</source>
+        <translation>在 DTD 中不允许使用内部解析的通用实体参考</translation>
+    </message>
+    <message>
+        <source>recursive entities</source>
+        <translation>嵌套实体</translation>
+    </message>
+    <message>
+        <source>more than one document type definition</source>
+        <translation>多个文档类型定义</translation>
+    </message>
+    <message>
+        <source>version expected while reading the XML declaration</source>
+        <translation>在读取 XML 声明的时候,版本被期待</translation>
+    </message>
+    <message>
+        <source>letter is expected</source>
+        <translation>需要字母</translation>
+    </message>
+    <message>
+        <source>unexpected end of file</source>
+        <translation>异常的文件终止</translation>
+    </message>
+    <message>
+        <source>external parsed general entity reference not allowed in attribute value</source>
+        <translation>在属性值中不允许使用外部解析的通用实体参考</translation>
+    </message>
+    <message>
+        <source>error in the text declaration of an external entity</source>
+        <translation>在一个外部实体的文本声明里有错误</translation>
+    </message>
+    <message>
+        <source>error occurred while parsing document type definition</source>
+        <translation>解析文档类型定义时发生错误</translation>
+    </message>
+</context>
+<context>
+    <name>QSystemSemaphore</name>
+    <message>
+        <source>%1: does not exist</source>
+        <translation>%1:不存在</translation>
+    </message>
+    <message>
+        <source>%1: already exists</source>
+        <translation>%1:已经存在</translation>
+    </message>
+    <message>
+        <source>%1: unknown error %2</source>
+        <translation>%1:未知错误 %2</translation>
+    </message>
+    <message>
+        <source>%1: permission denied</source>
+        <translation>%1:权限被拒绝</translation>
+    </message>
+    <message>
+        <source>%1: out of resources</source>
+        <translation>%1:资源耗尽</translation>
+    </message>
+</context>
+<context>
+    <name>QCommandLineParser</name>
+    <message>
+        <source>Unknown options: %1.</source>
+        <translation>未知选项:%1。</translation>
+    </message>
+    <message>
+        <source>Unknown option &apos;%1&apos;.</source>
+        <translation>未知选项“%1”。</translation>
+    </message>
+    <message>
+        <source>[options]</source>
+        <translation>[选项]</translation>
+    </message>
+    <message>
+        <source>Options:</source>
+        <translation>选项:</translation>
+    </message>
+    <message>
+        <source>Usage: %1</source>
+        <translation>用法:%1</translation>
+    </message>
+    <message>
+        <source>Unexpected value after &apos;%1&apos;.</source>
+        <translation>“%1”之后的异常值。</translation>
+    </message>
+    <message>
+        <source>Displays version information.</source>
+        <translation>显示版本信息。</translation>
+    </message>
+    <message>
+        <source>Arguments:</source>
+        <translation>参数:</translation>
+    </message>
+    <message>
+        <source>Displays this help.</source>
+        <translation>显示此帮助。</translation>
+    </message>
+    <message>
+        <source>Missing value after &apos;%1&apos;.</source>
+        <translation>“%1”之后缺少值。</translation>
+    </message>
+</context>
+<context>
+    <name>QHttp</name>
+    <message>
+        <source>Data corrupted</source>
+        <translation>数据错误</translation>
+    </message>
+    <message>
+        <source>Insecure redirect</source>
+        <translation>不安全的重定向</translation>
+    </message>
+    <message>
+        <source>Host %1 not found</source>
+        <translation>主机 %1 没有找到</translation>
+    </message>
+    <message>
+        <source>Host requires authentication</source>
+        <translation>主机需要验证</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>连接被拒绝</translation>
+    </message>
+    <message>
+        <source>Unknown protocol specified</source>
+        <translation>所指定的协议是未知的</translation>
+    </message>
+    <message>
+        <source>Proxy requires authentication</source>
+        <translation>代理需要验证</translation>
+    </message>
+    <message>
+        <source>SSL handshake failed</source>
+        <translation>SSL 握手失败</translation>
+    </message>
+    <message>
+        <source>Too many redirects</source>
+        <translation>重定向太多</translation>
+    </message>
+    <message>
+        <source>Connection closed</source>
+        <translation>连接已关闭</translation>
+    </message>
+</context>
+<context>
+    <name>QSslDiffieHellmanParameter</name>
+    <message>
+        <source>No error</source>
+        <translation>无错误</translation>
+    </message>
+    <message>
+        <source>Invalid input data</source>
+        <translation>输入数据无效</translation>
+    </message>
+    <message>
+        <source>The given Diffie-Hellman parameters are deemed unsafe</source>
+        <translation>给定的 Diffie-Hellman 参数被认为是不安全的</translation>
+    </message>
+</context>
+<context>
+    <name>QMessageBox</name>
+    <message>
+        <source>Show Details...</source>
+        <translation>显示细节…</translation>
+    </message>
+    <message>
+        <source>About Qt</source>
+        <translation>关于 Qt</translation>
+    </message>
+    <message>
+        <source>Hide Details...</source>
+        <translation>隐藏细节…</translation>
+    </message>
+    <message>
+        <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+        <translation>&lt;h3&gt;关于 Qt&lt;/h3&gt;&lt;p&gt;本程序使用 Qt 版本 %1。&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across all major desktop operating systems. It is also available for embedded Linux and other embedded and mobile operating systems.&lt;/p&gt;&lt;p&gt;Qt is available under multiple licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of GNU (L)GPL.&lt;/p&gt;&lt;p&gt;Qt licensed under GNU (L)GPL is appropriate for the development of Qt&amp;nbsp;applications provided you can comply with the terms and conditions of the respective licenses.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://%2/&quot;&gt;%2&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) %1 The Qt Company Ltd and other contributors.&lt;/p&gt;&lt;p&gt;Qt and the Qt logo are trademarks of The Qt Company Ltd.&lt;/p&gt;&lt;p&gt;Qt is The Qt Company Ltd product developed as an open source project. See &lt;a href=&quot;http://%3/&quot;&gt;%3&lt;/a&gt; for more information.&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Qt 是一个用于跨平台应用程序开发的 C++ 工具包。&lt;/p&gt;&lt;p&gt;Qt 提供跨所有主要桌面操作系统的单一来源可移植性。它也可用于嵌入式 Linux 和其他嵌入式和移动操作系统。&lt;/p&gt;&lt;p&gt;Qt 可在多种许可选项下使用,旨在满足各种用户的需求。&lt;/p&gt;&lt;p&gt;在我们的商业许可协议授权的 Qt 许可,适用于开发专有/商业软件,您不希望与第三方共享任何源代码或不符合 GNU (L)GPL 条款。&lt;/p&gt;&lt;p&gt;在 GNU (L)GPL 下获得许可的 Qt 适用于 Qt 应用程序的开发,前提是您可以遵守相应许可证的条款和条件。&lt;/p&gt;&lt;p&gt;请参阅&lt;a href=&quot;http://%2/&quot;&gt;%2&lt;/a&gt;获取 Qt 许可的概要。&lt;/p&gt;&lt;p&gt;版权 (C) %1 Qt Company Ltd 和其他贡献者。&lt;/p&gt;&lt;p&gt;Qt 和 Qt 徽标是 The Qt Company Ltd 的商标。&lt;/p&gt;&lt;p&gt;Qt 是作为开源项目开发的 Qt Company Ltd 产品。有关详细信息,请参见&lt;a href=&quot;http://%3/&quot;&gt;%3&lt;/a&gt;。&lt;/p&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>QUnicodeControlCharacterMenu</name>
+    <message>
+        <source>RLE Start of right-to-left embedding</source>
+        <translation>RLE 开始从右向左嵌入</translation>
+    </message>
+    <message>
+        <source>ZWSP Zero width space</source>
+        <translation>ZWSP 零宽度空格</translation>
+    </message>
+    <message>
+        <source>LRI Left-to-right isolate</source>
+        <translation>LRI 从左到右隔离</translation>
+    </message>
+    <message>
+        <source>Insert Unicode control character</source>
+        <translation>插入 Unicode 控制字符</translation>
+    </message>
+    <message>
+        <source>LRO Start of left-to-right override</source>
+        <translation>LRO 开始从左向右重写</translation>
+    </message>
+    <message>
+        <source>LRE Start of left-to-right embedding</source>
+        <translation>LRE 开始从左到右嵌入</translation>
+    </message>
+    <message>
+        <source>RLI Right-to-left isolate</source>
+        <translation>RLI 从右到左隔离</translation>
+    </message>
+    <message>
+        <source>RLM Right-to-left mark</source>
+        <translation>RLM 从右向左标记</translation>
+    </message>
+    <message>
+        <source>PDF Pop directional formatting</source>
+        <translation>PDF 弹出方向格式</translation>
+    </message>
+    <message>
+        <source>ZWNJ Zero width non-joiner</source>
+        <translation>ZWNJ 零宽不连字</translation>
+    </message>
+    <message>
+        <source>RLO Start of right-to-left override</source>
+        <translation>RLO 开始从右向左重写</translation>
+    </message>
+    <message>
+        <source>PDI Pop directional isolate</source>
+        <translation>PDI 弹出定向隔离</translation>
+    </message>
+    <message>
+        <source>ZWJ Zero width joiner</source>
+        <translation>ZWJ 零宽连字</translation>
+    </message>
+    <message>
+        <source>LRM Left-to-right mark</source>
+        <translation>LRM 从左到右标记</translation>
+    </message>
+    <message>
+        <source>FSI First strong isolate</source>
+        <translation>FSI 第一强隔离</translation>
+    </message>
+</context>
+<context>
+    <name>QJsonParseError</name>
+    <message>
+        <source>invalid UTF8 string</source>
+        <translation>无效的 UTF8 字符串</translation>
+    </message>
+    <message>
+        <source>unterminated array</source>
+        <translation>未终止的数组</translation>
+    </message>
+    <message>
+        <source>unterminated object</source>
+        <translation>未终止的对象</translation>
+    </message>
+    <message>
+        <source>no error occurred</source>
+        <translation>没有错误发生</translation>
+    </message>
+    <message>
+        <source>unterminated string</source>
+        <translation>未终止的字符串</translation>
+    </message>
+    <message>
+        <source>garbage at the end of the document</source>
+        <translation>文件末尾的垃圾</translation>
+    </message>
+    <message>
+        <source>invalid termination by number</source>
+        <translation>无效的编号终止</translation>
+    </message>
+    <message>
+        <source>missing value separator</source>
+        <translation>缺失值分隔符</translation>
+    </message>
+    <message>
+        <source>illegal number</source>
+        <translation>非法数字</translation>
+    </message>
+    <message>
+        <source>invalid escape sequence</source>
+        <translation>无效的转义序列</translation>
+    </message>
+    <message>
+        <source>missing name separator</source>
+        <translation>缺少名称分隔符</translation>
+    </message>
+    <message>
+        <source>too large document</source>
+        <translation>文件太大</translation>
+    </message>
+    <message>
+        <source>object is missing after a comma</source>
+        <translation>逗号后缺少对象</translation>
+    </message>
+    <message>
+        <source>too deeply nested document</source>
+        <translation>文件嵌套太深</translation>
+    </message>
+    <message>
+        <source>illegal value</source>
+        <translation>非法值</translation>
+    </message>
+</context>
+<context>
+    <name>QImageReader</name>
+    <message>
+        <source>Unable to read image data</source>
+        <translation>无法读取图像数据</translation>
+    </message>
+    <message>
+        <source>Invalid device</source>
+        <translation>无效的设备</translation>
+    </message>
+    <message>
+        <source>Unsupported image format</source>
+        <translation>不支持的图像格式</translation>
+    </message>
+    <message>
+        <source>File not found</source>
+        <translation>文件未找到</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+</context>
+<context>
+    <name>QHttpSocketEngine</name>
+    <message>
+        <source>Proxy connection refused</source>
+        <translation>代理连接被拒绝</translation>
+    </message>
+    <message>
+        <source>Proxy denied connection</source>
+        <translation>代理拒绝连接</translation>
+    </message>
+    <message>
+        <source>Proxy server not found</source>
+        <translation>未找到代理服务器</translation>
+    </message>
+    <message>
+        <source>Proxy server connection timed out</source>
+        <translation>代理服务器连接超时</translation>
+    </message>
+    <message>
+        <source>Did not receive HTTP response from proxy</source>
+        <translation>未收到代理的 HTTP 响应</translation>
+    </message>
+    <message>
+        <source>Proxy connection closed prematurely</source>
+        <translation>代理连接过早关闭</translation>
+    </message>
+    <message>
+        <source>Error communicating with HTTP proxy</source>
+        <translation>和 HTTP 代理通讯时发生错误</translation>
+    </message>
+    <message>
+        <source>Authentication required</source>
+        <translation>需要身份验证</translation>
+    </message>
+    <message>
+        <source>Error parsing authentication request from proxy</source>
+        <translation>解析来自代理的身份验证请求时出错</translation>
+    </message>
+</context>
+<context>
+    <name>QSaveFile</name>
+    <message>
+        <source>Filename refers to a directory</source>
+        <translation>文件名指向了目录</translation>
+    </message>
+    <message>
+        <source>QSaveFile cannot open &apos;%1&apos; without direct write fallback enabled: path contains an Alternate Data Stream specifier</source>
+        <translation>没有启用直接写回退,QSaveFile 无法打开“%1”:路径包含备用数据流说明符</translation>
+    </message>
+    <message>
+        <source>Writing canceled by application</source>
+        <translation>写入被应用程序取消</translation>
+    </message>
+    <message>
+        <source>Existing file %1 is not writable</source>
+        <translation>现有文件 %1 不可写</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessManager</name>
+    <message>
+        <source>Network access is disabled.</source>
+        <translation>网络访问已禁用。</translation>
+    </message>
+</context>
+<context>
+    <name>QAbstractSpinBox</name>
+    <message>
+        <source>Step &amp;down</source>
+        <translation>向下(&amp;D)</translation>
+    </message>
+    <message>
+        <source>&amp;Step up</source>
+        <translation>向上(&amp;S)</translation>
+    </message>
+    <message>
+        <source>&amp;Select All</source>
+        <translation>全选(&amp;S)</translation>
+    </message>
+</context>
+<context>
+    <name>QDB2Result</name>
+    <message>
+        <source>Unable to bind variable</source>
+        <translation>不能绑定变量</translation>
+    </message>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch next</source>
+        <translation>不能获取下一个</translation>
+    </message>
+    <message>
+        <source>Unable to prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch record %1</source>
+        <translation>不能获取记录 %1</translation>
+    </message>
+    <message>
+        <source>Unable to fetch first</source>
+        <translation>不能获取第一个</translation>
+    </message>
+</context>
+<context>
+    <name>QODBCResult</name>
+    <message>
+        <source>Unable to bind variable</source>
+        <translation>不能绑定变量</translation>
+    </message>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch next</source>
+        <translation>不能获取下一个</translation>
+    </message>
+    <message>
+        <source>Unable to fetch last</source>
+        <translation>不能获取最后一个</translation>
+    </message>
+    <message>
+        <source>Unable to prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch previous</source>
+        <translation>不能获取上一个</translation>
+    </message>
+    <message>
+        <source>Unable to fetch</source>
+        <translation>不能获取</translation>
+    </message>
+    <message>
+        <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
+        <translation>QODBCResult::reset: 不能把“SQL_CURSOR_STATIC”设置为语句属性。请检查你的ODBC驱动程序设置</translation>
+    </message>
+    <message>
+        <source>Unable to fetch first</source>
+        <translation>不能获取第一个</translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLDriver</name>
+    <message>
+        <source>Unable to subscribe</source>
+        <translation>不能订阅</translation>
+    </message>
+    <message>
+        <source>Could not begin transaction</source>
+        <translation>不能开始事务</translation>
+    </message>
+    <message>
+        <source>Could not rollback transaction</source>
+        <translation>不能回滚事务</translation>
+    </message>
+    <message>
+        <source>Could not commit transaction</source>
+        <translation>不能提交事务</translation>
+    </message>
+    <message>
+        <source>Unable to connect</source>
+        <translation>无法连接</translation>
+    </message>
+    <message>
+        <source>Unable to unsubscribe</source>
+        <translation>不能取消订阅</translation>
+    </message>
+</context>
+<context>
+    <name>QInputDialog</name>
+    <message>
+        <source>Enter a value:</source>
+        <translation>输入一个值:</translation>
+    </message>
+</context>
+<context>
+    <name>QCoreApplication</name>
+    <message>
+        <source>%1: key is empty</source>
+        <translation>%1:键是空的</translation>
+    </message>
+    <message>
+        <source>%1: unable to make key</source>
+        <translation>%1:不能生成键</translation>
+    </message>
+    <message>
+        <source>%1: ftok failed</source>
+        <translation>%1:ftok 失败</translation>
+    </message>
+</context>
+<context>
+    <name>QIODevice</name>
+    <message>
+        <source>No such file or directory</source>
+        <translation>此文件或目录不存在</translation>
+    </message>
+    <message>
+        <source>Permission denied</source>
+        <translation>权限被拒绝</translation>
+    </message>
+    <message>
+        <source>file to open is a directory</source>
+        <translation>要打开的文件是一个目录</translation>
+    </message>
+    <message>
+        <source>No space left on device</source>
+        <translation>设备中已没有剩余空间</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Too many open files</source>
+        <translation>打开的文件太多</translation>
+    </message>
+</context>
+<context>
+    <name>QTabBar</name>
+    <message>
+        <source>Scroll Left</source>
+        <translation>向左滚动</translation>
+    </message>
+    <message>
+        <source>Scroll Right</source>
+        <translation>向右滚动</translation>
+    </message>
+</context>
+<context>
+    <name>QUndoModel</name>
+    <message>
+        <source>&lt;empty&gt;</source>
+        <translation>&lt;空白&gt;</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessCacheBackend</name>
+    <message>
+        <source>Error opening %1</source>
+        <translation>打开 %1 发生错误</translation>
+    </message>
+</context>
+<context>
+    <name>QMYSQLResult</name>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to store statement results</source>
+        <translation>不能存储语句结果</translation>
+    </message>
+    <message>
+        <source>Unable to execute next query</source>
+        <translation>不能执行下一个查询</translation>
+    </message>
+    <message>
+        <source>Unable to bind outvalues</source>
+        <translation>不能绑定外值</translation>
+    </message>
+    <message>
+        <source>Unable to store next result</source>
+        <translation>不能存储下一个结果</translation>
+    </message>
+    <message>
+        <source>Unable to fetch data</source>
+        <translation>不能获取数据</translation>
+    </message>
+    <message>
+        <source>Unable to prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Unable to store result</source>
+        <translation>不能存储结果</translation>
+    </message>
+    <message>
+        <source>Unable to bind value</source>
+        <translation>不能绑定值</translation>
+    </message>
+    <message>
+        <source>Unable to execute query</source>
+        <translation>不能执行查询</translation>
+    </message>
+    <message>
+        <source>Unable to reset statement</source>
+        <translation>不能重置语句</translation>
+    </message>
+</context>
+<context>
+    <name>QSQLite2Result</name>
+    <message>
+        <source>Unable to execute statement</source>
+        <translation>不能执行语句</translation>
+    </message>
+    <message>
+        <source>Unable to fetch results</source>
+        <translation>不能获取结果</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkSessionPrivateImpl</name>
+    <message>
+        <source>The session was aborted by the user or system.</source>
+        <translation>会话被用户或系统中止。</translation>
+    </message>
+    <message>
+        <source>The requested operation is not supported by the system.</source>
+        <translation>系统不支持请求的操作。</translation>
+    </message>
+    <message>
+        <source>Roaming was aborted or is not possible.</source>
+        <translation>漫游已中止或无法进行。</translation>
+    </message>
+    <message>
+        <source>The specified configuration cannot be used.</source>
+        <translation>无法使用指定的配置。</translation>
+    </message>
+    <message>
+        <source>Unknown session error.</source>
+        <translation>未知的会话错误。</translation>
+    </message>
+</context>
+<context>
+    <name>QLocalServer</name>
+    <message>
+        <source>%1: Name error</source>
+        <translation>%1:名称错误</translation>
+    </message>
+    <message>
+        <source>%1: Unknown error %2</source>
+        <translation>%1:未知错误 %2</translation>
+    </message>
+    <message>
+        <source>%1: Permission denied</source>
+        <translation>%1:权限被拒绝</translation>
+    </message>
+    <message>
+        <source>%1: Address in use</source>
+        <translation>%1:地址正在被使用</translation>
+    </message>
+</context>
+<context>
+    <name>QCupsPrinterSupport</name>
+    <message>
+        <source>Authentication needed to use %1 on %2.</source>
+        <translation>身份验证需要使用 %1 在 %2。</translation>
+    </message>
+    <message>
+        <source>Authentication needed to use %1.</source>
+        <translation>身份验证需要使用 %1。</translation>
+    </message>
+    <message>
+        <source>Authentication Needed</source>
+        <translation>需要身份验证</translation>
+    </message>
+    <message>
+        <source>Password:</source>
+        <translation>密码:</translation>
+    </message>
+    <message>
+        <source>Username:</source>
+        <translation>用户名:</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReply</name>
+    <message>
+        <source>Network session error.</source>
+        <translation>网络会话错误。</translation>
+    </message>
+    <message>
+        <source>Protocol &quot;%1&quot; is unknown</source>
+        <translation>协议“%1”是未知的</translation>
+    </message>
+    <message>
+        <source>backend start error.</source>
+        <translation>后端启动错误。</translation>
+    </message>
+    <message>
+        <source>Background request not allowed.</source>
+        <translation>不允许后台请求。</translation>
+    </message>
+    <message>
+        <source>Error transferring %1 - server replied: %2</source>
+        <translation>传输 %1 时出错 - 服务器已回复:%2</translation>
+    </message>
+    <message>
+        <source>Temporary network failure.</source>
+        <translation>临时网络故障。</translation>
+    </message>
+</context>
+<context>
+    <name>QGuiApplication</name>
+    <message>
+        <source>QT_LAYOUT_DIRECTION</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+<context>
+    <name>QProgressDialog</name>
+    <message>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+</context>
+<context>
+    <name>QImageWriter</name>
+    <message>
+        <source>Unsupported image format</source>
+        <translation>不支持的图像格式</translation>
+    </message>
+    <message>
+        <source>Image is empty</source>
+        <translation>图像为空</translation>
+    </message>
+    <message>
+        <source>Device not writable</source>
+        <translation>设备不可写</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Cannot open device for writing: %1</source>
+        <translation>无法打开设备进行写入:%1</translation>
+    </message>
+    <message>
+        <source>Device is not set</source>
+        <translation>设备未设置</translation>
+    </message>
+</context>
+<context>
+    <name>MAC_APPLICATION_MENU</name>
+    <message>
+        <source>Hide Others</source>
+        <translation>隐藏其他</translation>
+    </message>
+    <message>
+        <source>Quit %1</source>
+        <translation>退出 %1</translation>
+    </message>
+    <message>
+        <source>About %1</source>
+        <translation>关于 %1</translation>
+    </message>
+    <message>
+        <source>Preferences...</source>
+        <translation>首选项...</translation>
+    </message>
+    <message>
+        <source>Services</source>
+        <translation>服务</translation>
+    </message>
+    <message>
+        <source>Hide %1</source>
+        <translation>隐藏 %1</translation>
+    </message>
+    <message>
+        <source>Show All</source>
+        <translation>全部显示</translation>
+    </message>
+</context>
+<context>
+    <name>QTDSDriver</name>
+    <message>
+        <source>Unable to open connection</source>
+        <translation>不能打开连接</translation>
+    </message>
+    <message>
+        <source>Unable to use database</source>
+        <translation>不能使用数据库</translation>
+    </message>
+</context>
+<context>
+    <name>QPluginLoader</name>
+    <message>
+        <source>The plugin was not loaded.</source>
+        <translation>插件没有被载入。</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+</context>
+<context>
+    <name>CloseButton</name>
+    <message>
+        <source>Close Tab</source>
+        <translation>关闭标签页</translation>
+    </message>
+</context>
+<context>
+    <name>QPSQLResult</name>
+    <message>
+        <source>Unable to prepare statement</source>
+        <translation>不能准备语句</translation>
+    </message>
+    <message>
+        <source>Query results lost - probably discarded on executing another SQL query.</source>
+        <translation>查询结果丢失 - 可能在执行另一个 SQL 查询时被丢弃。</translation>
+    </message>
+    <message>
+        <source>Unable to get result</source>
+        <translation>不能获取结果</translation>
+    </message>
+    <message>
+        <source>Unable to create query</source>
+        <translation>不能创建查询</translation>
+    </message>
+    <message>
+        <source>Unable to send query</source>
+        <translation>不能发送查询</translation>
+    </message>
+</context>
+<context>
+    <name>QFileDevice</name>
+    <message>
+        <source>No file engine available or engine does not support UnMapExtension</source>
+        <translation>没有可用的文件引擎或引擎不支持UnMapExtension</translation>
+    </message>
+    <message>
+        <source>No file engine available</source>
+        <translation>没有可用的文件引擎</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkSession</name>
+    <message>
+        <source>Invalid configuration.</source>
+        <translation>无效的配置。</translation>
+    </message>
+</context>
+<context>
+    <name>QUdpSocket</name>
+    <message>
+        <source>No datagram available for reading</source>
+        <translation>没有可供读取的数据报</translation>
+    </message>
+    <message>
+        <source>Unable to send a datagram</source>
+        <translation>无法发送数据报</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessDataBackend</name>
+    <message>
+        <source>Invalid URI: %1</source>
+        <translation>无效的 URI:%1</translation>
+    </message>
+</context>
+<context>
+    <name>QWindowsDirect2DIntegration</name>
+    <message>
+        <source>Qt cannot load the direct2d platform plugin because the Direct2D version on this system is too old. The minimum system requirement for this platform plugin is Windows 7 SP1 with Platform Update.
+
+The minimum Direct2D version required is %1. The Direct2D version on this system is %2.</source>
+        <translation>Qt 无法加载 direct2d 平台插件,因为此系统上的 Direct2D 版本太旧了。此平台插件的最低系统要求是带有平台更新的 Windows 7 SP1。
+
+所需的最低 Direct2D 版本为 %1。此系统上的Direct2D版本为 %2。</translation>
+    </message>
+    <message>
+        <source>Cannot load direct2d platform plugin</source>
+        <translation>无法加载 direct2d 平台插件</translation>
+    </message>
+</context>
+<context>
+    <name>QKeySequenceEdit</name>
+    <message>
+        <source>Press shortcut</source>
+        <translation>按快捷方式</translation>
+    </message>
+    <message>
+        <source>%1, ...</source>
+        <translation>%1, ...</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessDebugPipeBackend</name>
+    <message>
+        <source>Socket error on %1: %2</source>
+        <translation>%1 上的套接字错误:%2</translation>
+    </message>
+    <message>
+        <source>Remote host closed the connection prematurely on %1</source>
+        <translation>远程主机过早地关闭了在 %1 上的这个连接</translation>
+    </message>
+    <message>
+        <source>Write error writing to %1: %2</source>
+        <translation>写入 %1 错误:%2</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkAccessFileBackend</name>
+    <message>
+        <source>Request for opening non-local file %1</source>
+        <translation>正在打开非本地文件 %1 的请求</translation>
+    </message>
+    <message>
+        <source>Read error reading from %1: %2</source>
+        <translation>读取 %1 错误:%2</translation>
+    </message>
+    <message>
+        <source>Cannot open %1: Path is a directory</source>
+        <translation>无法打开 %1:路径是一个目录</translation>
+    </message>
+    <message>
+        <source>Error opening %1: %2</source>
+        <translation>打开 %1 错误:%2</translation>
+    </message>
+    <message>
+        <source>Write error writing to %1: %2</source>
+        <translation>写入 %1 错误:%2</translation>
+    </message>
+</context>
+<context>
+    <name>QHostInfo</name>
+    <message>
+        <source>No host name given</source>
+        <translation>未指定主机名</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+</context>
+<context>
+    <name>QNetworkReplyImpl</name>
+    <message>
+        <source>Operation canceled</source>
+        <translation>操作被取消</translation>
+    </message>
+</context>
+<context>
+    <name>QStateMachine</name>
+    <message>
+        <source>Missing default state in history state &apos;%1&apos;</source>
+        <translation>历史记录状态“%1”中缺少默认状态</translation>
+    </message>
+    <message>
+        <source>Unknown error</source>
+        <translation>未知错误</translation>
+    </message>
+    <message>
+        <source>Missing initial state in compound state &apos;%1&apos;</source>
+        <translation>复合状态“%1”中缺少初始状态</translation>
+    </message>
+    <message>
+        <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
+        <translation>没有用于目标和源从状态“%1”转换的共同祖先</translation>
+    </message>
+</context>
+<context>
+    <name>QMdiArea</name>
+    <message>
+        <source>(Untitled)</source>
+        <translation>(无标题)</translation>
+    </message>
+</context>
+<context>
+    <name>QApplication</name>
+    <message>
+        <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+        <translation>执行“%1”需要 Qt %2,只找到了 Qt %3。</translation>
+    </message>
+    <message>
+        <source>Incompatible Qt Library Error</source>
+        <translation>不兼容的 Qt 库错误</translation>
+    </message>
+</context>
+<context>
+    <name>QDtlsClientVerifier</name>
+    <message>
+        <source>BIO_ADDR_new failed, ignoring client hello</source>
+        <translation>BIO_ADDR_new 失败,忽略客户端 hello</translation>
+    </message>
+    <message>
+        <source>A valid UDP socket, non-empty datagram, valid address/port were expected</source>
+        <translation>需要有效的 UDP 套接字、非空数据报和有效的地址/端口</translation>
+    </message>
+</context>
+<context>
+    <name>QCocoaTheme</name>
+    <message>
+        <source>Don&apos;t Save</source>
+        <translation>不保存</translation>
+    </message>
+</context>
+<context>
+    <name>QDnsLookup</name>
+    <message>
+        <source>Operation cancelled</source>
+        <translation>操作被取消</translation>
+    </message>
+</context>
+<context>
+    <name>QTcpServer</name>
+    <message>
+        <source>Operation on socket is not supported</source>
+        <translation>套接字操作不被支持</translation>
+    </message>
+</context>
+</TS>

+ 7 - 0
common/LHColorDialog/resource.qrc

@@ -0,0 +1,7 @@
+<RCC>
+    <qresource prefix="/">
+        <file>skins/bright.qss</file>
+        <file>skins/dark.qss</file>
+        <file>qt_zh_CN.qm</file>
+    </qresource>
+</RCC>

+ 81 - 0
common/LHColorDialog/skins/bright.qss

@@ -0,0 +1,81 @@
+* {
+    outline: none;
+}
+
+QColorDialog {
+	background: #F5F6F6;
+	/*border: 1px solid transparent;*/
+	border-radius: 8px;
+}
+
+QColorDialog QLabel {
+	color:#27264D;
+}
+
+
+QColorDialog QPushButton {
+	border: 1px solid rgba(39,38,77,0.2);
+	color: #27264D;
+	min-height: 32px;
+        min-width: 60px;
+	border-radius: 4px;
+}
+
+QColorDialog QPushButton::hover {
+        background: #ffffff;
+}
+
+QColorDialog QLineEdit {
+	border: 1px solid rgba(39,38,77,0.2);
+	border-radius: 4px;
+	color: #27264D;
+	font-size: 14px;
+	padding-left: 8px;
+	min-height: 24px;
+        background: #ffffff;
+}
+QColorDialog QLineEdit:focus {
+        border: 1px solid #438Eff;
+}
+
+QColorDialog QSpinBox {
+	border: 1px solid rgba(39,38,77,0.2);
+	border-radius: 4px;
+	padding-left: 8px;
+	color: #27264D;
+	font-size: 14px;
+	min-height: 24px;
+}
+QColorDialog QSpinBox:focus {
+        border: 1px solid #438Eff;
+}
+
+QPushButton#btn_ok {
+    border-radius: 16px;
+    border: none;
+    color: #ffffff;
+    /*margin-left: 10px;*/
+    background: #438EFF;
+}
+QPushButton#btn_ok:hover {
+    border-radius: 16px;
+    background: #5F9EFF;
+}
+QPushButton#btn_cancel {
+    border-radius: 16px;
+}
+QPushButton#btn_cancel:hover {
+    background: #ffffff;
+}
+QPushButton#empty {
+    border: none;
+    border-radius: 0px;
+    background: transparent;
+    max-width: 0px;
+    min-width: 0px;
+}
+
+QWellArray {
+    outline: 2px solid #E9A112;
+    outline-radius: 4px;
+}

+ 100 - 0
common/LHColorDialog/skins/dark.qss

@@ -0,0 +1,100 @@
+* {
+    outline: none;
+}
+
+QColorDialog {
+	background: #34363A;
+        border: 1px solid rgba(255,255,255,0.2);
+	border-radius: 8px;
+}
+
+QColorDialog QWidget {
+	background: transparent;
+        color: #ffffff;/*前景色*/
+}
+
+QColorDialog QLabel {
+	color: #EBEBEB;
+}
+
+QColorDialog QPushButton {
+        background: transparent;
+        border: 1px solid #666666;
+        color: #EBEBEB;
+	min-height: 32px;
+	min-width: 64px;
+	border-radius: 4px;
+}
+
+QColorDialog QPushButton:hover {
+        color: #EBEBEB;
+	border-radius: 4px;
+        border: 1px solid #666666;
+        background: rgba(0, 0, 0, 0.15);
+}
+
+QColorDialog QLineEdit {
+	background: #34363A;
+	border: 1px solid #666666;
+	border-radius: 4px;
+	color: #EBEBEB;
+	font-size: 14px;
+	padding-left: 8px;
+	min-height: 24px;
+}
+QColorDialog QLineEdit:focus {
+	border: 1px solid #438Eff;
+}
+
+QColorDialog QSpinBox {
+	background: #34363A;
+	border: 1px solid #666666;
+	border-radius: 4px;
+	padding-left: 8px;
+	color: #EBEBEB;
+	font-size: 14px;
+	min-height: 24px;
+}
+QColorDialog QSpinBox:focus {
+	border: 1px solid #438Eff;
+}
+/*
+QColorDialog QSpinBox::up-button {
+	border-radius: 2px;
+}
+QColorDialog QSpinBox::down-button {
+	border-radius: 2px;
+}*/
+
+QPushButton#btn_ok {
+    border-radius: 16px;
+    border: none;
+    color: #ffffff;
+    /*margin-left: 10px;*/
+    background: #438EFF;
+}
+QPushButton#btn_ok:hover {
+    border-radius: 16px;
+    background: #5F9EFF;
+}
+
+QPushButton#btn_cancel {
+    border-radius: 16px;
+    /*margin-left: 8px;*/
+}
+QPushButton#btn_cancel:hover {
+    border-radius: 16px;
+}
+
+QPushButton#empty {
+    border: none;
+    border-radius: 0px;
+    background: transparent;
+    max-width: 0px;
+    min-width: 0px;
+}
+
+QWellArray {
+    outline: 2px solid #E9A112;
+    outline-radius: 4px;
+}

+ 0 - 0
common/CurlFtp/CurlFtp.cpp → module/CurlFtp/CurlFtp.cpp


+ 0 - 0
common/CurlFtp/CurlFtp.h → module/CurlFtp/CurlFtp.h


+ 0 - 0
common/CurlFtp/CurlFtpInfo.h → module/CurlFtp/CurlFtpInfo.h


+ 0 - 0
common/CurlHttp/CurlHttp.cpp → module/CurlHttp/CurlHttp.cpp


+ 0 - 0
common/CurlHttp/CurlHttp.h → module/CurlHttp/CurlHttp.h


+ 0 - 0
common/FmtLog/fmtlog.h → module/FmtLog/fmtlog.h


+ 0 - 0
common/LightLog/LightLog.cpp → module/LightLog/LightLog.cpp


+ 0 - 0
common/LightLog/LightLog.h → module/LightLog/LightLog.h


+ 0 - 0
common/Logs/loginit.cpp → module/Logs/loginit.cpp


+ 0 - 0
common/Logs/loginit.h → module/Logs/loginit.h


+ 0 - 0
common/OneThread/OneThread.cpp → module/OneThread/OneThread.cpp


+ 0 - 0
common/OneThread/OneThread.h → module/OneThread/OneThread.h


+ 0 - 0
common/RingQueue/RingQueue.hpp → module/RingQueue/RingQueue.hpp


+ 0 - 0
common/StdLog/stdlog.h → module/StdLog/stdlog.h


+ 0 - 0
common/ThreadPool/ThreadPool.cpp → module/ThreadPool/ThreadPool.cpp


+ 0 - 0
common/ThreadPool/ThreadPool.h → module/ThreadPool/ThreadPool.h


+ 0 - 0
common/ThreadPool/ThreadPool_fmtlog.cpp_ → module/ThreadPool/ThreadPool_fmtlog.cpp_


+ 0 - 0
common/ThreadPool/ThreadPool_fmtlog.h_ → module/ThreadPool/ThreadPool_fmtlog.h_


+ 0 - 0
common/ThreadPool/ThreadPool_spdlog.cpp_ → module/ThreadPool/ThreadPool_spdlog.cpp_


+ 0 - 0
common/ThreadPool/ThreadPool_spdlog.h_ → module/ThreadPool/ThreadPool_spdlog.h_


+ 0 - 0
common/Timer/TWTimer.hpp → module/Timer/TWTimer.hpp


+ 0 - 0
common/Timer/tw.cpp → module/Timer/tw.cpp


+ 0 - 0
common/Timer/tw.h → module/Timer/tw.h


+ 0 - 0
common/VideoPlayer/DecodeVedio.cpp → module/VideoPlayer/DecodeVedio.cpp


+ 0 - 0
common/VideoPlayer/DecodeVedio.h → module/VideoPlayer/DecodeVedio.h


+ 0 - 0
common/VideoPlayer/VideoPlayer.cpp → module/VideoPlayer/VideoPlayer.cpp


+ 0 - 0
common/VideoPlayer/VideoPlayer.h → module/VideoPlayer/VideoPlayer.h


+ 0 - 0
common/ftp/QtFtp.cpp → module/ftp/QtFtp.cpp


+ 0 - 0
common/ftp/QtFtp.h → module/ftp/QtFtp.h


+ 0 - 0
common/http/QtHttps.cpp → module/http/QtHttps.cpp


+ 0 - 0
common/http/QtHttps.h → module/http/QtHttps.h


+ 124 - 124
common/mqtt/MQTTBase.cpp → module/mqtt/MQTTBase.cpp

@@ -1,124 +1,124 @@
-#include "MQTTBase.h"
-
-#include <QDebug>
-
-
-#include "qmqtt_message.h"
-
-
-MQTTBase::MQTTBase(QObject* parent) : QObject(parent)
-{
-    /* 获取日志 */
-    m_logger = spdlog::get("MQTT");
-    if(m_logger == nullptr)
-    {
-        SPDLOG_ERROR("获取MQTT logger 失败!");
-        exit(-1);
-    }
-
-    /* 连接信号和槽 */
-    connect(&m_client,SIGNAL(connected()),this,SLOT(do_connected()));
-    connect(&m_client,SIGNAL(disconnected()),this,SLOT(do_disconnect()));
-    connect(&m_client,SIGNAL(error(QMQTT::ClientError)),this,SLOT(do_error(QMQTT::ClientError)));
-    connect(&m_client,SIGNAL(subscribed(QString,quint8)),this,SLOT(do_subscribed(QString, quint8)));
-
-    connect(&m_client,SIGNAL(received(QMQTT::Message)),this,SLOT(do_received(QMQTT::Message)));
-}
-
-/* 设置地址 */
-void MQTTBase::setIPAndPort(const QString& IP, int port)
-{
-    m_mqttIP = IP;
-    m_mqttPort = port;
-    QHostAddress addr = QHostAddress(IP);
-    m_client.setHost(addr);
-    m_client.setPort(port);
-}
-
-/* 设置订阅 */
-void MQTTBase::addSubcribe(const QString& topic, int qos)
-{
-    if(qos > 2)
-    {
-        SPDLOG_LOGGER_ERROR(m_logger,"QoS值不合法:{}", qos);
-        return;
-    }
-    if(m_isConnected)
-    {
-        /* 已连接到MQTT,之前添加的主题已经订阅,现在添加的也直接添加订阅 */
-        m_client.subscribe(topic, qos);
-        m_mapTopic.insert(topic, qos);
-    }else 
-    {
-        /* 还未连接到MQTT,直接加入到订阅列表 */
-        m_mapTopic.insert(topic, qos);
-    }
-}
-
-/* 设置自动重连 */
-void MQTTBase::setAutoReconnect(bool isAuto)
-{
-    m_client.setAutoReconnect(isAuto);
-}
-
-/* 连接到服务器 */
-void MQTTBase::connectToServer()
-{
-    m_client.connectToHost();
-}
-
-/* 发送消息 */
-void MQTTBase::sendMessage(const QString& topic, const QByteArray& message, int qos)
-{
-    if(m_isConnected == false)
-    {
-        SPDLOG_LOGGER_ERROR(m_logger,"MQTT未连接到服务器,发送消息失败");
-        return;
-    }
-    QMQTT::Message msg(0, topic, message, qos);
-    auto ret = m_client.publish(msg);
-    if(ret != 0)
-    {
-        SPDLOG_LOGGER_ERROR(m_logger,"发送消息失败:{}, 错误代码:{}", topic.toStdString(), ret);
-    }
-}
-
-
-/* 连接成功 */
-void MQTTBase::do_connected()
-{
-    SPDLOG_LOGGER_INFO(m_logger,"MQTT IP:{} ,Port:{} 连接成功!", m_mqttIP.toStdString(), m_mqttPort);
-    m_isConnected = true;
-    /* 订阅所有的主题 */
-    for(auto& it : m_mapTopic.keys())
-    {
-        auto qos = m_mapTopic.value(it);
-        m_client.subscribe(it, qos);
-    }
-}
-
-/* 断开连接 */
-void MQTTBase::do_disconnect()
-{
-    SPDLOG_LOGGER_INFO(m_logger,"断开连接!");
-}
-
-/* 错误 */
-void MQTTBase::do_error(const QMQTT::ClientError error)
-{
-    SPDLOG_LOGGER_ERROR(m_logger,"错误:{}", (int)error);
-}
-
-/* 订阅成功 */
-void MQTTBase::do_subscribed(const QString& topic, const quint8 qos)
-{
-    SPDLOG_LOGGER_INFO(m_logger,"订阅:{}, QoS:{} 成功", topic.toStdString(), qos);
-}
-
-/* 接收到消息 */
-void MQTTBase::do_received(const QMQTT::Message& message)
-{
-    // SPDLOG_LOGGER_INFO(m_logger,"MQTTBase接收到一条消息:{}", message.topic().toStdString());
-    recvMessage(message);
-}
-
+#include "MQTTBase.h"
+
+#include <QDebug>
+
+
+#include "qmqtt_message.h"
+
+
+MQTTBase::MQTTBase(QObject* parent) : QObject(parent)
+{
+    /* 获取日志 */
+    m_logger = spdlog::get("MQTT");
+    if(m_logger == nullptr)
+    {
+        SPDLOG_ERROR("获取MQTT logger 失败!");
+        exit(-1);
+    }
+
+    /* 连接信号和槽 */
+    connect(&m_client,SIGNAL(connected()),this,SLOT(do_connected()));
+    connect(&m_client,SIGNAL(disconnected()),this,SLOT(do_disconnect()));
+    connect(&m_client,SIGNAL(error(QMQTT::ClientError)),this,SLOT(do_error(QMQTT::ClientError)));
+    connect(&m_client,SIGNAL(subscribed(QString,quint8)),this,SLOT(do_subscribed(QString, quint8)));
+
+    connect(&m_client,SIGNAL(received(QMQTT::Message)),this,SLOT(do_received(QMQTT::Message)));
+}
+
+/* 设置地址 */
+void MQTTBase::setIPAndPort(const QString& IP, int port)
+{
+    m_mqttIP = IP;
+    m_mqttPort = port;
+    QHostAddress addr = QHostAddress(IP);
+    m_client.setHost(addr);
+    m_client.setPort(port);
+}
+
+/* 设置订阅 */
+void MQTTBase::addSubcribe(const QString& topic, int qos)
+{
+    if(qos > 2)
+    {
+        SPDLOG_LOGGER_ERROR(m_logger,"QoS值不合法:{}", qos);
+        return;
+    }
+    if(m_isConnected)
+    {
+        /* 已连接到MQTT,之前添加的主题已经订阅,现在添加的也直接添加订阅 */
+        m_client.subscribe(topic, qos);
+        m_mapTopic.insert(topic, qos);
+    }else 
+    {
+        /* 还未连接到MQTT,直接加入到订阅列表 */
+        m_mapTopic.insert(topic, qos);
+    }
+}
+
+/* 设置自动重连 */
+void MQTTBase::setAutoReconnect(bool isAuto)
+{
+    m_client.setAutoReconnect(isAuto);
+}
+
+/* 连接到服务器 */
+void MQTTBase::connectToServer()
+{
+    m_client.connectToHost();
+}
+
+/* 发送消息 */
+void MQTTBase::sendMessage(const QString& topic, const QByteArray& message, int qos)
+{
+    if(m_isConnected == false)
+    {
+        SPDLOG_LOGGER_ERROR(m_logger,"MQTT未连接到服务器,发送消息失败");
+        return;
+    }
+    QMQTT::Message msg(0, topic, message, qos);
+    auto ret = m_client.publish(msg);
+    if(ret != 0)
+    {
+        SPDLOG_LOGGER_ERROR(m_logger,"发送消息失败:{}, 错误代码:{}", topic.toStdString(), ret);
+    }
+}
+
+
+/* 连接成功 */
+void MQTTBase::do_connected()
+{
+    SPDLOG_LOGGER_INFO(m_logger,"MQTT IP:{} ,Port:{} 连接成功!", m_mqttIP.toStdString(), m_mqttPort);
+    m_isConnected = true;
+    /* 订阅所有的主题 */
+    for(auto& it : m_mapTopic.keys())
+    {
+        auto qos = m_mapTopic.value(it);
+        m_client.subscribe(it, qos);
+    }
+}
+
+/* 断开连接 */
+void MQTTBase::do_disconnect()
+{
+    SPDLOG_LOGGER_INFO(m_logger,"断开连接!");
+}
+
+/* 错误 */
+void MQTTBase::do_error(const QMQTT::ClientError error)
+{
+    SPDLOG_LOGGER_ERROR(m_logger,"错误:{}", (int)error);
+}
+
+/* 订阅成功 */
+void MQTTBase::do_subscribed(const QString& topic, const quint8 qos)
+{
+    SPDLOG_LOGGER_INFO(m_logger,"订阅:{}, QoS:{} 成功", topic.toStdString(), qos);
+}
+
+/* 接收到消息 */
+void MQTTBase::do_received(const QMQTT::Message& message)
+{
+    // SPDLOG_LOGGER_INFO(m_logger,"MQTTBase接收到一条消息:{}", message.topic().toStdString());
+    recvMessage(message);
+}
+

+ 64 - 64
common/mqtt/MQTTBase.h → module/mqtt/MQTTBase.h

@@ -1,64 +1,64 @@
-#ifndef MQTTBase_H
-#define MQTTBase_H
-
-#include <QObject>
-#include <QMap>
-
-#include "qmqtt.h"
-#include "spdlog/spdlog.h"
-
-
-/**
- * 使用说明:
- *      1. 子类可以继承这个类,重新实现 recvMessage 函数,这个函数是接收到消息的回调函数
- *      2. 使用SPDLOG日志库,需要注册一个名为“MQTT”的logger
- */
-
-
-
-class MQTTBase : public QObject
-{
-    Q_OBJECT
-public:
-    MQTTBase(QObject* parent = nullptr);
-
-    /* 设置地址 */
-    void setIPAndPort(const QString& IP, int port = 1883);
-    /* 设置订阅 */
-    void addSubcribe(const QString& topic,int qos = 0);
-    /* 设置自动重连 */
-    void setAutoReconnect(bool isAuto = true);
-    /* 连接到服务器 */
-    void connectToServer();
-    /* 发送消息 */
-    void sendMessage(const QString& topic, const QByteArray& message, int qos = 0);
-    
-signals:
-    /* 接收到消息,对消息进行了转发 */
-    void signal_recvMessage(const QString& message);
-
-protected:
-    /* 接收到消息,子类继承这个解析消息数据 */
-    virtual void recvMessage(const QMQTT::Message& message) = 0;
-
-protected slots:
-    void do_connected();                            /* 连接成功 */
-    void do_disconnect();                           /* 断开连接 */
-    void do_error(const QMQTT::ClientError error);  /* 错误 */
-    void do_subscribed(const QString& topic, const quint8 qos);     /* 订阅成功 */
-
-    void do_received(const QMQTT::Message& message);/* 接收到消息,子类继承这个解析消息数据 */
-
-
-protected:
-    std::shared_ptr<spdlog::logger> m_logger = nullptr;
-    bool m_isConnected = false;                     /* 是否连接成功 */
-    QString m_mqttIP;                               /* MQTT服务器IP */
-    int m_mqttPort;                                 /* MQTT服务器端口 */
-
-    QMap<QString, int> m_mapTopic;                  /* 订阅的主题和QOS */
-    QMQTT::Client m_client;                         /* MQTT客户端 */
-};
-
-
-#endif /* MQTTBase_H */
+#ifndef MQTTBase_H
+#define MQTTBase_H
+
+#include <QObject>
+#include <QMap>
+
+#include "qmqtt.h"
+#include "spdlog/spdlog.h"
+
+
+/**
+ * 使用说明:
+ *      1. 子类可以继承这个类,重新实现 recvMessage 函数,这个函数是接收到消息的回调函数
+ *      2. 使用SPDLOG日志库,需要注册一个名为“MQTT”的logger
+ */
+
+
+
+class MQTTBase : public QObject
+{
+    Q_OBJECT
+public:
+    MQTTBase(QObject* parent = nullptr);
+
+    /* 设置地址 */
+    void setIPAndPort(const QString& IP, int port = 1883);
+    /* 设置订阅 */
+    void addSubcribe(const QString& topic,int qos = 0);
+    /* 设置自动重连 */
+    void setAutoReconnect(bool isAuto = true);
+    /* 连接到服务器 */
+    void connectToServer();
+    /* 发送消息 */
+    void sendMessage(const QString& topic, const QByteArray& message, int qos = 0);
+    
+signals:
+    /* 接收到消息,对消息进行了转发 */
+    void signal_recvMessage(const QString& message);
+
+protected:
+    /* 接收到消息,子类继承这个解析消息数据 */
+    virtual void recvMessage(const QMQTT::Message& message) = 0;
+
+protected slots:
+    void do_connected();                            /* 连接成功 */
+    void do_disconnect();                           /* 断开连接 */
+    void do_error(const QMQTT::ClientError error);  /* 错误 */
+    void do_subscribed(const QString& topic, const quint8 qos);     /* 订阅成功 */
+
+    void do_received(const QMQTT::Message& message);/* 接收到消息,子类继承这个解析消息数据 */
+
+
+protected:
+    std::shared_ptr<spdlog::logger> m_logger = nullptr;
+    bool m_isConnected = false;                     /* 是否连接成功 */
+    QString m_mqttIP;                               /* MQTT服务器IP */
+    int m_mqttPort;                                 /* MQTT服务器端口 */
+
+    QMap<QString, int> m_mapTopic;                  /* 订阅的主题和QOS */
+    QMQTT::Client m_client;                         /* MQTT客户端 */
+};
+
+
+#endif /* MQTTBase_H */

+ 0 - 0
common/nlohmann/adl_serializer.hpp → module/nlohmann/adl_serializer.hpp


+ 0 - 0
common/nlohmann/byte_container_with_subtype.hpp → module/nlohmann/byte_container_with_subtype.hpp


+ 0 - 0
common/nlohmann/detail/abi_macros.hpp → module/nlohmann/detail/abi_macros.hpp


+ 0 - 0
common/nlohmann/detail/conversions/from_json.hpp → module/nlohmann/detail/conversions/from_json.hpp


+ 0 - 0
common/nlohmann/detail/conversions/to_chars.hpp → module/nlohmann/detail/conversions/to_chars.hpp


+ 0 - 0
common/nlohmann/detail/conversions/to_json.hpp → module/nlohmann/detail/conversions/to_json.hpp


+ 0 - 0
common/nlohmann/detail/exceptions.hpp → module/nlohmann/detail/exceptions.hpp


+ 0 - 0
common/nlohmann/detail/hash.hpp → module/nlohmann/detail/hash.hpp


+ 0 - 0
common/nlohmann/detail/input/binary_reader.hpp → module/nlohmann/detail/input/binary_reader.hpp


+ 0 - 0
common/nlohmann/detail/input/input_adapters.hpp → module/nlohmann/detail/input/input_adapters.hpp


+ 0 - 0
common/nlohmann/detail/input/json_sax.hpp → module/nlohmann/detail/input/json_sax.hpp


+ 0 - 0
common/nlohmann/detail/input/lexer.hpp → module/nlohmann/detail/input/lexer.hpp


+ 0 - 0
common/nlohmann/detail/input/parser.hpp → module/nlohmann/detail/input/parser.hpp


+ 0 - 0
common/nlohmann/detail/input/position_t.hpp → module/nlohmann/detail/input/position_t.hpp


+ 0 - 0
common/nlohmann/detail/iterators/internal_iterator.hpp → module/nlohmann/detail/iterators/internal_iterator.hpp


+ 0 - 0
common/nlohmann/detail/iterators/iter_impl.hpp → module/nlohmann/detail/iterators/iter_impl.hpp


+ 0 - 0
common/nlohmann/detail/iterators/iteration_proxy.hpp → module/nlohmann/detail/iterators/iteration_proxy.hpp


+ 0 - 0
common/nlohmann/detail/iterators/iterator_traits.hpp → module/nlohmann/detail/iterators/iterator_traits.hpp


+ 0 - 0
common/nlohmann/detail/iterators/json_reverse_iterator.hpp → module/nlohmann/detail/iterators/json_reverse_iterator.hpp


+ 0 - 0
common/nlohmann/detail/iterators/primitive_iterator.hpp → module/nlohmann/detail/iterators/primitive_iterator.hpp


+ 0 - 0
common/nlohmann/detail/json_custom_base_class.hpp → module/nlohmann/detail/json_custom_base_class.hpp


+ 0 - 0
common/nlohmann/detail/json_pointer.hpp → module/nlohmann/detail/json_pointer.hpp


+ 0 - 0
common/nlohmann/detail/json_ref.hpp → module/nlohmann/detail/json_ref.hpp


+ 0 - 0
common/nlohmann/detail/macro_scope.hpp → module/nlohmann/detail/macro_scope.hpp


+ 0 - 0
common/nlohmann/detail/macro_unscope.hpp → module/nlohmann/detail/macro_unscope.hpp


+ 0 - 0
common/nlohmann/detail/meta/call_std/begin.hpp → module/nlohmann/detail/meta/call_std/begin.hpp


+ 0 - 0
common/nlohmann/detail/meta/call_std/end.hpp → module/nlohmann/detail/meta/call_std/end.hpp


+ 0 - 0
common/nlohmann/detail/meta/cpp_future.hpp → module/nlohmann/detail/meta/cpp_future.hpp


+ 0 - 0
common/nlohmann/detail/meta/detected.hpp → module/nlohmann/detail/meta/detected.hpp


+ 0 - 0
common/nlohmann/detail/meta/identity_tag.hpp → module/nlohmann/detail/meta/identity_tag.hpp


+ 0 - 0
common/nlohmann/detail/meta/is_sax.hpp → module/nlohmann/detail/meta/is_sax.hpp


+ 0 - 0
common/nlohmann/detail/meta/std_fs.hpp → module/nlohmann/detail/meta/std_fs.hpp


+ 0 - 0
common/nlohmann/detail/meta/type_traits.hpp → module/nlohmann/detail/meta/type_traits.hpp


+ 0 - 0
common/nlohmann/detail/meta/void_t.hpp → module/nlohmann/detail/meta/void_t.hpp


+ 0 - 0
common/nlohmann/detail/output/binary_writer.hpp → module/nlohmann/detail/output/binary_writer.hpp


+ 0 - 0
common/nlohmann/detail/output/output_adapters.hpp → module/nlohmann/detail/output/output_adapters.hpp


+ 0 - 0
common/nlohmann/detail/output/serializer.hpp → module/nlohmann/detail/output/serializer.hpp


+ 0 - 0
common/nlohmann/detail/string_concat.hpp → module/nlohmann/detail/string_concat.hpp


+ 0 - 0
common/nlohmann/detail/string_escape.hpp → module/nlohmann/detail/string_escape.hpp


+ 0 - 0
common/nlohmann/detail/value_t.hpp → module/nlohmann/detail/value_t.hpp


+ 0 - 0
common/nlohmann/json.hpp → module/nlohmann/json.hpp


+ 0 - 0
common/nlohmann/json_fwd.hpp → module/nlohmann/json_fwd.hpp


+ 0 - 0
common/nlohmann/ordered_map.hpp → module/nlohmann/ordered_map.hpp


+ 0 - 0
common/nlohmann/thirdparty/hedley/hedley.hpp → module/nlohmann/thirdparty/hedley/hedley.hpp


+ 0 - 0
common/nlohmann/thirdparty/hedley/hedley_undef.hpp → module/nlohmann/thirdparty/hedley/hedley_undef.hpp