diff --git a/LedOK/LedOK.pro b/LedOK/LedOK.pro index b937a77..f73c6d7 100644 --- a/LedOK/LedOK.pro +++ b/LedOK/LedOK.pro @@ -46,11 +46,10 @@ osx { ICON = res/Logo-raw.png } -RESOURCES += res.qrc - copydir.files += AClock copydir.files += borders +copydir.files += translations copydir.files += $$quote(y50 param) copydir.files += $$quote(files) @@ -93,6 +92,7 @@ qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target +RESOURCES += res.qrc SOURCES += \ base/changepasswordform.cpp \ @@ -103,7 +103,7 @@ SOURCES += \ base/lodateselector.cpp \ base/loqtitlebar.cpp \ base/loqtreewidget.cpp \ - base/waitingdlg.cpp \ + gutil/qwaitingdlg.cpp \ basedlg.cpp \ basewin.cpp \ cfg.cpp \ @@ -117,6 +117,7 @@ SOURCES += \ devicepanel.cpp \ ffplayer.cpp \ globaldefine.cpp \ + gutil/cpp.cpp \ gutil/qgui.cpp \ gutil/qjson.cpp \ gutil/qnetwork.cpp \ @@ -142,7 +143,6 @@ SOURCES += \ device/ctrlbrightpanel.cpp \ device/ctrlverifyclockpanel.cpp \ device/upgradeapkdialog.cpp \ - device/wupgradeapkitem.cpp \ program/copydirthread.cpp \ program/eaclock.cpp \ program/ebase.cpp \ @@ -158,14 +158,11 @@ SOURCES += \ program/gentmpthread.cpp \ program/pageeditor.cpp \ program/pagelistitem.cpp \ - program/progcreatedlg.cpp \ program/progeditorwin.cpp \ program/progitem.cpp \ program/sendprogramdialog.cpp \ program/sendprogthread.cpp \ program/videosplitthread.cpp \ - program/wplanitem.cpp \ - program/wplanlist.cpp \ HEADERS += \ base/changepasswordform.h \ @@ -175,7 +172,7 @@ HEADERS += \ base/lodateselector.h \ base/loqtitlebar.h \ base/loqtreewidget.h \ - base/waitingdlg.h \ + gutil/qwaitingdlg.h \ basedlg.h \ basewin.h \ cfg.h \ @@ -189,6 +186,7 @@ HEADERS += \ devicepanel.h \ ffplayer.h \ globaldefine.h \ + gutil/cpp.h \ gutil/qgui.h \ gutil/qjson.h \ gutil/qnetwork.h \ @@ -213,7 +211,6 @@ HEADERS += \ device/ctrlbrightpanel.h \ device/ctrlverifyclockpanel.h \ device/upgradeapkdialog.h \ - device/wupgradeapkitem.h \ program/copydirthread.h \ program/eaclock.h \ program/ebase.h \ @@ -229,25 +226,17 @@ HEADERS += \ program/gentmpthread.h \ program/pageeditor.h \ program/pagelistitem.h \ - program/progcreatedlg.h \ program/progeditorwin.h \ program/progitem.h \ program/sendprogramdialog.h \ program/sendprogthread.h \ program/videosplitthread.h \ - program/wplanitem.h \ - program/wplanlist.h \ TRANSLATIONS += \ - translations/app_zh_CN.ts \ - translations/app_zh_TW.ts \ - translations/app_ja.ts \ - translations/app_en.ts - -EXTRA_TRANSLATIONS += \ - translations/qt_zh_CN.ts \ - translations/qt_zh_TW.ts \ - translations/qt_ja.ts \ - translations/qt_en.ts + ts/app_zh_CN.ts \ + ts/app_zh_TW.ts \ + ts/app_en.ts \ + ts/app_ja.ts \ + ts/app_pt.ts include(./xlsx/qtxlsx.pri) diff --git a/LedOK/QzcnuZ.json b/LedOK/QzcnuZ.json deleted file mode 100644 index f6c23da..0000000 --- a/LedOK/QzcnuZ.json +++ /dev/null @@ -1 +0,0 @@ -[{"excluded":[],"includePaths":["D:/_workspace/qt/LedOK/ffmpeg/include","D:/_workspace/qt/LedOK/xlsx","D:/_workspace/qt/LedOK/JQLibrary/include","D:/_workspace/qt/LedOK/QSimpleUpdater/include","D:/_apps/Qt/5.15.2/msvc2019/include","D:/_apps/Qt/5.15.2/msvc2019/include/QtOpenGL","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebEngineWidgets","D:/_apps/Qt/5.15.2/msvc2019/include/QtPrintSupport","D:/_apps/Qt/5.15.2/msvc2019/include/QtWidgets","D:/_apps/Qt/5.15.2/msvc2019/include/QtMultimedia","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebEngineCore","D:/_apps/Qt/5.15.2/msvc2019/include/QtQuick","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui/5.15.2","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui/5.15.2/QtGui","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui","D:/_apps/Qt/5.15.2/msvc2019/include/QtANGLE","D:/_apps/Qt/5.15.2/msvc2019/include/QtQmlModels","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebChannel","D:/_apps/Qt/5.15.2/msvc2019/include/QtQml","D:/_apps/Qt/5.15.2/msvc2019/include/QtNetwork","D:/_apps/Qt/5.15.2/msvc2019/include/QtConcurrent","D:/_apps/Qt/5.15.2/msvc2019/include/QtSerialPort","D:/_apps/Qt/5.15.2/msvc2019/include/QtPositioning","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore/5.15.2","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore/5.15.2/QtCore","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore","D:/_workspace/qt/LedOK","D:/_workspace/qt/LedOK"],"projectFile":"D:/_workspace/qt/LedOK/LedOK.pro","sources":["D:/_workspace/qt/LedOK/JQLibrary/include/JQHttpServer.h","D:/_workspace/qt/LedOK/JQLibrary/include/JQNet.h","D:/_workspace/qt/LedOK/JQLibrary/include/jqdeclare.hpp","D:/_workspace/qt/LedOK/JQLibrary/src/JQHttpServer.cpp","D:/_workspace/qt/LedOK/JQLibrary/src/JQNet.cpp","D:/_workspace/qt/LedOK/LoQClass/extendedgroupbox.cpp","D:/_workspace/qt/LedOK/LoQClass/extendedgroupbox.h","D:/_workspace/qt/LedOK/LoQClass/locolorselector.cpp","D:/_workspace/qt/LedOK/LoQClass/locolorselector.h","D:/_workspace/qt/LedOK/LoQClass/lodateselector.cpp","D:/_workspace/qt/LedOK/LoQClass/lodateselector.h","D:/_workspace/qt/LedOK/LoQClass/loqheaderviewcheckbox.cpp","D:/_workspace/qt/LedOK/LoQClass/loqheaderviewcheckbox.h","D:/_workspace/qt/LedOK/LoQClass/loqtitlebar.cpp","D:/_workspace/qt/LedOK/LoQClass/loqtitlebar.h","D:/_workspace/qt/LedOK/LoQClass/loqtreewidget.cpp","D:/_workspace/qt/LedOK/LoQClass/loqtreewidget.h","D:/_workspace/qt/LedOK/LoUIClass/aboutdlg.cpp","D:/_workspace/qt/LedOK/LoUIClass/aboutdlg.h","D:/_workspace/qt/LedOK/LoUIClass/changepasswordform.cpp","D:/_workspace/qt/LedOK/LoUIClass/changepasswordform.h","D:/_workspace/qt/LedOK/LoUIClass/customprogressindicator.cpp","D:/_workspace/qt/LedOK/LoUIClass/customprogressindicator.h","D:/_workspace/qt/LedOK/LoUIClass/loemptydialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/loemptydialog.h","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.h","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.ui","D:/_workspace/qt/LedOK/LoUIClass/qiplineedit.cpp","D:/_workspace/qt/LedOK/LoUIClass/qiplineedit.h","D:/_workspace/qt/LedOK/LoUIClass/softconfigdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/softconfigdialog.h","D:/_workspace/qt/LedOK/LoUIClass/switchcontrol.cpp","D:/_workspace/qt/LedOK/LoUIClass/switchcontrol.h","D:/_workspace/qt/LedOK/LoUIClass/taesclass.cpp","D:/_workspace/qt/LedOK/LoUIClass/taesclass.h","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.h","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.ui","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.h","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.ui","D:/_workspace/qt/LedOK/LoUIClass/x_checkboxdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_checkboxdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_spinboxdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_spinboxdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_timeeditdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_timeeditdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.h","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.ui","D:/_workspace/qt/LedOK/QSimpleUpdater/include/QSimpleUpdater.h","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.h","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.ui","D:/_workspace/qt/LedOK/QSimpleUpdater/src/QSimpleUpdater.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Updater.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Updater.h","D:/_workspace/qt/LedOK/basedlg.cpp","D:/_workspace/qt/LedOK/basedlg.h","D:/_workspace/qt/LedOK/basewin.cpp","D:/_workspace/qt/LedOK/basewin.h","D:/_workspace/qt/LedOK/ccrashstack.cpp","D:/_workspace/qt/LedOK/ccrashstack.h","D:/_workspace/qt/LedOK/cfg.cpp","D:/_workspace/qt/LedOK/cfg.h","D:/_workspace/qt/LedOK/communication/hpptclient.cpp","D:/_workspace/qt/LedOK/communication/hpptclient.h","D:/_workspace/qt/LedOK/communication/network.cpp","D:/_workspace/qt/LedOK/communication/network.h","D:/_workspace/qt/LedOK/communication/taserialthread.cpp","D:/_workspace/qt/LedOK/communication/taserialthread.h","D:/_workspace/qt/LedOK/ffplayer.cpp","D:/_workspace/qt/LedOK/ffplayer.h","D:/_workspace/qt/LedOK/globaldefine.cpp","D:/_workspace/qt/LedOK/globaldefine.h","D:/_workspace/qt/LedOK/gqt.h","D:/_workspace/qt/LedOK/gqueue.h","D:/_workspace/qt/LedOK/main.cpp","D:/_workspace/qt/LedOK/mainwindow.cpp","D:/_workspace/qt/LedOK/mainwindow.h","D:/_workspace/qt/LedOK/mdevicemanager.cpp","D:/_workspace/qt/LedOK/mdevicemanager.h","D:/_workspace/qt/LedOK/mdevicemanager.ui","D:/_workspace/qt/LedOK/mdevicesetting.cpp","D:/_workspace/qt/LedOK/mdevicesetting.h","D:/_workspace/qt/LedOK/mdevicesetting.ui","D:/_workspace/qt/LedOK/mguangyingpinwidget.cpp","D:/_workspace/qt/LedOK/mguangyingpinwidget.h","D:/_workspace/qt/LedOK/mguangyingpinwidget.ui","D:/_workspace/qt/LedOK/mprogrammanager.cpp","D:/_workspace/qt/LedOK/mprogrammanager.h","D:/_workspace/qt/LedOK/mprogrammanager.ui","D:/_workspace/qt/LedOK/mtabwidget.cpp","D:/_workspace/qt/LedOK/mtabwidget.h","D:/_workspace/qt/LedOK/passwordindlg.cpp","D:/_workspace/qt/LedOK/passwordindlg.h","D:/_workspace/qt/LedOK/player/digiclock.cpp","D:/_workspace/qt/LedOK/player/digiclock.h","D:/_workspace/qt/LedOK/player/eleanaclock.cpp","D:/_workspace/qt/LedOK/player/eleanaclock.h","D:/_workspace/qt/LedOK/player/elebase.cpp","D:/_workspace/qt/LedOK/player/elebase.h","D:/_workspace/qt/LedOK/player/eleborder.cpp","D:/_workspace/qt/LedOK/player/eleborder.h","D:/_workspace/qt/LedOK/player/elegif.cpp","D:/_workspace/qt/LedOK/player/elegif.h","D:/_workspace/qt/LedOK/player/eleimg.cpp","D:/_workspace/qt/LedOK/player/eleimg.h","D:/_workspace/qt/LedOK/player/elemultipng.cpp","D:/_workspace/qt/LedOK/player/elemultipng.h","D:/_workspace/qt/LedOK/player/elescroll.cpp","D:/_workspace/qt/LedOK/player/elescroll.h","D:/_workspace/qt/LedOK/player/eletimer.cpp","D:/_workspace/qt/LedOK/player/eletimer.h","D:/_workspace/qt/LedOK/player/elevideo.cpp","D:/_workspace/qt/LedOK/player/elevideo.h","D:/_workspace/qt/LedOK/player/playwin.cpp","D:/_workspace/qt/LedOK/player/playwin.h","D:/_workspace/qt/LedOK/publishform.cpp","D:/_workspace/qt/LedOK/publishform.h","D:/_workspace/qt/LedOK/publishform.ui","D:/_workspace/qt/LedOK/synctimer.cpp","D:/_workspace/qt/LedOK/synctimer.h","D:/_workspace/qt/LedOK/tcpsocket.cpp","D:/_workspace/qt/LedOK/tcpsocket.h","D:/_workspace/qt/LedOK/test.cpp","D:/_workspace/qt/LedOK/tipdialog.cpp","D:/_workspace/qt/LedOK/tipdialog.h","D:/_workspace/qt/LedOK/tipdialog.ui","D:/_workspace/qt/LedOK/tools.cpp","D:/_workspace/qt/LedOK/tools.h","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/ledcard.cpp","D:/_workspace/qt/LedOK/wDevicesManager/ledcard.h","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.cpp","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.h","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.ui","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.cpp","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.h","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.ui","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.cpp","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.h","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.ui","D:/_workspace/qt/LedOK/wDevicesManager/threadupgradeapk.cpp","D:/_workspace/qt/LedOK/wDevicesManager/threadupgradeapk.h","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.cpp","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.h","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.ui","D:/_workspace/qt/LedOK/wDevicesManager/wdevicesitem.cpp","D:/_workspace/qt/LedOK/wDevicesManager/wdevicesitem.h","D:/_workspace/qt/LedOK/wDevicesManager/wupgradeapkitem.cpp","D:/_workspace/qt/LedOK/wDevicesManager/wupgradeapkitem.h","D:/_workspace/qt/LedOK/wProgramManager/mconverter.cpp","D:/_workspace/qt/LedOK/wProgramManager/mconverter.h","D:/_workspace/qt/LedOK/wProgramManager/progeditorwin.cpp","D:/_workspace/qt/LedOK/wProgramManager/progeditorwin.h","D:/_workspace/qt/LedOK/wProgramManager/sendprogramdialog.cpp","D:/_workspace/qt/LedOK/wProgramManager/sendprogramdialog.h","D:/_workspace/qt/LedOK/wProgramManager/sendprogthread.cpp","D:/_workspace/qt/LedOK/wProgramManager/sendprogthread.h","D:/_workspace/qt/LedOK/wProgramManager/threadexportprogrampro.cpp","D:/_workspace/qt/LedOK/wProgramManager/threadexportprogrampro.h","D:/_workspace/qt/LedOK/wProgramManager/usbdetectdialog.cpp","D:/_workspace/qt/LedOK/wProgramManager/usbdetectdialog.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eaclock.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eaclock.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/edclock.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/edclock.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/egif.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/egif.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eobject.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eobject.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ephoto.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ephoto.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etemp.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etemp.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etext.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etext.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etimer.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etimer.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/evideo.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/evideo.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eweb.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eweb.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindow.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindow.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindowattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindowattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wdrawingboard.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wdrawingboard.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitem.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitemwidget.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitemwidget.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpagelist.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpagelist.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanlist.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanlist.h","D:/_workspace/qt/LedOK/wProgramManager/wexportprogramitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wexportprogramitem.h","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.cpp","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.h","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.ui","D:/_workspace/qt/LedOK/wProgramManager/wprogramitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wprogramitem.h","D:/_workspace/qt/LedOK/wProgramManager/wprogrampublishitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wprogrampublishitem.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcell.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcell.h","D:/_workspace/qt/LedOK/xlsx/xlsxcell_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellrange.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellrange.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellreference.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellreference.h","D:/_workspace/qt/LedOK/xlsx/xlsxchart.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxchart.h","D:/_workspace/qt/LedOK/xlsx/xlsxchart_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcolor.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcolor_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting.h","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcontenttypes.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcontenttypes_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation.h","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropsapp.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropsapp_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropscore.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropscore_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocument.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocument.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocument_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdrawing.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdrawing_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdrawinganchor.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdrawinganchor_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxformat.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxformat.h","D:/_workspace/qt/LedOK/xlsx/xlsxformat_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxglobal.h","D:/_workspace/qt/LedOK/xlsx/xlsxmediafile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxmediafile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxnumformatparser.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxnumformatparser_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxrelationships.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxrelationships_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring.h","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxsharedstrings.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxsharedstrings_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxsimpleooxmlfile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxsimpleooxmlfile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxstyles.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxstyles_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxtheme.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxtheme_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxutility.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxutility_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook.h","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxzipreader.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxzipreader_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxzipwriter.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxzipwriter_p.h"],"translations":["D:/_workspace/qt/LedOK/translations/zh_CN.ts","D:/_workspace/qt/LedOK/translations/zh_TW.ts","D:/_workspace/qt/LedOK/translations/ja.ts","D:/_workspace/qt/LedOK/translations/en.ts"]}] diff --git a/LedOK/base/loqtreewidget.cpp b/LedOK/base/loqtreewidget.cpp index 3cc4ae8..9444bc6 100644 --- a/LedOK/base/loqtreewidget.cpp +++ b/LedOK/base/loqtreewidget.cpp @@ -1,65 +1,40 @@ #include "loqtreewidget.h" -#include -#include +#include -class CheckableHeader : public QHeaderView { -public: - explicit CheckableHeader(Qt::Orientation orientation, QWidget *isSelAll) : QHeaderView(orientation), fdIsSelAll(isSelAll) { - fdIsSelAll->setParent(this); - } - QWidget *fdIsSelAll; -protected: - void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override { - QHeaderView::paintSection(painter, rect, logicalIndex); - if(logicalIndex == 0) fdIsSelAll->setGeometry(rect); - } -}; - - -LoQTreeWidget::LoQTreeWidget(QWidget *parent) : QTreeWidget(parent), m_checkState(CheckNone) { - fdIsSelAll = new QCheckBox; - fdIsSelAll->setStyleSheet("QCheckBox{margin-left: 5px;}"); - m_header = new CheckableHeader(Qt::Horizontal, fdIsSelAll); - setHeader(m_header); - setProperty("ssType", "topList"); - connect(fdIsSelAll, SIGNAL(toggled(bool)), this, SLOT(onCheckAll(bool))); - connect(this, &LoQTreeWidget::itemClicked, this, [this](QTreeWidgetItem *item, int column) { - if(selectionMode()==QAbstractItemView::NoSelection) return; - if(column > 0) item->setCheckState(0, item->checkState(0) == Qt::Unchecked ? Qt::Checked : Qt::Unchecked); - adjustCheckState(); +void LoQTreeWidget::addFd() { + fdCheckAll = new QCheckBox(this); + connect(fdCheckAll, &QCheckBox::stateChanged, this, [=](int state) { + if(state==Qt::PartiallyChecked) return; + int cnt = topLevelItemCount(); + for(int rr=0; rrisHidden()) topLevelItem(rr)->setCheckState(1, (Qt::CheckState) state); + emit selChanged(); }); - setFocusPolicy(Qt::NoFocus); -} -void LoQTreeWidget::adjustCheckState() { - bool isAllChecked = true; - int cnt = topLevelItemCount(); - if(cnt == 0) { - isAllChecked = false; - m_checkState = CheckNone; - } else { - int k = 0; - for(int i=0; iisRowHidden(i,indexFromItem(topLevelItem(i)->parent()))) { - if(topLevelItem(i)->checkState(0) == Qt::Unchecked) isAllChecked = false; - else k++; + auto cellClicked = [=](QTreeWidgetItem *item, int column) { + if(column > 2) return; + if(! fdCheckAll->isVisible()) return; + auto state = item->checkState(1)==Qt::Checked ? Qt::Unchecked : Qt::Checked; + item->setCheckState(1, state); + int cnt = topLevelItemCount(); + fdCheckAll->blockSignals(true); + for(int rr=0; rrisHidden() && topLevelItem(rr)->checkState(1)!=state) { + fdCheckAll->setCheckState(Qt::PartiallyChecked); + goto end; } - if(k > 1) m_checkState = CheckMulti; - else if(k > 0) m_checkState = CheckOne; - else m_checkState = CheckNone; - } - fdIsSelAll->blockSignals(true); - fdIsSelAll->setChecked(isAllChecked); - fdIsSelAll->blockSignals(false); - emit sigCheckStateChanged(m_checkState); + fdCheckAll->setCheckState(state); + end:fdCheckAll->blockSignals(false); + emit selChanged(); + }; + connect(this, &QTreeWidget::itemClicked, this, cellClicked); + connect(this, &QTreeWidget::itemEntered, this, [=](QTreeWidgetItem *item, int column) { + if(column > 2) return; + if(! fdCheckAll->isVisible()) return; + if((QGuiApplication::mouseButtons() & Qt::LeftButton) == 0) return; + cellClicked(item, column); + }); } -void LoQTreeWidget::onCheckAll(bool checked) { - int cnt = topLevelItemCount(); - for(int i=0; iisRowHidden(i,indexFromItem(topLevelItem(i)->parent()))) topLevelItem(i)->setCheckState(0, Qt::Unchecked); - else topLevelItem(i)->setCheckState(0, Qt::Checked); - } - else topLevelItem(i)->setCheckState(0, Qt::Unchecked); - } - adjustCheckState(); +void LoQTreeWidget::updateGeometries() { + QTreeWidget::updateGeometries(); + if(fdCheckAll==0) return; + fdCheckAll->move(columnWidth(0)+headerItem()->data(1, MarginRole).toInt()+4, 2); } diff --git a/LedOK/base/loqtreewidget.h b/LedOK/base/loqtreewidget.h index 7402db3..82c34ff 100644 --- a/LedOK/base/loqtreewidget.h +++ b/LedOK/base/loqtreewidget.h @@ -1,34 +1,19 @@ #ifndef LOQTREEWIDGET_H #define LOQTREEWIDGET_H +#include "gutil/qgui.h" #include -#include -class LoQTreeWidget : public QTreeWidget { +class LoQTreeWidget : public TreeWidget { Q_OBJECT public: - enum CheckState { - CheckNone, - CheckOne, - CheckMulti - }; - explicit LoQTreeWidget(QWidget *parent = nullptr); - - void adjustCheckState(); - QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const { - return QTreeWidget::indexFromItem(item, column); - }; - - QCheckBox *fdIsSelAll; + using TreeWidget::TreeWidget; + void addFd(); + QCheckBox *fdCheckAll = 0; signals: - void sigCheckStateChanged(int); - -public slots: - void onCheckAll(bool checked); - -private: - QHeaderView *m_header; - int m_checkState; + void selChanged(); +protected: + void updateGeometries() override; }; #endif // LOQTREEWIDGET_H diff --git a/LedOK/basewin.cpp b/LedOK/basewin.cpp index 15d8454..6ee8e1c 100644 --- a/LedOK/basewin.cpp +++ b/LedOK/basewin.cpp @@ -34,7 +34,7 @@ void BaseWin::paintEvent(QPaintEvent *e) { painter.setPen(isActive ? penTitleAct : penTitleUnact); isMaximized() ? painter.drawText(titlePos.x()-8, titlePos.y()-8, title) : painter.drawText(titlePos, title); } - if(! icon.isNull()) isMaximized() ? painter.drawPixmap(iconPos.x()-8, iconPos.y()-8, icon) : painter.drawPixmap(iconPos, icon); + if(! icon.isNull()) isMaximized() ? painter.drawPixmap(iconPos.x()-8, iconPos.y()-8, iconPos.width(), iconPos.height(), icon) : painter.drawPixmap(iconPos, icon, QRectF()); } void BaseWin::mousePressEvent(QMouseEvent *e) { diff --git a/LedOK/basewin.h b/LedOK/basewin.h index 747d67d..629813c 100644 --- a/LedOK/basewin.h +++ b/LedOK/basewin.h @@ -14,7 +14,7 @@ public: qreal roundRadius{6.0}; QPointF titlePos{36, 26}; QPixmap icon; - QPointF iconPos{13, 13}; + QRectF iconPos{13, 13, 16, 16}; protected: void paintEvent(QPaintEvent *) override; void mousePressEvent(QMouseEvent *) override; diff --git a/LedOK/css.css b/LedOK/css.css index c1846b0..7cd26b8 100644 --- a/LedOK/css.css +++ b/LedOK/css.css @@ -1,10 +1,10 @@ -Table {selection-background-color: #0ae;} +QListWidget, QTreeWidget, TableWidget {selection-background-color: #4ae;} QCheckBox::indicator, QTableWidget::indicator, QTreeWidget::indicator { width: 1.15em; height: 1.15em; } -QLineEdit,QComboBox,QAbstractSpinBox { +QLineEdit, QComboBox, QAbstractSpinBox { border: 1px solid #aaa; border-radius: 3px; padding: 2px; @@ -70,10 +70,6 @@ QMenu::item:selected { background-color: #8CD; } -QListWidget { - selection-background-color: #0ae; -} - LoColorSelector { border: 1px solid #aaa; border-radius: 4px; @@ -83,20 +79,6 @@ LoColorSelector { font-size: 14px; } -QTreeWidget[ssType="topList"]::item { - border-right: 1px solid #ddd; - border-bottom: 1px solid #ddd; - height: 38px; -} -QTreeWidget[ssType="topList"]>QHeaderView::section { - height: 30px; -} -QTreeWidget[ssType="topList"]::item:hover { - background-color: #ddd; -} - - - QPushButton[ssType="progManageTool"] { border-radius: 4px; background-color: #19c; @@ -115,7 +97,6 @@ QPushButton[ssType="progManageTool"]:disabled { color: #777; } - LoQTitleBar QPushButton { border-radius: 4px; icon-size: 20px; diff --git a/LedOK/globaldefine.cpp b/LedOK/globaldefine.cpp index b207875..1e9e966 100644 --- a/LedOK/globaldefine.cpp +++ b/LedOK/globaldefine.cpp @@ -8,11 +8,14 @@ #include #include +QString gFileHome; +QString gApkHome; QList gSelCards; bool gVideoCompress = true; bool gVideoTranscoding = true; bool gTextAntialiasing = false; bool gWidthSplit = false; +int gSendBatch = 5; bool gHideDetect = false; bool gShowLora = false; diff --git a/LedOK/globaldefine.h b/LedOK/globaldefine.h index 2197ef4..4841758 100644 --- a/LedOK/globaldefine.h +++ b/LedOK/globaldefine.h @@ -40,6 +40,8 @@ struct ST_ANSY_PROGRAM_PACKET { unsigned char pDataBuffer[20]; }; +extern QString gFileHome; +extern QString gApkHome; class DevicePanel; extern DevicePanel *gDevicePanel; extern QList gSelCards; @@ -47,6 +49,7 @@ extern bool gVideoCompress; extern bool gVideoTranscoding; extern bool gTextAntialiasing; extern bool gWidthSplit; +extern int gSendBatch; extern bool gHideDetect; extern bool gShowLora; @@ -69,7 +72,6 @@ enum _ENUM_CONTRL_WIDGET { class DeviceItem; extern DeviceItem *findItem(QString id); - inline int verCompare(const QString& a, const QString& b) { auto aparts = a.split("."); auto bparts = b.split("."); diff --git a/LedOK/gutil/cpp.cpp b/LedOK/gutil/cpp.cpp new file mode 100644 index 0000000..218248c --- /dev/null +++ b/LedOK/gutil/cpp.cpp @@ -0,0 +1,2 @@ +//#include "cpp.h" + diff --git a/LedOK/gutil/cu.h b/LedOK/gutil/cpp.h similarity index 52% rename from LedOK/gutil/cu.h rename to LedOK/gutil/cpp.h index 0af412d..2ec20ec 100644 --- a/LedOK/gutil/cu.h +++ b/LedOK/gutil/cpp.h @@ -1,5 +1,5 @@ -#ifndef CU_H -#define CU_H +#ifndef CPP_H +#define CPP_H #include #include @@ -21,44 +21,64 @@ inline long long system_micro() { template struct SharedData { + size_t cnt{1}; T data; - uint64_t cnt{1}; }; template class SharedPtr { public: SharedPtr(SharedData *ptr = 0) : ptr{ptr} {} - SharedPtr(const SharedPtr &other) : ptr{other.ptr} { - if(ptr) ptr->cnt++; - } ~SharedPtr() { if(ptr==0) return; if(ptr->cnt > 1) ptr->cnt--; else delete ptr; } - bool isNull() {return ptr==0;} + SharedPtr(const SharedPtr &other) : ptr{other.ptr} { + if(ptr) ptr->cnt++; + } SharedPtr &operator=(const SharedPtr &other) { this->~SharedPtr(); new (this) SharedPtr(other); return *this; } + SharedPtr(SharedPtr &&other) noexcept : ptr(other.ptr) { + other.ptr = 0; + } + SharedPtr &operator=(SharedPtr &&other) noexcept { + auto aaa = ptr; + ptr = other._pri; + other.ptr = aaa; + return *this; + } - T &operator*() { + bool isNull() const noexcept {return ptr==0;} + bool empty() const noexcept { + return ptr ? ptr->data.empty() : true; + } + size_t size() const noexcept { + return ptr ? ptr->data.size() : 0; + } + + T &operator*() const { if(ptr==0) ptr = new SharedData; return ptr->data; } - T *operator->() { + T *operator->() const { if(ptr==0) ptr = new SharedData; return &ptr->data; } - const T &operator*() const { - return ptr->data; + bool operator==(const SharedPtr &other) const { + if(ptr==other.ptr) return true; + auto siz = size(); + if(siz!=other.size()) return false; + if(siz==0) return true; + return ptr->data==other.ptr->data; } - const T *operator->() const { - return &ptr->data; + bool operator!=(const SharedPtr &other) const { + return ! (*this==other); } - SharedData *ptr{0}; + mutable SharedData *ptr = 0; }; @@ -71,30 +91,38 @@ public: using const_iterator = std::_Vector_const_iterator>>; Vector(std::initializer_list _Ilist) { - this->ptr = new SharedData>{_Ilist, 1}; + this->ptr = new SharedData>{1, _Ilist}; } - bool empty() const noexcept { - return this->ptr ? this->ptr->data.empty() : true; - } - uint64_t size() const noexcept { - return this->ptr ? this->ptr->data.size() : 0; - } Vector &append(const V &val) { - (**this).push_back(val); + (*this)->push_back(val); return *this; } + Vector &append(V&& val) { + (*this)->push_back(_STD move(val)); + return *this; + } + Vector &operator<<(const V &val) { + (*this)->push_back(val); + return *this; + } + Vector &operator<<(V&& val) { + (*this)->push_back(_STD move(val)); + return *this; + } + V &operator[](const uint64_t pos) noexcept { return (**this)[pos]; } const V &operator[](const uint64_t pos) const noexcept { - return this->ptr ? this->ptr->data[pos] : V(); + return (**this)[pos]; } - const const_iterator begin() const noexcept { - return this->ptr ? this->ptr->data.begin() : const_iterator(); + + iterator begin() const noexcept { + return this->ptr ? this->ptr->data.begin() : iterator(); } - const const_iterator end() const noexcept { - return this->ptr ? this->ptr->data.end() : const_iterator(); + iterator end() const noexcept { + return this->ptr ? this->ptr->data.end() : iterator(); } }; @@ -103,45 +131,55 @@ struct NodeBase { NodeBase *next{this}; NodeBase *prev{this}; }; -template +template struct _Node : NodeBase { - V value; + P value; ~_Node() { - if(next) delete (_Node*) next; + if(next) delete (_Node

*) next; } }; -template +template class LinkedMapIterator { public: - LinkedMapIterator(_Node *node) : node(node) {} - bool operator==(const LinkedMapIterator& that) const { - return node == that.node; + LinkedMapIterator(_Node

*node) : node(node) {} + bool operator==(const LinkedMapIterator& other) const noexcept { + return node == other.node; } - bool operator!=(const LinkedMapIterator& that) const { - return node != that.node; + bool operator!=(const LinkedMapIterator& other) const noexcept { + return node != other.node; } LinkedMapIterator& operator++() { - node = (_Node*) node->next; + node = (_Node

*) node->next; return *this; } LinkedMapIterator& operator--() { - node = (_Node*) node->prev; + node = (_Node

*) node->prev; return *this; } - V &operator*() const { + const LinkedMapIterator operator++(int) { + auto rtn = *this; + node = (_Node

*) node->next; + return rtn; + } + const LinkedMapIterator operator--(int) { + auto rtn = *this; + node = (_Node

*) node->prev; + return rtn; + } + P &operator*() const noexcept { return node->value; } - V *operator->() const { + P *operator->() const noexcept { return &node->value; } - _Node *node{0}; + _Node

*node{0}; }; template struct LinkedMapPri : NodeBase { + size_t cnt = 1; std::unordered_map>*> map; - uint64_t cnt{1}; ~LinkedMapPri() { if(prev) prev->next = 0; if(next) delete (_Node>*) next; @@ -162,26 +200,64 @@ public: LinkedMap(std::unordered_map &&map) : _pri{new LinkedMapPri{0, 0, map}} { _pri->next = _pri->prev = _pri; } - LinkedMap(const LinkedMap &other) : _pri{other._pri} { - if(_pri) _pri->cnt++; - } ~LinkedMap() { if(_pri==0) return; if(_pri->cnt > 1) _pri->cnt--; else delete _pri; } + LinkedMap(const LinkedMap &other) : _pri{other._pri} { + if(_pri) _pri->cnt++; + } LinkedMap &operator=(const LinkedMap &other) { this->~LinkedMap(); new (this) LinkedMap(other); return *this; } + LinkedMap(LinkedMap &&other) noexcept : _pri(other._pri) { + other._pri = 0; + } + LinkedMap &operator=(LinkedMap &&other) noexcept { + auto aaa = _pri; + _pri = other._pri; + other._pri = aaa; + return *this; + } + + bool empty() const noexcept { + return _pri==0 || _pri->map.empty(); + } + size_t size() const noexcept { + return _pri ? _pri->map.size() : 0; + } + + iterator find(const K &k) const { + if(_pri==0) return iterator((Node*) _pri); + auto it = _pri->map.find(k); + if(it==_pri->map.end()) return iterator((Node*) _pri); + return iterator(it->second); + } + const V operator()(const K &k) const { + return (*this)[k]; + } const V operator[](const K &k) const { if(_pri==0) return V(); auto it = _pri->map.find(k); if(it==_pri->map.end()) return V(); return it->second->value.second; } + V &operator[](const K &k) { + if(_pri==0) _pri = new LinkedMapPri; + auto pair = _pri->map.emplace(k, nullptr); + if(pair.second) { + auto node = new Node{_pri, _pri->prev, {k, V()}}; + _pri->prev->next = node; + _pri->prev = node; + pair.first->second = node; + } + return pair.first->second->value.second; + } + LinkedMap &insert(const K &k, const V &v) { if(_pri==0) _pri = new LinkedMapPri; auto pair = _pri->map.emplace(k, nullptr); @@ -205,17 +281,32 @@ public: node->prev = 0; delete node; } - inline bool empty() const { - return _pri==0 || _pri->map.empty(); + + bool operator==(const LinkedMap &other) const { + if(_pri==other._pri) return true; + auto siz = size(); + if(siz!=other.size()) return false; + if(siz==0) return true; + auto aaa = begin(); + auto bbb = other.begin(); + while(aaa!=end()) { + if(aaa->first != bbb->first || aaa->second != bbb->second) return false; + ++aaa; + ++bbb; + } + return true; + } + bool operator!=(const LinkedMap &other) const { + return ! (*this==other); } - const_iterator begin() const { - return const_iterator((Node*) (_pri ? _pri->next : 0)); + iterator begin() const { + return iterator((Node*) (_pri ? _pri->next : 0)); } - const_iterator end() const { - return const_iterator((Node*) _pri); + iterator end() const { + return iterator((Node*) _pri); } - LinkedMapPri *_pri{0}; + LinkedMapPri *_pri = 0; }; -#endif // CU_H +#endif // CPP_H diff --git a/LedOK/gutil/cu.cpp b/LedOK/gutil/cu.cpp deleted file mode 100644 index 989710e..0000000 --- a/LedOK/gutil/cu.cpp +++ /dev/null @@ -1,2 +0,0 @@ -//#include "cu.h" - diff --git a/LedOK/gutil/qcore.h b/LedOK/gutil/qcore.h index 4d5b6dc..bf21dcc 100644 --- a/LedOK/gutil/qcore.h +++ b/LedOK/gutil/qcore.h @@ -1,6 +1,30 @@ #ifndef QCORE_H #define QCORE_H #include +#include +#include + +#define ToStr QString::number + +inline QString toStr(int num, int base=10) {return QString::number(num, base);} +inline QString toStr(uint num, int base=10) {return QString::number(num, base);} +inline QString toStr(long num, int base=10) {return QString::number(num, base);} +inline QString toStr(ulong num, int base=10) {return QString::number(num, base);} +inline QString toStr(qlonglong num, int base=10) {return QString::number(num, base);} +inline QString toStr(qulonglong num, int base=10) {return QString::number(num, base);} +inline QString toStr(double num, char format='g', int precision=6) {return QString::number(num, format, precision);} + +inline QString gUrlSuffix(const QString &url, int size, bool withDot = false) { + auto ss = url.lastIndexOf('/')+1; + if(ss==url.size()) return QString(); + ss++; + auto ee = url.indexOf('?', ss); + if(ee==-1) ee = url.size(); + int end = ee-size-1; + if(end=end; --i) if(url[i]=='.') return withDot ? url.mid(i, ee-i) : url.mid(i+1, ee-i-1); + return QString(); +} inline QString byteSizeStr(double size) { const char *units[]{"B", "KB", "MB", "GB", "TB", "PB"}; @@ -9,17 +33,13 @@ inline QString byteSizeStr(double size) { return QString::number(size, 'g', 3)+" "+units[i]; } -inline long long steady_milli() { - return std::chrono::duration_cast(std::chrono::steady_clock::now().time_since_epoch()).count(); -} -inline long long system_milli() { - return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); -} -inline long long steady_micro() { - return std::chrono::duration_cast(std::chrono::steady_clock::now().time_since_epoch()).count(); -} -inline long long system_micro() { - return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); +inline void wait(int msec, QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents) { + QTimer timer; + timer.setSingleShot(true); + QEventLoop loop; + QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); + timer.start(msec); + loop.exec(flags); } template diff --git a/LedOK/gutil/qgui.cpp b/LedOK/gutil/qgui.cpp index ef0cf02..7ab4f56 100644 --- a/LedOK/gutil/qgui.cpp +++ b/LedOK/gutil/qgui.cpp @@ -1,44 +1,212 @@ #include "qgui.h" +#include #include +#include -const int AlignRight = Qt::AlignRight | Qt::AlignVCenter; +const Qt::Alignment AlignRight = Qt::AlignRight | Qt::AlignVCenter; -Table::Table(std::initializer_list colAttrs, int rows, QWidget *parent) : QTableWidget{rows, (int)colAttrs.size(), parent} { - int i = 0; - for(typename std::initializer_list::const_iterator it = colAttrs.begin(); it != colAttrs.end(); ++it) { - auto item = horizontalHeaderItem(i); - if(item==0) setHorizontalHeaderItem(i, item = new QTableWidgetItem()); - item->setText(it->text); - if(it->width > 0) horizontalHeader()->resizeSection(i, it->width); - if(it->resizeMode != QHeaderView::Interactive) { - if(it->resizeMode==QHeaderView::Stretch && it->width>0) { - item->setData(0x99, it->width > 0 ? it->width : 100); +ColItem TreeWidget::addCol(const QString& field, const QString& text, int width, QHeaderView::ResizeMode resizeMode) { + int i = fdmap.size(); + auto item = headerItem(); + item->setText(i, text); + item->setData(i, FieldRole, field); + if(width > 0) { + blocked = true; + if(header()->minimumSectionSize() > width) header()->setMinimumSectionSize(width); + header()->resizeSection(i, width); + blocked = false; + } + if(resizeMode != QHeaderView::Interactive) { + if(resizeMode==QHeaderView::Stretch && width > 0) { + item->setData(i, WidthRole, width); + if(noStretch) { noStretch = false; - } else horizontalHeader()->setSectionResizeMode(i, (QHeaderView::ResizeMode)it->resizeMode); + connect(header(), &QHeaderView::sectionResized, this, &TreeWidget::onSectionResized); + header()->installEventFilter(this); + } + } else header()->setSectionResizeMode(i, resizeMode); + } + fdmap.emplace(field, i); + if(i==0) hasRowNum = field=="#"; + return {item, i}; +} + +bool TreeWidget::eventFilter(QObject *watched, QEvent *event) { + if(watched==header()) { + if(event->type()==QEvent::Resize) { + auto eve = (QResizeEvent *) event; + if(eve->size().width() != eve->oldSize().width()) adjSections(-1, 0); + } else if(isSectionResized && event->type()==QEvent::Leave) { + isSectionResized = false; + auto item = headerItem(); + for(int cc=0; ccdata(cc, WidthRole).isValid()) item->setData(cc, WidthRole, header()->sectionSize(cc)); + } + return true; + } + return QTreeWidget::eventFilter(watched, event); +} +void TreeWidget::rowsInserted(const QModelIndex &parent, int start, int end) { + QTreeWidget::rowsInserted(parent, start, end); + if(parent.internalId()) return; + if(minRowHeight) for(int rr=start; rr<=end; rr++) { + auto item = topLevelItem(rr); + if(item->sizeHint(0).height() < minRowHeight) item->setSizeHint(0, {0, minRowHeight}); + } + int align; + for(int cc=0; ccdata(cc, AlignRole).toInt())) for(int rr=start; rr<=end; rr++) topLevelItem(rr)->setTextAlignment(cc, (Qt::Alignment)align); +} +void TreeWidget::drawRow(QPainter *painter, const QStyleOptionViewItem &options, const QModelIndex &index) const { + QTreeWidget::drawRow(painter, options, index); + if(hasRowNum) { + QRect rect(columnViewportPosition(0), options.rect.top(), columnWidth(0), options.rect.height()); + painter->fillRect(rect, header()->palette().button()); + painter->drawText(rect, Qt::AlignCenter, QString::number(index.row()+1)); + } + if(hasGrid) { + QBrush color({128, 128, 128, 128}); + QRect rec(options.rect.left()-1-horizontalOffset(), options.rect.top(), 1, options.rect.height()); + auto last = columnCount() - 1; + if(hasGrid > 1) for(int i=0; ilogicalIndex(i)), 0); + painter->fillRect(rec, color); + } else { + int ttlwidth = columnWidth(header()->logicalIndex(last)); + for(int i=0; ilogicalIndex(i)); + rec.translate(width, 0); + painter->fillRect(rec, color); + ttlwidth += width; + } + painter->fillRect(options.rect.left(), options.rect.bottom(), ttlwidth, 1, color); } - mFieldMap.emplace(it->field, i++); } } - -void Table::resizeEvent(QResizeEvent *event) { - QTableWidget::resizeEvent(event); - if(noStretch || event->size().width() == event->oldSize().width()) return; - resizeSec(); +void TreeWidget::onSectionResized(int logicalIndex, int oldSize, int newSize) { + if(blocked || newSize==0 || oldSize==0) return; + if(! headerItem()->data(logicalIndex, WidthRole).isValid()) return; + if(adjSections(logicalIndex, newSize)) isSectionResized = true; +} +bool TreeWidget::adjSections(int index, int size) { + auto item = headerItem(); + int remain = header()->width() - size, stretchWidth = 0, width; + for(int cc=0; ccisSectionHidden(cc)) { + width = item->data(cc, WidthRole)|-1; + if(width > -1) { + if(width==0) item->setData(cc, WidthRole, width = header()->sectionSize(cc)); + stretchWidth += width; + } else remain -= header()->sectionSize(cc); + } + if(remain<=0 || stretchWidth==0) return false; + auto min = header()->minimumSectionSize(); + blocked = true; + for(int cc=0; ccisSectionHidden(cc) && (width = item->data(cc, WidthRole)|-1) > -1) header()->resizeSection(cc, qMax(min, width * remain / stretchWidth)); + blocked = false; + return true; } -void Table::resizeSec() { - auto header = horizontalHeader(); - int colCnt = columnCount(), remainWidth = header->width(), stretchWidth = 0, secWidth; +class TreeItemMarginStyle : public QProxyStyle { +public: + using QProxyStyle::QProxyStyle; + TreeItemMarginStyle(QWidget *wgt) : QProxyStyle(wgt->style()), _wgt(wgt) {} + QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override { + auto res = QProxyStyle::subElementRect(element, option, widget); + auto width = res.width(); + if(width && option && option->type==QStyleOption::SO_ViewItem && widget==_wgt) { + if(element==SE_ItemViewItemText) { + auto index = ((QStyleOptionViewItem*)option)->index; + auto add = ((TreeWidget*)widget)->headerItem()->data(index.column(), MarginRole).toInt(); + if(add) { + auto align = ((TreeWidget*)widget)->item(index.row())->textAlignment(index.column()); + if(align & Qt::AlignRight) res.setWidth(width < add ? 0 : width - add); + else if((align & Qt::AlignHCenter)==0) { + if(((QStyleOptionViewItem*)option)->features & QStyleOptionViewItem::HasCheckIndicator) add += add>>1; + res.setLeft(res.x() + add); + if(width < add) res.setWidth(0); + } + } + } else if(((QStyleOptionViewItem*)option)->features & QStyleOptionViewItem::HasCheckIndicator) { + auto add = ((TreeWidget*)widget)->headerItem()->data(((QStyleOptionViewItem*)option)->index.column(), MarginRole).toInt(); + if(add) { + add += add>>1; + res.setLeft(res.x() + add); + if(width < add) res.setWidth(0); + } + } + } + return res; + } + int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override { + auto res = QProxyStyle::pixelMetric(metric, option, widget); + if(metric==PM_FocusFrameHMargin && option && option->type==QStyleOption::SO_ViewItem && ((QStyleOptionViewItem*)option)->features & QStyleOptionViewItem::HasCheckIndicator && widget==_wgt) res += ((TreeWidget*)widget)->headerItem()->data(((QStyleOptionViewItem*)option)->index.column(), MarginRole).toInt(); + return res; + } + QWidget *_wgt = 0; +}; + +ColItem &ColItem::margin(int margin) { + item->setData(i, MarginRole, margin); + auto tree = (TreeWidget*) item->treeWidget(); + if(tree->noMargin) { + tree->noMargin = false; + tree->setStyle(new TreeItemMarginStyle(tree)); + } + return *this; +} + +TableWidget::TableWidget(std::initializer_list colAttrs, int rows, QWidget *parent) : QTableWidget{rows, (int)colAttrs.size(), parent} { + int i = 0; + for(auto attr = colAttrs.begin(); attr < colAttrs.end(); ++attr) { + auto item = horizontalHeaderItem(i); + if(item==0) setHorizontalHeaderItem(i, item = new QTableWidgetItem); + item->setText(attr->text); + item->setData(FieldRole, attr->field); + if(attr->width > 0) horizontalHeader()->resizeSection(i, attr->width); + if(attr->resizeMode != QHeaderView::Interactive) { + if(attr->resizeMode==QHeaderView::Stretch && attr->width > 0) { + item->setData(WidthRole, attr->width); + if(noStretch) { + noStretch = false; + connect(horizontalHeader(), &QHeaderView::sectionResized, this, &TableWidget::onSectionResized); + horizontalHeader()->installEventFilter(this); + } + } else horizontalHeader()->setSectionResizeMode(i, attr->resizeMode); + } + fdmap.emplace(attr->field, i++); + } +} +bool TableWidget::eventFilter(QObject *watched, QEvent *event) { + if(watched==horizontalHeader()) { + if(event->type()==QEvent::Resize) { + auto eve = (QResizeEvent *) event; + if(eve->size().width() != eve->oldSize().width()) adjSections(-1, 0); + } else if(isSectionResized && event->type()==QEvent::Leave) { + isSectionResized = false; + QTableWidgetItem *item; + for(int cc=0; ccdata(WidthRole).isValid()) item->setData(WidthRole, horizontalHeader()->sectionSize(cc)); + } + return true; + } + return QTableWidget::eventFilter(watched, event); +} +void TableWidget::onSectionResized(int logicalIndex, int oldSize, int newSize) { + if(blocked || newSize==0 || oldSize==0) return; + if(! horizontalHeaderItem(logicalIndex)->data(WidthRole).isValid()) return; + if(adjSections(logicalIndex, newSize)) isSectionResized = true; +} +bool TableWidget::adjSections(int index, int size) { QTableWidgetItem *item; - for(int cc=0; ccdata(0x99).toInt()) > 0) stretchWidth += secWidth; - else remainWidth -= header->sectionSize(cc); + int remain = horizontalHeader()->width() - size, stretchWidth = 0, width; + for(int cc=0; ccisSectionHidden(cc) && (item = horizontalHeaderItem(cc))) { + width = item->data(WidthRole)|-1; + if(width > -1) { + if(width==0) item->setData(WidthRole, width = horizontalHeader()->sectionSize(cc)); + stretchWidth += width; + } else remain -= horizontalHeader()->sectionSize(cc); } - if(remainWidth<=0 || stretchWidth==0) return; - for(int cc=0; ccdata(0x99).toInt()) > 0) header->resizeSection(cc, secWidth * remainWidth / stretchWidth); -} - -void Table::updateGeometries() { - QTableWidget::updateGeometries(); - emit updGeos(); + if(remain<=0 || stretchWidth==0) return false; + auto min = horizontalHeader()->minimumSectionSize(); + blocked = true; + for(int cc=0; ccisSectionHidden(cc) && (item = horizontalHeaderItem(cc)) && (width = item->data(WidthRole)|-1) > -1) horizontalHeader()->resizeSection(cc, qMax(min, width * remain / stretchWidth)); + blocked = false; + return true; } diff --git a/LedOK/gutil/qgui.h b/LedOK/gutil/qgui.h index b71e068..5195209 100644 --- a/LedOK/gutil/qgui.h +++ b/LedOK/gutil/qgui.h @@ -2,6 +2,8 @@ #define QGUI_H #include +#include +#include #include #include #include @@ -9,6 +11,7 @@ #include #include #include +#include #define MainMust \ #if(QT_VERSION_MAJOR > 5) \ @@ -19,8 +22,11 @@ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);\ #endif +extern const Qt::Alignment AlignRight; -extern const int AlignRight; +inline int operator|(const QVariant &value, int def) { + return value.isValid() ? value.toInt() : def; +} inline QWidget *parentWgt(QObject *obj) { while(obj && ! obj->isWidgetType()) obj = obj->parent(); @@ -34,11 +40,16 @@ inline QWidget *parentWin(QObject *obj) { return (QWidget*) obj; } -inline int setCurrentData(QComboBox *combo, const QVariant &data) { +inline int SetCurData(QComboBox *combo, const QVariant &data) { auto idx = combo->findData(data); if(idx>-1) combo->setCurrentIndex(idx); return idx; } +inline int SetCurText(QComboBox *combo, const QString& text) { + auto idx = combo->findText(text); + if(idx>-1) combo->setCurrentIndex(idx); + return idx; +} inline void gFont(QWidget *wgt, int size, bool bold = false, bool italic = false) { auto ft = wgt->font(); ft.setPixelSize(size); @@ -46,7 +57,7 @@ inline void gFont(QWidget *wgt, int size, bool bold = false, bool italic = false if(italic) ft.setItalic(true); wgt->setFont(ft); } -inline void gFont(QWidget *wgt, const QString &family, int size = 0, bool bold = false, bool italic = false) { +inline void gFont(QWidget *wgt, const QString& family, int size = 0, bool bold = false, bool italic = false) { auto ft = wgt->font(); ft.setFamily(family); if(size) ft.setPixelSize(size); @@ -54,14 +65,14 @@ inline void gFont(QWidget *wgt, const QString &family, int size = 0, bool bold = if(italic) ft.setItalic(true); wgt->setFont(ft); } -inline QFont qfont(const QString &family, int pixelSize, bool bold = false, bool italic = false) { +inline QFont qfont(const QString& family, int pixelSize, bool bold = false, bool italic = false) { QFont ft(family); ft.setPixelSize(pixelSize); if(bold) ft.setBold(true); if(italic) ft.setItalic(true); return ft; } -inline void gAppendText(QTextEdit *wgt, const QString &text, const QColor &color) { +inline void gAppendText(QTextEdit *wgt, const QString& text, const QColor &color) { auto c0 = wgt->textColor(); wgt->setTextColor(color); wgt->append(text); @@ -70,39 +81,55 @@ inline void gAppendText(QTextEdit *wgt, const QString &text, const QColor &color class VBox : public QBoxLayout { public: - inline VBox(QWidget *parent=nullptr) : QBoxLayout(TopToBottom, parent) {} - inline VBox(QBoxLayout *parent) : QBoxLayout(TopToBottom) { + VBox(QWidget *parent=nullptr) : QBoxLayout(TopToBottom, parent) {} + VBox(QBoxLayout *parent) : QBoxLayout(TopToBottom) { parent->addLayout(this); }; - inline VBox(QStackedLayout *stack) : QBoxLayout(TopToBottom, new QWidget) { + VBox(QStackedLayout *stack) : QBoxLayout(TopToBottom, new QWidget) { stack->addWidget(parentWidget()); setContentsMargins(0,0,0,0); }; - inline VBox(QSplitter *splitter) : QBoxLayout(TopToBottom, new QWidget) { + VBox(QSplitter *splitter) : QBoxLayout(TopToBottom, new QWidget) { splitter->addWidget(parentWidget()); setContentsMargins(0,0,0,0); }; - inline QLabel *addLabel(const QString &text) { + QLabel *addLabel() { + auto lb = new QLabel; + addWidget(lb); + return lb; + } + QLabel *addLabel(const QString& text) { auto lb = new QLabel(text); addWidget(lb); return lb; } + QDialogButtonBox *addBtnBox(QDialog *dlg = 0) { + auto btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + if(dlg) connect(btnBox, &QDialogButtonBox::rejected, dlg, &QDialog::reject); + addWidget(btnBox); + return btnBox; + } }; class HBox : public QBoxLayout { public: - inline HBox(QWidget *parent=nullptr) : QBoxLayout(LeftToRight, parent) {} - inline HBox(QBoxLayout *parent) : QBoxLayout(LeftToRight) { + HBox(QWidget *parent=nullptr) : QBoxLayout(LeftToRight, parent) {} + HBox(QBoxLayout *parent) : QBoxLayout(LeftToRight) { parent->addLayout(this); }; - inline HBox(QStackedLayout *stack) : QBoxLayout(LeftToRight, new QWidget) { + HBox(QStackedLayout *stack) : QBoxLayout(LeftToRight, new QWidget) { stack->addWidget(parentWidget()); setContentsMargins(0,0,0,0); }; - inline HBox(QSplitter *splitter) : QBoxLayout(LeftToRight, new QWidget) { + HBox(QSplitter *splitter) : QBoxLayout(LeftToRight, new QWidget) { splitter->addWidget(parentWidget()); setContentsMargins(0,0,0,0); }; - inline QLabel *addLabel(const QString &text) { + QLabel *addLabel() { + auto lb = new QLabel; + addWidget(lb); + return lb; + } + QLabel *addLabel(const QString& text) { auto lb = new QLabel(text); addWidget(lb); return lb; @@ -111,16 +138,16 @@ public: class Grid : public QGridLayout { public: using QGridLayout::QGridLayout; - inline Grid(QBoxLayout *parent) { + Grid(QBoxLayout *parent) { parent->addLayout(this); }; - inline Grid(QStackedLayout *stack) : QGridLayout(new QWidget) { + Grid(QStackedLayout *stack) : QGridLayout(new QWidget) { stack->addWidget(parentWidget()); }; - inline Grid(QSplitter *splitter) : QGridLayout(new QWidget) { + Grid(QSplitter *splitter) : QGridLayout(new QWidget) { splitter->addWidget(parentWidget()); }; - inline QLabel *addLabel(const QString &text) { + QLabel *addLabel(const QString& text) { auto lb = new QLabel(text); addWidget(lb); return lb; @@ -132,7 +159,7 @@ public: using QListWidget::QListWidget; using QListWidget::addItem; - inline auto addItem(const QString &text, const QVariant &value) { + auto addItem(const QString& text, const QVariant &value) { auto item = new QListWidgetItem(text); item->setData(Qt::UserRole, value); insertItem(count(), item); @@ -141,172 +168,396 @@ public: }; struct ColAttr { - ColAttr(QString field, QString text, int width=0, QHeaderView::ResizeMode resizeMode = QHeaderView::Interactive) : field(field), text(text), width(width), resizeMode(resizeMode) {} - ColAttr(QString field, QString text, QHeaderView::ResizeMode resizeMode) : field(field), text(text), resizeMode(resizeMode) {} + ColAttr(const QString& field, const QString& text, int width=0, QHeaderView::ResizeMode resizeMode = QHeaderView::Interactive) : field(field), text(text), width(width), resizeMode(resizeMode) {} + ColAttr(const QString& field, const QString& text, QHeaderView::ResizeMode resizeMode) : field(field), text(text), resizeMode(resizeMode) {} QString field; QString text; - int width{0}; + int width = 0; QHeaderView::ResizeMode resizeMode; }; -class Table : public QTableWidget { +enum ItemDataRole { + MarginRole = 0xfc, + AlignRole, + FieldRole, + WidthRole +}; + +struct ColItem { + QTreeWidgetItem *item; + int i; + auto &align(int align) { + item->setData(i, AlignRole, align); + return *this; + } + auto &alignC() { + return align(Qt::AlignCenter); + } + auto &alignR() { + return align(Qt::AlignVCenter | Qt::AlignRight); + } + ColItem &margin(int margin); +}; +class TreeWidgetItem; + +class TreeWidget : public QTreeWidget { + friend ColItem; + Q_OBJECT +public: + using QTreeWidget::QTreeWidget; + ColItem addCol(const QString& field, const QString& text, int width = 0, QHeaderView::ResizeMode resizeMode = QHeaderView::Interactive); + ColItem addCol(const QString& field, const QString& text, QHeaderView::ResizeMode resizeMode) { + return addCol(field, text, 0, resizeMode); + } + + auto setDefs() { + if(! hasRowNum) setIndentation(0); + setAlternatingRowColors(true); + header()->setStretchLastSection(false); + return this; + } + auto setHeaderAlignC() { + auto item = headerItem(); + for(int cc=0; ccsetTextAlignment(cc, Qt::AlignCenter); + } + + auto setColFit() { + header()->setSectionResizeMode(QHeaderView::ResizeToContents); + return this; + } + auto setColWidth(int value, QHeaderView::ResizeMode mode = QHeaderView::Interactive) { + header()->setDefaultSectionSize(value); + if(mode!=QHeaderView::Interactive) header()->setSectionResizeMode(mode); + return this; + } + + auto setHeaderText(const QString& column, const QString& text) { + headerItem()->setText(fdmap.at(column), text); + return this; + } + + using QTreeWidget::showColumn; + void showColumn(const QString& column) { + showColumn(fdmap.at(column)); + } + using QTreeWidget::hideColumn; + void hideColumn(const QString& column) { + hideColumn(fdmap.at(column)); + } + + auto item(int idx) const { + return (TreeWidgetItem*) topLevelItem(idx); + } + auto selectedItem() const { + auto is = selectedItems(); + return is.isEmpty() ? 0 : (TreeWidgetItem*) is.at(0); + } + auto curItem() const { + return (TreeWidgetItem*) currentItem(); + } + + QString field(int column) const { + return headerItem()->data(column, FieldRole).toString(); + } + QString sortField() const { + return field(sortColumn()); + } + using QTreeWidget::sortItems; + void sortItems(const QString& column, Qt::SortOrder order = Qt::AscendingOrder) { + sortItems(fdmap.at(column), order); + } + + std::unordered_map fdmap; + int minRowHeight = 0; + char hasGrid = 1; + bool hasRowNum = false; + + int sizeHintForColumn(int column) const override { + return QTreeWidget::sizeHintForColumn(column); + } +signals: + void updGeos(); +protected: + bool eventFilter(QObject *watched, QEvent *event) override; + void updateGeometries() override { + QTreeWidget::updateGeometries(); + emit updGeos(); + } + void rowsInserted(const QModelIndex &parent, int start, int end) override; + void drawRow(QPainter *painter, const QStyleOptionViewItem &options, const QModelIndex &index) const override; + void onSectionResized(int logicalIndex, int oldSize, int newSize); + bool adjSections(int index, int size); + bool noStretch = true; + bool noMargin = true; + bool isSectionResized = false; + bool blocked = false; +}; + +inline int operator*(const QString& key, QTreeView &table) { + if((size_t)&table==0) return 0; + return ((TreeWidget&)table).fdmap.at(key); +} +inline int operator*(const char *key, QTreeView &table) { + if((size_t)&table==0) return 0; + return ((TreeWidget&)table).fdmap.at(key); +} + +class TreeWidgetItem : public QTreeWidgetItem { +public: + using QTreeWidgetItem::QTreeWidgetItem; + + using QTreeWidgetItem::checkState; + auto checkState(const QString& column) const { + return checkState(column**treeWidget()); + } + using QTreeWidgetItem::setCheckState; + auto setCheckState(const QString& column, Qt::CheckState state) { + setCheckState(column**treeWidget(), state); + return this; + } + + using QTreeWidgetItem::text; + auto text(const QString& column) const { + return text(column**treeWidget()); + } + using QTreeWidgetItem::setText; + auto setText(const QString& column, const QString& text) { + setText(column**treeWidget(), text); + return this; + } + auto setText(const QString& column, const QString& text, const QVariant &value) { + auto idx = column**treeWidget(); + setText(idx, text); + setData(idx, Qt::UserRole, value); + return this; + } + auto setText(const QString& column, const QString& text, int alignment) { + auto idx = column**treeWidget(); + setText(idx, text); + setTextAlignment(idx, (Qt::Alignment)alignment); + return this; + } + + using QTreeWidgetItem::background; + auto background(const QString& column) const { + return background(column**treeWidget()); + } + using QTreeWidgetItem::setBackground; + auto setBackground(const QString& column, const QBrush &brush) { + setBackground(column**treeWidget(), brush); + return this; + } + using QTreeWidgetItem::foreground; + auto foreground(const QString& column) const { + return foreground(column**treeWidget()); + } + using QTreeWidgetItem::setForeground; + auto setForeground(const QString& column, const QBrush &brush) { + setForeground(column**treeWidget(), brush); + return this; + } + + using QTreeWidgetItem::data; + auto data(int col) const { + return data(col, Qt::UserRole); + } + auto data(const QString& column, int role = Qt::UserRole) const { + return data(column**treeWidget(), role); + } + using QTreeWidgetItem::setData; + auto setData(int col, const QVariant &value) { + setData(col, Qt::UserRole, value); + return this; + } + auto setData(const QString& column, const QVariant &value) { + setData(column**treeWidget(), Qt::UserRole, value); + return this; + } + auto setData(const QString& column, int role, const QVariant &value) { + setData(column**treeWidget(), role, value); + return this; + } + + auto cellWidget(int column) { + return treeWidget()->itemWidget(this, column); + } + auto cellWidget(const QString& column) { + return treeWidget()->itemWidget(this, column**treeWidget()); + } + void setCellWidget(int column, QWidget *widget) { + treeWidget()->setItemWidget(this, column, widget); + } + void setCellWidget(const QString& column, QWidget *widget) { + treeWidget()->setItemWidget(this, column**treeWidget(), widget); + } +}; + +class TableWidget : public QTableWidget { Q_OBJECT public: using QTableWidget::QTableWidget; - Table() {} - Table(std::initializer_list colAttrs, int rows = 0, QWidget *parent = 0); + TableWidget() {} + TableWidget(std::initializer_list colAttrs, int rows = 0, QWidget *parent = 0); - inline auto setDefs() { + auto setDefs() { setSelectionBehavior(QTableWidget::SelectRows); setEditTriggers(QAbstractItemView::NoEditTriggers); setAlternatingRowColors(true); return this; } - inline auto setColStretch() { + auto setColStretch() { horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); return this; } - inline auto setRowStretch() { + auto setRowStretch() { verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); return this; } - inline auto setColFit() { + auto setColFit() { horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); return this; } - inline auto setRowFit() { + auto setRowFit() { verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); return this; } - inline auto setColWidth(int value, QHeaderView::ResizeMode mode = QHeaderView::Interactive) { - auto header = horizontalHeader(); - header->setDefaultSectionSize(value); - if(mode!=QHeaderView::Interactive) header->setSectionResizeMode(mode); + + auto setColWidth(int value) { + if(horizontalHeader()->minimumSectionSize() > value) horizontalHeader()->setMinimumSectionSize(value); + horizontalHeader()->setDefaultSectionSize(value); return this; } - inline auto setRowHeight(int value, QHeaderView::ResizeMode mode = QHeaderView::Interactive) { - auto header = verticalHeader(); - header->setDefaultSectionSize(value); - if(mode!=QHeaderView::Interactive) header->setSectionResizeMode(mode); + auto setColResize(QHeaderView::ResizeMode mode) { + horizontalHeader()->setSectionResizeMode(mode); + return this; + } + auto setRowHeight(int value) { + if(verticalHeader()->minimumSectionSize() > value) verticalHeader()->setMinimumSectionSize(value); + verticalHeader()->setDefaultSectionSize(value); + return this; + } + auto setRowResize(QHeaderView::ResizeMode mode) { + verticalHeader()->setSectionResizeMode(mode); return this; } - inline auto setHeaderText(int col, QString text) { + auto setHeaderText(int col, const QString& text) { auto item = horizontalHeaderItem(col); if(item==0) setHorizontalHeaderItem(col, item = new QTableWidgetItem()); item->setText(text); return item; } - inline auto setHeaderText(QString column, QString text) { - auto col = mFieldMap[column]; - return setHeaderText(col, text); + auto setHeaderText(const QString& column, const QString& text) { + return setHeaderText(fdmap.at(column), text); } - inline auto setVHeaderText(int row, QString text) { + auto setVHeaderText(int row, const QString& text) { auto item = verticalHeaderItem(row); if(item==0) setVerticalHeaderItem(row, item = new QTableWidgetItem()); item->setText(text); return item; } - inline auto appendRow() { + auto appendRow() { auto value = rowCount(); setRowCount(value + 1); return value; } using QTableWidget::item; - inline auto item(int row, QString column) { - auto col = mFieldMap[column]; - return item(row, col); + auto item(int row, const QString& column) { + return item(row, fdmap.at(column)); } - inline auto itemValid(int row, int col) { - auto anitem = item(row, col); - if(anitem==0) setItem(row, col, anitem = new QTableWidgetItem); - return anitem; + auto itemValid(int row, int col) { + auto itm = item(row, col); + if(itm==0) setItem(row, col, itm = new QTableWidgetItem); + return itm; } - inline auto itemValid(int row, QString column) { - auto col = mFieldMap[column]; - return itemValid(row, col); + auto itemValid(int row, const QString& column) { + return itemValid(row, fdmap.at(column)); } using QTableWidget::setItem; - inline void setItem(int row, QString column, QTableWidgetItem *item) { - auto col = mFieldMap[column]; - setItem(row, col, item); + void setItem(int row, const QString& column, QTableWidgetItem *item) { + setItem(row, fdmap.at(column), item); } - inline auto text(int row, int col) { + auto text(int row, int col) { auto itm = item(row, col); if(itm==0) return QString(); return itm->text(); } - inline auto text(int row, QString column) { - auto col = mFieldMap[column]; - return text(row, col); + auto text(int row, const QString& column) { + return text(row, fdmap.at(column)); } - inline auto setText(int row, int col, const QString &text) { + auto setText(int row, int col, const QString& text) { auto itm = item(row, col); if(itm) itm->setText(text); else setItem(row, col, itm = new QTableWidgetItem(text)); return itm; } - inline auto setText(int row, QString column, const QString &text) { - auto col = mFieldMap[column]; - return setText(row, col, text); + auto setText(int row, const QString& column, const QString& text) { + return setText(row, fdmap.at(column), text); + } + auto setText(int row, int col, const QString& text, const QVariant &value) { + auto itm = item(row, col); + if(itm) itm->setText(text); + else setItem(row, col, itm = new QTableWidgetItem(text)); + itm->setData(Qt::UserRole, value); + return itm; + } + auto setText(int row, const QString& column, const QString& text, const QVariant &value) { + return setText(row, fdmap.at(column), text, value); } - inline auto data(int row, int col) { + auto data(int row, int col) { auto itm = item(row, col); if(itm==0) return QVariant(); return itm->data(Qt::UserRole); } - inline auto data(int row, QString column) { - auto col = mFieldMap[column]; - return data(row, col); + auto data(int row, const QString& column) { + return data(row, fdmap.at(column)); } - inline auto setData(int row, int col, const QVariant &value) { + auto setData(int row, int col, const QVariant &value) { auto itm = item(row, col); if(itm==0) setItem(row, col, itm = new QTableWidgetItem); itm->setData(Qt::UserRole, value); return itm; } - inline auto setData(int row, QString column, const QVariant &value) { - auto col = mFieldMap[column]; - return setData(row, col, value); + auto setData(int row, const QString& column, const QVariant &value) { + return setData(row, fdmap.at(column), value); } using QTableWidget::cellWidget; - inline auto cellWidget(int row, QString column) { - auto col = mFieldMap[column]; - return cellWidget(row, col); + auto cellWidget(int row, const QString& column) { + return cellWidget(row, fdmap.at(column)); } using QTableWidget::setCellWidget; - inline void setCellWidget(int row, QString column, QWidget *widget) { - auto col = mFieldMap[column]; - setCellWidget(row, col, widget); + void setCellWidget(int row, const QString& column, QWidget *widget) { + setCellWidget(row, fdmap.at(column), widget); } - std::map mFieldMap; + using QTableWidget::sortItems; + void sortItems(const QString& column, Qt::SortOrder order) { + sortItems(fdmap.at(column), order); + } + + std::unordered_map fdmap; public Q_SLOTS: - inline void clearRows() {setRowCount(0);} + void clearRows() {setRowCount(0);} signals: void updGeos(); protected: - void resizeEvent(QResizeEvent *event) override; - void updateGeometries() override; - void resizeSec(); - bool noStretch{true}; -}; - -class ResizeEmitedWgt : public QWidget { - Q_OBJECT -public: - using QWidget::QWidget; -protected: - void resizeEvent(QResizeEvent *) override {emit resized();} -signals: - void resized(); + bool eventFilter(QObject *watched, QEvent *event) override; + void updateGeometries() override { + QTableWidget::updateGeometries(); + emit updGeos(); + }; + void onSectionResized(int logicalIndex, int oldSize, int newSize); + bool adjSections(int index, int size); + bool noStretch = true; + bool isSectionResized = false; + bool blocked = false; }; @@ -317,43 +568,43 @@ public: Wrp(T *obj = nullptr){ this->obj = obj; }; - inline Wrp& operator()(T *obj){ + Wrp& operator()(T *obj){ this->obj = obj; return *this; } - inline Wrp& operator()(T *obj, QLayout *layout){ + Wrp& operator()(T *obj, QLayout *layout){ this->obj = obj; layout->addWidget(obj); return *this; } - inline Wrp& addTo(QLayout *layout){ + Wrp& addTo(QLayout *layout){ layout->addWidget(obj); return *this; } - inline Wrp& margin(int a){ + Wrp& margin(int a){ obj->setMargin(a); return *this; } - inline Wrp& font(const QFont &font){ + Wrp& font(const QFont &font){ obj->setFont(font); return *this; } - inline Wrp& font(int size){ + Wrp& font(int size){ auto font = obj->font(); font.setPixelSize(size); obj->setFont(font); return *this; } - inline Wrp& width(int w){ + Wrp& width(int w){ obj->setFixedWidth(w); return *this; } - inline Wrp& height(int h){ + Wrp& height(int h){ obj->setFixedHeight(h); return *this; } - inline Wrp& padding(int wAdd, int hAdd, int minW = 32, int minH = 16){ + Wrp& padding(int wAdd, int hAdd, int minW = 32, int minH = 16){ wAdd+=8; hAdd+=8; QSize size = obj->fontMetrics().size(Qt::TextShowMnemonic, obj->text()); @@ -367,11 +618,11 @@ public: return *this; } - inline Wrp& alignC(){ + Wrp& alignC(){ obj->setAlignment(Qt::AlignCenter); return *this; } - inline Wrp& alignR(){ + Wrp& alignR(){ obj->setAlignment(Qt::AlignRight); return *this; } diff --git a/LedOK/gutil/qjson.cpp b/LedOK/gutil/qjson.cpp index a95075c..0156b4e 100644 --- a/LedOK/gutil/qjson.cpp +++ b/LedOK/gutil/qjson.cpp @@ -1,4 +1,12 @@ #include "qjson.h" +#include "qdebug.h" + +QDebug operator<<(QDebug debug, const JValue &val) { + auto old = debug.autoInsertSpaces(); + debug.noquote().nospace() << JToBytes(val, "\t"); + debug.setAutoInsertSpaces(old); + return debug; +} inline QChar readOne(QTextStream &in) { QChar ch; diff --git a/LedOK/gutil/qjson.h b/LedOK/gutil/qjson.h index 48f1662..0f09435 100644 --- a/LedOK/gutil/qjson.h +++ b/LedOK/gutil/qjson.h @@ -1,7 +1,7 @@ #ifndef QJSON_H #define QJSON_H -#include "cu.h" +#include "cpp.h" #include "QtCore/qhashfunctions.h" #include @@ -11,99 +11,154 @@ using JArray = Vector; class JValue { public: - int data[2]{0}; + long long data = 0; enum Type { - Null, Bool, Int, Long, Double, Obj, Array, Str + Null, Long, Ulong, Double, Bool, Obj, Array, Str }; - Type type{Null}; + Type type = Null; JValue(Type = Null) {} - JValue(bool b) : type(Bool) {data[0] = b;} - JValue(int n) : type(Int) {data[0] = n;} - JValue(qint64 n) : type(Long) {*(qint64*) data = n;} - JValue(double d) : type(Double) {*(double*) data = d;} - JValue(const JObj &o) : type(Obj) {new (data) JObj(o);} - JValue(const JArray &a) : type(Array) {new (data) JArray(a);} - JValue(const QString &s) : type(Str) {*(SharedData**) data = new SharedData{s, 1};} + JValue(bool b) : type(Bool) {data = b;} + JValue(int n) : type(Long) {data = n;} + JValue(qint64 n) : type(Long) {data = n;} + JValue(quint64 n) : type(Ulong) {*(quint64*) &data = n;} + JValue(double d) : type(Double) {*(double*) &data = d;} + JValue(const JObj &o) : type(Obj) {new (&data) JObj(o);} + JValue(const JArray &a) : type(Array) {new (&data) JArray(a);} + JValue(JObj &&o) : type(Obj) {new (&data) JObj(std::move(o));} + JValue(JArray &&a) : type(Array) {new (&data) JArray(std::move(a));} + JValue(const QString &s) : type(Str) {*(SharedData**) &data = new SharedData{1, s};} + JValue(QString &&s) : type(Str) {*(SharedData**) &data = new SharedData{1, std::move(s)};} JValue(const char *s) : JValue(QString::fromUtf8(s)) {} - JValue(const JValue &other) { - type = other.type; - if(type==Obj) new (data) JObj(*(JObj*) other.data); - else if(type==Array) new (data) JArray(*(JArray*) other.data); - else { - data[0] = other.data[0]; - data[1] = other.data[1]; - if(type==Str) (*(SharedData**) data)->cnt++; - } - } ~JValue() { if(type < Obj) return; - else if(type==Obj) ((JObj*) data)->~JObj(); - else if(type==Array) ((JArray*) data)->~JArray(); + else if(type==Obj) ((JObj*) &data)->~JObj(); + else if(type==Array) ((JArray*) &data)->~JArray(); else if(type==Str) { - auto ptr = *(SharedData**) data; + auto ptr = *(SharedData**) &data; if(ptr->cnt > 1) ptr->cnt--; else delete ptr; } } + JValue(const JValue &other) { + type = other.type; + if(type==Obj) new (&data) JObj(*(JObj*) &other.data); + else if(type==Array) new (&data) JArray(*(JArray*) &other.data); + else { + data = other.data; + if(type==Str) (*(SharedData**) &data)->cnt++; + } + } JValue &operator=(const JValue &other) { this->~JValue(); new (this) JValue(other); return *this; } + JValue(JValue &&other) noexcept : data(other.data), type(other.type) { + other.data = 0; + other.type = Null; + } + JValue &operator=(JValue &&other) noexcept { + std::swap(data, other.data); + std::swap(type, other.type); + return *this; + } bool isNull() const {return type==Null;} + bool isStr() const {return type==Str;} bool isObj() const {return type==Obj;} bool isArray() const {return type==Array;} bool toBool(bool def = false) const { - return type==Null ? def : data[0] || data[1]; + return type==Null ? def : data; } int toInt(int def = 0) const { - if(type==Bool || type==Int) return data[0]; - if(type==Long) return *(qint64*) data; - if(type==Double) return *(double*) data; - return def; + return toLong(def); } qint64 toLong(qint64 def = 0) const { - if(type==Bool || type==Int) return data[0]; - if(type==Long) return *(qint64*) data; - if(type==Double) return *(double*) data; + if(type==Long || type==Bool) return data; + if(type==Double) return *(double*) &data; + if(type==Ulong) return *(quint64*) &data; + return def; + } + quint64 toULong(quint64 def = 0) const { + if(type==Ulong) return *(quint64*) &data; + if(type==Long || type==Bool) return data; + if(type==Double) return *(double*) &data; return def; } double toDouble(double def = 0) const { - if(type==Bool || type==Int) return data[0]; - if(type==Long) return *(qint64*) data; - if(type==Double) return *(double*) data; + if(type==Double) return *(double*) &data; + if(type==Long || type==Bool) return data; + if(type==Ulong) return *(quint64*) &data; return def; } QString toStr(const QString &def = "") const { - if(type==Bool) return data[0] ? "true" : "false"; - if(type==Int) return QString::number(data[0]); - if(type==Long) return QString::number(*(qint64*) data); - if(type==Double) return QString::number(*(double*) data); - if(type==Str) return (*(SharedData**) data)->data; + if(type==Str) return (*(SharedData**) &data)->data; + if(type==Long) return QString::number(data); + if(type==Double) return QString::number(*(double*) &data); + if(type==Bool) return data ? "true" : "false"; + if(type==Ulong) return QString::number(*(quint64*) &data); return def; } + QString toString(const QString &def = "") const { + return toStr(def); + } JObj toObj() const { - if(type==Obj) return *(JObj*) data; + if(type==Obj) return *(JObj*) &data; return JObj(); } JArray toArray() const { - if(type==Array) return *(JArray*) data; + if(type==Array) return *(JArray*) &data; return JArray(); } + const JValue operator[](const QString &key) const { - return type==Obj ? (*(JObj*) data)[key] : JValue(); + return type==Obj ? (*(const JObj*) &data)[key] : JValue(); } const JValue operator[](int i) const { - return type==Array ? (*(JArray*) data)[i] : JValue(); + return type==Array ? (*(const JArray*) &data)[i] : JValue(); + } + + JArray::iterator begin() const noexcept { + return type==Array ? ((const JArray*) &data)->begin() : JArray::iterator(); + } + JArray::iterator end() const noexcept { + return type==Array ? ((const JArray*) &data)->end() : JArray::iterator(); + } + size_t size() const noexcept { + if(type==Array) return ((const JArray*) &data)->size(); + else if(type==Obj) return ((const JObj*) &data)->size(); + return 0; + } + + bool operator==(const JValue &other) const { + if(type==other.type) { + if(data==other.data) return true; + if(type==Null) return true; + if(type<=Double) return false; + if(type==Bool) return ((bool)data)==(bool)other.data; + if(type==Str) return (*(SharedData**) &data)->data==(*(SharedData**) &other.data)->data; + if(type==Obj) return *(JObj*) &data == *(JObj*) &other.data; + if(type==Array) return *(JArray*) &data == *(JArray*) &other.data; + } else { + if(type>Double || other.type>Double || type==Null || other.type==Null) return false; + if(type==Double || other.type==Double) return toDouble()==other.toDouble(); + if(type==Long) return data==other.toLong(); + else return toLong()==other.data; + } + return false; + } + bool operator!=(const JValue &other) const { + return ! (*this==other); } private: JValue(const void *) = delete; // avoid implicit conversions from char * to bool }; +QDebug operator<<(QDebug debug, const JValue &val); + class JParser { public: JParser(QTextStream &in) : in(in) { @@ -160,7 +215,7 @@ public: #endif } - void write(const JValue &obj); + void write(const JValue &value); void writeStr(const QString &str); void writeMap(const JObj &map); void writeList(const JArray &objs); @@ -170,21 +225,21 @@ protected: int cnt{0}; }; -inline QString JToStr(const JValue &obj, QString indent = "") { +inline QString JToStr(const JValue &value, QString indent = "") { QString json; QTextStream out(&json); - JOut(out, indent).write(obj); + JOut(out, indent).write(value); return json; } -inline QByteArray JToBytes(const JValue &obj, QString indent = "") { +inline QByteArray JToBytes(const JValue &value, QString indent = "") { QByteArray json; QTextStream out(&json); - JOut(out, indent).write(obj); + JOut(out, indent).write(value); return json; } -inline QTextStream::Status JWrite(const JValue &obj, QIODevice *device, QString indent = "") { +inline QTextStream::Status JWrite(const JValue &value, QIODevice *device, QString indent = "") { QTextStream out(device); - JOut(out, indent).write(obj); + JOut(out, indent).write(value); return out.status(); } diff --git a/LedOK/gutil/qnetwork.cpp b/LedOK/gutil/qnetwork.cpp index 3bbc591..279d728 100644 --- a/LedOK/gutil/qnetwork.cpp +++ b/LedOK/gutil/qnetwork.cpp @@ -57,11 +57,13 @@ bool TcpSocket::waitForDisconnected(int msecs) { return connAndExec(msecs, &loop); } bool TcpSocket::waitForBytesWritten(int msecs) { + if(bytesToWrite() == 0) return true; QEventLoop loop; connect(this, &QTcpSocket::bytesWritten, &loop, &QEventLoop::quit); return connAndExec(msecs, &loop); } bool TcpSocket::waitForReadyRead(int msecs) { + if(bytesAvailable()) return true; QEventLoop loop; connect(this, &QTcpSocket::readyRead, &loop, &QEventLoop::quit); return connAndExec(msecs, &loop); diff --git a/LedOK/gutil/qnetwork.h b/LedOK/gutil/qnetwork.h index b2938e9..6505721 100644 --- a/LedOK/gutil/qnetwork.h +++ b/LedOK/gutil/qnetwork.h @@ -1,6 +1,7 @@ #ifndef QNETWORK_H #define QNETWORK_H +#include "qjson.h" #include #include #include @@ -65,6 +66,15 @@ public: if(mAccess==0) mAccess = netAccess(); return mAccess->post(*this, data); } + inline QNetworkReply *post(const char *data) { + if(mAccess==0) mAccess = netAccess(); + return mAccess->post(*this, data); + } + + inline QNetworkReply *post(const JValue &json) { + setRawHeader("Content-Type", "application/json"); + return post(JToBytes(json)); + } inline QNetworkReply *post(const QJsonDocument &json) { setRawHeader("Content-Type", "application/json"); return post(json.toJson(QJsonDocument::Compact)); @@ -86,6 +96,7 @@ QString errStr(QNetworkReply *); QString errStrWithData(QNetworkReply *, QJsonDocument * = 0); inline int waitFinished(QNetworkReply *reply, bool excludeUser = false) { + if(reply->isFinished()) return 0; QEventLoop loop; QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); return excludeUser ? loop.exec(QEventLoop::ExcludeUserInputEvents) : loop.exec(); diff --git a/LedOK/base/waitingdlg.cpp b/LedOK/gutil/qwaitingdlg.cpp similarity index 93% rename from LedOK/base/waitingdlg.cpp rename to LedOK/gutil/qwaitingdlg.cpp index 96c46cd..c1c9189 100644 --- a/LedOK/base/waitingdlg.cpp +++ b/LedOK/gutil/qwaitingdlg.cpp @@ -1,120 +1,120 @@ -#include "waitingdlg.h" -#include "gutil/qgui.h" -#include -#include -#include - -WaitingDlg::WaitingDlg(QWidget *parent, QString text, QString sucText) : QDialog{parent, Qt::Tool}, sucText(sucText) { - setAttribute(Qt::WA_DeleteOnClose); - setModal(true); - - auto vBox = new VBox(this); - - mIndicator = new WaitingIndicator(this); - mIndicator->setFixedSize(120, 120); - vBox->addWidget(mIndicator, 0, Qt::AlignCenter); - - fdText = new QLabel(text); - fdText->setAlignment(Qt::AlignCenter); - gFont(fdText, 18, true); - vBox->addWidget(fdText); -} - -void WaitingDlg::closeEvent(QCloseEvent *event) { - if(showTimerId) { - killTimer(showTimerId); - showTimerId = 0; - } - if(closeTimerId) { - killTimer(closeTimerId); - closeTimerId = 0; - } - QDialog::closeEvent(event); -} -void WaitingDlg::timerEvent(QTimerEvent *event) { - if(showTimerId==event->timerId()) { - killTimer(showTimerId); - showTimerId = 0; - show(); - } else if(closeTimerId==event->timerId()) { - killTimer(closeTimerId); - closeTimerId = 0; - close(); - } else QDialog::timerEvent(event); -} -void WaitingDlg::show() { - QDialog::show(); - raise(); - activateWindow(); -} -void WaitingDlg::showLater() { - if(isVisible()) return; - if(showTimerId) killTimer(showTimerId); - showTimerId = startTimer(200); -} -void WaitingDlg::success() { - fdText->setText(sucText.isEmpty() ? tr("Success") : sucText); - mIndicator->success(); - if(showTimerId) { - killTimer(showTimerId); - showTimerId = 0; - } - if(! isVisible()) show(); - if(closeTimerId) killTimer(closeTimerId); - closeTimerId = startTimer(1000); -} - - -void WaitingIndicator::success() { - if(timerId > 0) killTimer(timerId); - timerId = -1; - angle = 0; - update(); -} - -void WaitingIndicator::timerEvent(QTimerEvent *event) { - if(timerId!=event->timerId()) QWidget::timerEvent(event); - else if(isVisible()) { - angle += 30; - if(angle>=360) angle -= 360; - update(); - } else if(timerId > 0) { - killTimer(timerId); - timerId = 0; - angle = 0; - } -} - -void WaitingIndicator::paintEvent(QPaintEvent *) { - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - if(timerId > 0) { - int radius = qMin(width(), height()) * 0.33; - int innerRadius = radius >> 1; - QPen pen(mColor, radius / 6, Qt::SolidLine, Qt::RoundCap); - painter.translate(width()>>1, height()>>1); - auto color = mColor; - for(int i=0; i<12; ++i) { - if(i) { - color.setAlphaF(1 - i/12.0); - pen.setColor(color); - painter.rotate(-30); - } else if(angle) painter.rotate(angle); - painter.setPen(pen); - painter.drawLine(0, innerRadius, 0, radius); - } - } else if(timerId==0) timerId = startTimer(33); - else { - int radius = qMin(width(), height()) >> 1; - int lineWidth = radius / 8; - radius -= lineWidth>>1; - QPen pen(QColor(0x00aa00), lineWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); - painter.setPen(pen); - painter.translate(width()>>1, height()>>1); - painter.drawEllipse(QPoint(0, 0), radius, radius); - QPainterPath path({-0.8*radius, 0}); - path.lineTo(-0.25*radius, 0.6*radius); - path.lineTo(0.6*radius, -0.5*radius); - painter.drawPath(path); - } -} +#include "qwaitingdlg.h" +#include "qgui.h" +#include +#include +#include + +WaitingDlg::WaitingDlg(QWidget *parent, QString text, QString sucText) : QDialog{parent, Qt::Tool}, sucText(sucText) { + setAttribute(Qt::WA_DeleteOnClose); + setModal(true); + + auto vBox = new VBox(this); + + mIndicator = new WaitingIndicator(this); + mIndicator->setFixedSize(100, 100); + vBox->addWidget(mIndicator, 0, Qt::AlignCenter); + + fdText = new QLabel(text); + fdText->setAlignment(Qt::AlignCenter); + gFont(fdText, 18, true); + vBox->addWidget(fdText); +} + +void WaitingDlg::closeEvent(QCloseEvent *event) { + if(showTimerId) { + killTimer(showTimerId); + showTimerId = 0; + } + if(closeTimerId) { + killTimer(closeTimerId); + closeTimerId = 0; + } + QDialog::closeEvent(event); +} +void WaitingDlg::timerEvent(QTimerEvent *event) { + if(showTimerId==event->timerId()) { + killTimer(showTimerId); + showTimerId = 0; + show(); + } else if(closeTimerId==event->timerId()) { + killTimer(closeTimerId); + closeTimerId = 0; + close(); + } else QDialog::timerEvent(event); +} +void WaitingDlg::show() { + QDialog::show(); + raise(); + activateWindow(); +} +void WaitingDlg::showLater() { + if(isVisible()) return; + if(showTimerId) killTimer(showTimerId); + showTimerId = startTimer(200); +} +void WaitingDlg::success() { + fdText->setText(sucText.isEmpty() ? tr("Success") : sucText); + mIndicator->success(); + if(showTimerId) { + killTimer(showTimerId); + showTimerId = 0; + } + if(! isVisible()) show(); + if(closeTimerId) killTimer(closeTimerId); + closeTimerId = startTimer(keepTime); +} + + +void WaitingIndicator::success() { + if(timerId > 0) killTimer(timerId); + timerId = -1; + angle = 0; + update(); +} + +void WaitingIndicator::timerEvent(QTimerEvent *event) { + if(timerId!=event->timerId()) QWidget::timerEvent(event); + else if(isVisible()) { + angle += 30; + if(angle>=360) angle -= 360; + update(); + } else if(timerId > 0) { + killTimer(timerId); + timerId = 0; + angle = 0; + } +} + +void WaitingIndicator::paintEvent(QPaintEvent *) { + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + if(timerId > 0) { + int radius = qMin(width(), height()) * 0.33; + int innerRadius = radius >> 1; + QPen pen(mColor, radius / 6, Qt::SolidLine, Qt::RoundCap); + painter.translate(width()>>1, height()>>1); + auto color = mColor; + for(int i=0; i<12; ++i) { + if(i) { + color.setAlphaF(1 - i/12.0); + pen.setColor(color); + painter.rotate(-30); + } else if(angle) painter.rotate(angle); + painter.setPen(pen); + painter.drawLine(0, innerRadius, 0, radius); + } + } else if(timerId==0) timerId = startTimer(33); + else { + int radius = qMin(width(), height()) >> 1; + int lineWidth = radius / 8; + radius -= lineWidth>>1; + QPen pen(QColor(0x00aa00), lineWidth, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + painter.setPen(pen); + painter.translate(width()>>1, height()>>1); + painter.drawEllipse(QPoint(0, 0), radius, radius); + QPainterPath path({-0.8*radius, 0}); + path.lineTo(-0.25*radius, 0.6*radius); + path.lineTo(0.6*radius, -0.5*radius); + painter.drawPath(path); + } +} diff --git a/LedOK/base/waitingdlg.h b/LedOK/gutil/qwaitingdlg.h similarity index 90% rename from LedOK/base/waitingdlg.h rename to LedOK/gutil/qwaitingdlg.h index 7beb2ec..477c203 100644 --- a/LedOK/base/waitingdlg.h +++ b/LedOK/gutil/qwaitingdlg.h @@ -1,50 +1,51 @@ -#ifndef WAITINGDLG_H -#define WAITINGDLG_H - -#include -#include -#include - -class WaitingIndicator : public QWidget { - Q_OBJECT -public: - using QWidget::QWidget; - QColor mColor{0x0088ff}; -public slots: - void success(); -protected: - void timerEvent(QTimerEvent * event) override; - void paintEvent(QPaintEvent * event) override; - - int angle{0}; - int timerId{0}; -}; - -class WaitingDlg : public QDialog { - Q_OBJECT -public: - explicit WaitingDlg(QWidget *parent = nullptr, QString text = 0, QString sucText = 0); - - inline void connAbort(QNetworkReply *reply) { - connect(this, &WaitingDlg::rejected, reply, [reply] { - reply->blockSignals(true); - reply->abort(); - reply->blockSignals(false); - reply->deleteLater(); - }); - } - QLabel *fdText; - QString sucText; - WaitingIndicator *mIndicator; -public slots: - void show(); - void showLater(); - void success(); -protected: - void timerEvent(QTimerEvent *) override; - void closeEvent(QCloseEvent *) override; -private: - int closeTimerId{0}, showTimerId{0}; -}; - -#endif // WAITINGDLG_H +#ifndef QWAITINGDLG_H +#define QWAITINGDLG_H + +#include +#include +#include + +class WaitingIndicator : public QWidget { + Q_OBJECT +public: + using QWidget::QWidget; + QColor mColor{0x0088ff}; +public slots: + void success(); +protected: + void timerEvent(QTimerEvent * event) override; + void paintEvent(QPaintEvent * event) override; + + int angle{0}; + int timerId{0}; +}; + +class WaitingDlg : public QDialog { + Q_OBJECT +public: + explicit WaitingDlg(QWidget *parent = nullptr, QString text = 0, QString sucText = 0); + + inline void connAbort(QNetworkReply *reply) { + connect(this, &WaitingDlg::rejected, reply, [reply] { + reply->blockSignals(true); + reply->abort(); + reply->blockSignals(false); + reply->deleteLater(); + }); + } + QLabel *fdText; + QString sucText; + WaitingIndicator *mIndicator; + int keepTime = 750; +public slots: + void show(); + void showLater(); + void success(); +protected: + void timerEvent(QTimerEvent *) override; + void closeEvent(QCloseEvent *) override; +private: + int closeTimerId{0}, showTimerId{0}; +}; + +#endif // QWAITINGDLG_H diff --git a/LedOK/main.cpp b/LedOK/main.cpp index 0c0cffa..f6b70c5 100644 --- a/LedOK/main.cpp +++ b/LedOK/main.cpp @@ -1,6 +1,6 @@ #include "mainwindow.h" #include -#include +#include #include #include #include @@ -27,7 +27,6 @@ LONG WINAPI handleException(_EXCEPTION_POINTERS *excep) { } #endif -QString gFileHome; QString css; int main(int argc, char *argv[]) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); @@ -36,8 +35,13 @@ int main(int argc, char *argv[]) { QApplication::setOrganizationName("Shanghai Xixun Electronic Technology Co., Ltd."); QApplication::setOrganizationDomain("www.ledok.cn"); QApplication::setApplicationName("LedOK Express"); + QApplication::setStyle("Fusion"); QApplication a(argc, argv); - QApplication::setStyle(QStyleFactory::create("Fusion")); + + QSplashScreen splash(QPixmap(":/res/splash.png")); + splash.show(); + splash.showMessage(QObject::tr("Setting up the LedOK Express..."), Qt::AlignRight | Qt::AlignTop, Qt::white); + QFile file(":/css.css"); if(file.exists() && file.open(QFile::ReadOnly)) { a.setStyleSheet(css = file.readAll()); @@ -46,11 +50,17 @@ int main(int argc, char *argv[]) { QFont font; font.setFamilies(QStringList{"Arial","PingFang SC","Hiragino Sans GB","STHeiti","Microsoft YaHei","WenQuanYi Micro Hei","sans-serif"}); a.setFont(font); + auto plt = a.palette(); + plt.setBrush(QPalette::AlternateBase, plt.brush(QPalette::Active, QPalette::Window)); + plt.setBrush(QPalette::Inactive, QPalette::Highlight, plt.brush(QPalette::Active, QPalette::Highlight)); + plt.setBrush(QPalette::Inactive, QPalette::HighlightedText, plt.brush(QPalette::Active, QPalette::HighlightedText)); + a.setPalette(plt); + + QTranslator qtTrans; + if(qtTrans.load(QLocale(), "qt", "_", "translations")) QCoreApplication::installTranslator(&qtTrans); gFileHome = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); - QSplashScreen splash(QPixmap(":/res/splash.png")); - splash.show(); - splash.showMessage(QObject::tr("Setting up the LedOK Express..."), Qt::AlignRight | Qt::AlignTop, Qt::white); + #ifdef _MSC_VER SetUnhandledExceptionFilter(handleException); #endif diff --git a/LedOK/mainwindow.cpp b/LedOK/mainwindow.cpp index 3ee0b28..1641f80 100644 --- a/LedOK/mainwindow.cpp +++ b/LedOK/mainwindow.cpp @@ -2,13 +2,11 @@ #include "gutil/qgui.h" #include "cfg.h" #include "globaldefine.h" -#include "deviceitem.h" #include "devicepanel.h" #include "gutil/qnetwork.h" #include "device/upgradeapkdialog.h" #include #include -#include #include #include #include @@ -18,7 +16,8 @@ #include #include #include -#include +#include +#include extern QPoint gPlayPos; @@ -81,16 +80,21 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { actJa->setObjectName("ja"); menuLang->addAction(actJa); + auto actPt = new QAction("Português"); + actPt->setCheckable(true); + actPt->setObjectName("pt"); + menuLang->addAction(actPt); + langGrp = new QActionGroup(menuLang); langGrp->addAction(actCN); langGrp->addAction(actTW); langGrp->addAction(actEn); langGrp->addAction(actJa); + langGrp->addAction(actPt); connect(menuLang, &QMenu::triggered, this, [this](QAction* action) { auto lanName = action->objectName(); - translator.load("app_"+lanName, ":/i18n"); - transQt.load("qt_"+lanName, ":/i18n"); + qInfo() << "load translators" << lanName << translator.load("app_"+lanName, ":/i18n"); }); QSettings settings; @@ -101,21 +105,20 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { else if(langName.endsWith("TW")) actLan = actTW; else if(langName.startsWith("en")) actLan = actEn; else if(langName.startsWith("ja")) actLan = actJa; + else if(langName.startsWith("pt")) actLan = actPt; } if(actLan==0) { langName = QLocale().name(); if(langName.endsWith("TW")) actLan = actTW; else if(langName.startsWith("en")) actLan = actEn; else if(langName.startsWith("ja")) actLan = actJa; + else if(langName.startsWith("pt")) actLan = actPt; else actLan = actCN; } actLan->setChecked(true); - auto lanName = actLan->objectName(); - translator.load("app_"+lanName, ":/i18n"); - transQt.load("qt_"+lanName, ":/i18n"); - QApplication::installTranslator(&translator); - QApplication::installTranslator(&transQt); + emit menuLang->triggered(actLan); + QCoreApplication::installTranslator(&translator); auto geo = settings.value("MainGeo").toRect(); if(geo.width()>=800 && geo.height()>=500 && geo.x()>=-600 && geo.x()<=1280 && geo.y()>=-200 && geo.y()<=800) setGeometry(geo); @@ -127,7 +130,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { setWindowTitle("LedOK Express"); icon.load(":/res/Logo.png"); titlePos = QPointF(26, 80); - iconPos = QPointF(38, 20); + iconPos = QRectF(38, 20, 64, 64); auto plt = palette(); plt.setBrush(QPalette::Window, QColor(0xdddddd)); setPalette(plt); @@ -135,10 +138,10 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { //项目保存的文档路径 QString doc_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); if(!doc_path.isEmpty()) { - QDir app_dir = QDir(doc_path + "/" + QApplication::applicationName()); + QDir app_dir = QDir(doc_path + "/" + QCoreApplication::applicationName()); if(!app_dir.exists()) { QDir doc_dir(doc_path); - doc_dir.mkdir(QApplication::applicationName()); + doc_dir.mkdir(QCoreApplication::applicationName()); } } @@ -172,8 +175,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { actFirmware = new QAction(tr("firmware manager")); connect(actFirmware, &QAction::triggered, this, [this] { - UpgradeApkDialog dlg(this); - dlg.exec(); + new UpgradeApkDialog(this); }); menu_setting->addAction(actFirmware); @@ -193,22 +195,30 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { fdTrans->setChecked(gVideoTranscoding); vBox->addWidget(fdTrans); - auto hbox = new HBox(vBox); - hbox->setContentsMargins(-1, 0, -1, -1); + auto hBox = new HBox(vBox); + hBox->setContentsMargins(-1, 0, -1, -1); auto fdAnti = new QCheckBox(tr("Text antialiasing")); fdAnti->setChecked(gTextAntialiasing); - hbox->addWidget(fdAnti, 0, Qt::AlignTop); + hBox->addWidget(fdAnti, 0, Qt::AlignTop); auto fdAntiTip = new QLabel(tr("TextAntilaTip")); fdAntiTip->setStyleSheet("QLabel{color: #f00;}"); fdAntiTip->setWordWrap(true); - hbox->addWidget(fdAntiTip, 1); + hBox->addWidget(fdAntiTip, 1); auto fdWidthSplit = new QCheckBox(tr("Width Split")); fdWidthSplit->setChecked(gWidthSplit); vBox->addWidget(fdWidthSplit); + hBox = new HBox(vBox); + hBox->addLabel(tr("Program Send Batch")); + auto fdSendBatch = new QSpinBox; + fdSendBatch->setRange(1, 20); + fdSendBatch->setValue(gSendBatch); + hBox->addWidget(fdSendBatch); + hBox->addStretch(); + auto fdHideDetect = new QCheckBox(tr("Hide Detect Button")); fdHideDetect->setChecked(gHideDetect); vBox->addWidget(fdHideDetect); @@ -226,6 +236,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { settings.setValue("VideoTranscoding", gVideoTranscoding = fdTrans->isChecked()); settings.setValue("TextAntialiasing", gTextAntialiasing = fdAnti->isChecked()); settings.setValue("WidthSplit", gWidthSplit = fdWidthSplit->isChecked()); + settings.setValue("SendBatch", gSendBatch = fdSendBatch->value()); settings.setValue("HideDetect", gHideDetect = fdHideDetect->isChecked()); settings.setValue("GuangYingPin", gShowLora = fdShowLora->isChecked()); dlg.accept(); @@ -322,7 +333,7 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { auto res = msgBox.exec(); qFile.close(); if(res != QDialog::Accepted) return; - QApplication::quit(); + QCoreApplication::quit(); QDesktopServices::openUrl(QUrl::fromLocalFile(filePath)); }); menu_setting->addAction(act_update); @@ -457,24 +468,22 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { } mDevicePanel->mainPanelIdx = id; if(id==MainPage_DeviceManager) { //设备信息列表页面 - mDevicePanel->mDeviceTable->hideColumn(0); - mDevicePanel->mDeviceTable->fdIsSelAll->hide(); + mDevicePanel->mDeviceTable->hideColumn("check"); + mDevicePanel->mDeviceTable->fdCheckAll->hide(); + mDevicePanel->fdCardNumInfo->hide(); if(mDevicePanel->mDeviceCtrlPanel) { - for(int j=DeviceTable_ScreenSize;jmDeviceTable->showColumn(j); + for(int j="screenSize"**mDevicePanel->mDeviceTable; jmDeviceTable->columnCount(); j++) mDevicePanel->mDeviceTable->showColumn(j); mDevicePanel->mDeviceTable->setMaximumWidth(0xffffff); - mDevicePanel->mDeviceTable->setSelectionMode(QAbstractItemView::NoSelection); mDevicePanel->mDeviceCtrlPanel->hide(); - mDevicePanel->fdCardNumInfo->hide(); } } else if(id==MainPage_Setting) { //终端控制页面 - mDevicePanel->mDeviceTable->showColumn(0); - mDevicePanel->mDeviceTable->fdIsSelAll->show(); - for(int j=DeviceTable_ScreenSize; jmDeviceTable->hideColumn(j); + mDevicePanel->mDeviceTable->showColumn("check"); + mDevicePanel->mDeviceTable->fdCheckAll->show(); + mDevicePanel->fdCardNumInfo->show(); + for(int j="screenSize"**mDevicePanel->mDeviceTable; jmDeviceTable->columnCount(); j++) mDevicePanel->mDeviceTable->hideColumn(j); if(mDevicePanel->mDeviceCtrlPanel) mDevicePanel->mDeviceCtrlPanel->show(); else mDevicePanel->newCtrl(); mDevicePanel->mDeviceTable->setMaximumWidth(340); - mDevicePanel->mDeviceTable->setSelectionMode(QAbstractItemView::SingleSelection); - mDevicePanel->fdCardNumInfo->show(); } }); @@ -522,12 +531,14 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { hBox->addWidget(fdDetectCard); hBox->addStretch(); - hBox->addWidget(new QLabel("V" APP_VERSION" - " __DATE__)); + hBox->addLabel("V" APP_VERSION" - " __DATE__); + gApkHome = settings.value("ApkHome").toString(); gVideoCompress = settings.value("VideoCompress", true).toBool(); gVideoTranscoding = settings.value("VideoTranscoding", true).toBool(); gTextAntialiasing = settings.value("TextAntialiasing", false).toBool(); gWidthSplit = settings.value("WidthSplit", false).toBool(); + gSendBatch = settings.value("SendBatch", 5).toInt(); gHideDetect = settings.value("HideDetect", false).toBool(); gShowLora = settings.value("GuangYingPin", false).toBool(); @@ -574,7 +585,6 @@ MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) { QColorDialog::setStandardColor(ci++, QColor(mids[i], lows[i], higs[i])); } } - MainWindow::~MainWindow() { QSettings settings; auto act = langGrp->checkedAction(); @@ -582,20 +592,18 @@ MainWindow::~MainWindow() { settings.setValue("MainGeo", normalGeometry()); settings.setValue("MainIsMax", isMaximized()); settings.setValue("PlayPos", gPlayPos); + if(! gApkHome.isEmpty()) settings.setValue("ApkHome", gApkHome); if(mDevicePanel->fdIP) { auto ipstr = mDevicePanel->fdIP->toPlainText(); if(! ipstr.isEmpty()) settings.setValue("SpecifyIP", ipstr); else settings.remove("SpecifyIP"); } - if(m_pTimerSendResoreIpOneKey) { - if(m_pTimerSendResoreIpOneKey->isActive()) m_pTimerSendResoreIpOneKey->stop(); - delete m_pTimerSendResoreIpOneKey; - } if(mProgPanel) { settings.setValue("ProgramListSortColumn", mProgPanel->mProgTree->sortColumn()); settings.setValue("ProgramListSortOrder", mProgPanel->mProgTree->header()->sortIndicatorOrder()); } } + void MainWindow::changeEvent(QEvent *event) { BaseWin::changeEvent(event); if(event->type() == QEvent::LanguageChange) transUi(); diff --git a/LedOK/mainwindow.h b/LedOK/mainwindow.h index 46d0bdc..f5a2ed4 100644 --- a/LedOK/mainwindow.h +++ b/LedOK/mainwindow.h @@ -21,7 +21,6 @@ protected: private: QJsonObject updates; QTranslator translator; - QTranslator transQt; LoQTitleBar *m_wTitle; QActionGroup *langGrp; QAction *act_lang; @@ -38,7 +37,6 @@ private: DevicePanel *mDevicePanel{0}; ProgPanel *mProgPanel{0}; mGuangYingPinWidget *m_wGuangYingPinWidget{0}; - QTimer *m_pTimerSendResoreIpOneKey{0}; bool hasNewVer{false}; }; diff --git a/LedOK/pBgsZb.json b/LedOK/pBgsZb.json deleted file mode 100644 index f6c23da..0000000 --- a/LedOK/pBgsZb.json +++ /dev/null @@ -1 +0,0 @@ -[{"excluded":[],"includePaths":["D:/_workspace/qt/LedOK/ffmpeg/include","D:/_workspace/qt/LedOK/xlsx","D:/_workspace/qt/LedOK/JQLibrary/include","D:/_workspace/qt/LedOK/QSimpleUpdater/include","D:/_apps/Qt/5.15.2/msvc2019/include","D:/_apps/Qt/5.15.2/msvc2019/include/QtOpenGL","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebEngineWidgets","D:/_apps/Qt/5.15.2/msvc2019/include/QtPrintSupport","D:/_apps/Qt/5.15.2/msvc2019/include/QtWidgets","D:/_apps/Qt/5.15.2/msvc2019/include/QtMultimedia","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebEngineCore","D:/_apps/Qt/5.15.2/msvc2019/include/QtQuick","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui/5.15.2","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui/5.15.2/QtGui","D:/_apps/Qt/5.15.2/msvc2019/include/QtGui","D:/_apps/Qt/5.15.2/msvc2019/include/QtANGLE","D:/_apps/Qt/5.15.2/msvc2019/include/QtQmlModels","D:/_apps/Qt/5.15.2/msvc2019/include/QtWebChannel","D:/_apps/Qt/5.15.2/msvc2019/include/QtQml","D:/_apps/Qt/5.15.2/msvc2019/include/QtNetwork","D:/_apps/Qt/5.15.2/msvc2019/include/QtConcurrent","D:/_apps/Qt/5.15.2/msvc2019/include/QtSerialPort","D:/_apps/Qt/5.15.2/msvc2019/include/QtPositioning","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore/5.15.2","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore/5.15.2/QtCore","D:/_apps/Qt/5.15.2/msvc2019/include/QtCore","D:/_workspace/qt/LedOK","D:/_workspace/qt/LedOK"],"projectFile":"D:/_workspace/qt/LedOK/LedOK.pro","sources":["D:/_workspace/qt/LedOK/JQLibrary/include/JQHttpServer.h","D:/_workspace/qt/LedOK/JQLibrary/include/JQNet.h","D:/_workspace/qt/LedOK/JQLibrary/include/jqdeclare.hpp","D:/_workspace/qt/LedOK/JQLibrary/src/JQHttpServer.cpp","D:/_workspace/qt/LedOK/JQLibrary/src/JQNet.cpp","D:/_workspace/qt/LedOK/LoQClass/extendedgroupbox.cpp","D:/_workspace/qt/LedOK/LoQClass/extendedgroupbox.h","D:/_workspace/qt/LedOK/LoQClass/locolorselector.cpp","D:/_workspace/qt/LedOK/LoQClass/locolorselector.h","D:/_workspace/qt/LedOK/LoQClass/lodateselector.cpp","D:/_workspace/qt/LedOK/LoQClass/lodateselector.h","D:/_workspace/qt/LedOK/LoQClass/loqheaderviewcheckbox.cpp","D:/_workspace/qt/LedOK/LoQClass/loqheaderviewcheckbox.h","D:/_workspace/qt/LedOK/LoQClass/loqtitlebar.cpp","D:/_workspace/qt/LedOK/LoQClass/loqtitlebar.h","D:/_workspace/qt/LedOK/LoQClass/loqtreewidget.cpp","D:/_workspace/qt/LedOK/LoQClass/loqtreewidget.h","D:/_workspace/qt/LedOK/LoUIClass/aboutdlg.cpp","D:/_workspace/qt/LedOK/LoUIClass/aboutdlg.h","D:/_workspace/qt/LedOK/LoUIClass/changepasswordform.cpp","D:/_workspace/qt/LedOK/LoUIClass/changepasswordform.h","D:/_workspace/qt/LedOK/LoUIClass/customprogressindicator.cpp","D:/_workspace/qt/LedOK/LoUIClass/customprogressindicator.h","D:/_workspace/qt/LedOK/LoUIClass/loemptydialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/loemptydialog.h","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.h","D:/_workspace/qt/LedOK/LoUIClass/pixbmpshowdialog.ui","D:/_workspace/qt/LedOK/LoUIClass/qiplineedit.cpp","D:/_workspace/qt/LedOK/LoUIClass/qiplineedit.h","D:/_workspace/qt/LedOK/LoUIClass/softconfigdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/softconfigdialog.h","D:/_workspace/qt/LedOK/LoUIClass/switchcontrol.cpp","D:/_workspace/qt/LedOK/LoUIClass/switchcontrol.h","D:/_workspace/qt/LedOK/LoUIClass/taesclass.cpp","D:/_workspace/qt/LedOK/LoUIClass/taesclass.h","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.h","D:/_workspace/qt/LedOK/LoUIClass/updateledset3dialog.ui","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.cpp","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.h","D:/_workspace/qt/LedOK/LoUIClass/updaterdialog.ui","D:/_workspace/qt/LedOK/LoUIClass/x_checkboxdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_checkboxdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_spinboxdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_spinboxdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_timeeditdelegate.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_timeeditdelegate.h","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.cpp","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.h","D:/_workspace/qt/LedOK/LoUIClass/x_uimsgboxok.ui","D:/_workspace/qt/LedOK/QSimpleUpdater/include/QSimpleUpdater.h","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.h","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Downloader.ui","D:/_workspace/qt/LedOK/QSimpleUpdater/src/QSimpleUpdater.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Updater.cpp","D:/_workspace/qt/LedOK/QSimpleUpdater/src/Updater.h","D:/_workspace/qt/LedOK/basedlg.cpp","D:/_workspace/qt/LedOK/basedlg.h","D:/_workspace/qt/LedOK/basewin.cpp","D:/_workspace/qt/LedOK/basewin.h","D:/_workspace/qt/LedOK/ccrashstack.cpp","D:/_workspace/qt/LedOK/ccrashstack.h","D:/_workspace/qt/LedOK/cfg.cpp","D:/_workspace/qt/LedOK/cfg.h","D:/_workspace/qt/LedOK/communication/hpptclient.cpp","D:/_workspace/qt/LedOK/communication/hpptclient.h","D:/_workspace/qt/LedOK/communication/network.cpp","D:/_workspace/qt/LedOK/communication/network.h","D:/_workspace/qt/LedOK/communication/taserialthread.cpp","D:/_workspace/qt/LedOK/communication/taserialthread.h","D:/_workspace/qt/LedOK/ffplayer.cpp","D:/_workspace/qt/LedOK/ffplayer.h","D:/_workspace/qt/LedOK/globaldefine.cpp","D:/_workspace/qt/LedOK/globaldefine.h","D:/_workspace/qt/LedOK/gqt.h","D:/_workspace/qt/LedOK/gqueue.h","D:/_workspace/qt/LedOK/main.cpp","D:/_workspace/qt/LedOK/mainwindow.cpp","D:/_workspace/qt/LedOK/mainwindow.h","D:/_workspace/qt/LedOK/mdevicemanager.cpp","D:/_workspace/qt/LedOK/mdevicemanager.h","D:/_workspace/qt/LedOK/mdevicemanager.ui","D:/_workspace/qt/LedOK/mdevicesetting.cpp","D:/_workspace/qt/LedOK/mdevicesetting.h","D:/_workspace/qt/LedOK/mdevicesetting.ui","D:/_workspace/qt/LedOK/mguangyingpinwidget.cpp","D:/_workspace/qt/LedOK/mguangyingpinwidget.h","D:/_workspace/qt/LedOK/mguangyingpinwidget.ui","D:/_workspace/qt/LedOK/mprogrammanager.cpp","D:/_workspace/qt/LedOK/mprogrammanager.h","D:/_workspace/qt/LedOK/mprogrammanager.ui","D:/_workspace/qt/LedOK/mtabwidget.cpp","D:/_workspace/qt/LedOK/mtabwidget.h","D:/_workspace/qt/LedOK/passwordindlg.cpp","D:/_workspace/qt/LedOK/passwordindlg.h","D:/_workspace/qt/LedOK/player/digiclock.cpp","D:/_workspace/qt/LedOK/player/digiclock.h","D:/_workspace/qt/LedOK/player/eleanaclock.cpp","D:/_workspace/qt/LedOK/player/eleanaclock.h","D:/_workspace/qt/LedOK/player/elebase.cpp","D:/_workspace/qt/LedOK/player/elebase.h","D:/_workspace/qt/LedOK/player/eleborder.cpp","D:/_workspace/qt/LedOK/player/eleborder.h","D:/_workspace/qt/LedOK/player/elegif.cpp","D:/_workspace/qt/LedOK/player/elegif.h","D:/_workspace/qt/LedOK/player/eleimg.cpp","D:/_workspace/qt/LedOK/player/eleimg.h","D:/_workspace/qt/LedOK/player/elemultipng.cpp","D:/_workspace/qt/LedOK/player/elemultipng.h","D:/_workspace/qt/LedOK/player/elescroll.cpp","D:/_workspace/qt/LedOK/player/elescroll.h","D:/_workspace/qt/LedOK/player/eletimer.cpp","D:/_workspace/qt/LedOK/player/eletimer.h","D:/_workspace/qt/LedOK/player/elevideo.cpp","D:/_workspace/qt/LedOK/player/elevideo.h","D:/_workspace/qt/LedOK/player/playwin.cpp","D:/_workspace/qt/LedOK/player/playwin.h","D:/_workspace/qt/LedOK/publishform.cpp","D:/_workspace/qt/LedOK/publishform.h","D:/_workspace/qt/LedOK/publishform.ui","D:/_workspace/qt/LedOK/synctimer.cpp","D:/_workspace/qt/LedOK/synctimer.h","D:/_workspace/qt/LedOK/tcpsocket.cpp","D:/_workspace/qt/LedOK/tcpsocket.h","D:/_workspace/qt/LedOK/test.cpp","D:/_workspace/qt/LedOK/tipdialog.cpp","D:/_workspace/qt/LedOK/tipdialog.h","D:/_workspace/qt/LedOK/tipdialog.ui","D:/_workspace/qt/LedOK/tools.cpp","D:/_workspace/qt/LedOK/tools.h","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controladvparamwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessautowidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessmanualwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnessscheduleedit.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlbrightnesswidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlencryptwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmimanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmischedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlhdmiwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlnetconfigwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowermanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlpowerwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controltestwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlverifyclockwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumemanual.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumeschedule.ui","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.h","D:/_workspace/qt/LedOK/wDevicesManager/controlvolumewidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.cpp","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.h","D:/_workspace/qt/LedOK/wDevicesManager/devicescontrollwidget.ui","D:/_workspace/qt/LedOK/wDevicesManager/ledcard.cpp","D:/_workspace/qt/LedOK/wDevicesManager/ledcard.h","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.cpp","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.h","D:/_workspace/qt/LedOK/wDevicesManager/specialdlg.ui","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.cpp","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.h","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyip.ui","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.cpp","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.h","D:/_workspace/qt/LedOK/wDevicesManager/subspecifyiprange.ui","D:/_workspace/qt/LedOK/wDevicesManager/threadupgradeapk.cpp","D:/_workspace/qt/LedOK/wDevicesManager/threadupgradeapk.h","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.cpp","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.h","D:/_workspace/qt/LedOK/wDevicesManager/upgradeapkdialog.ui","D:/_workspace/qt/LedOK/wDevicesManager/wdevicesitem.cpp","D:/_workspace/qt/LedOK/wDevicesManager/wdevicesitem.h","D:/_workspace/qt/LedOK/wDevicesManager/wupgradeapkitem.cpp","D:/_workspace/qt/LedOK/wDevicesManager/wupgradeapkitem.h","D:/_workspace/qt/LedOK/wProgramManager/mconverter.cpp","D:/_workspace/qt/LedOK/wProgramManager/mconverter.h","D:/_workspace/qt/LedOK/wProgramManager/progeditorwin.cpp","D:/_workspace/qt/LedOK/wProgramManager/progeditorwin.h","D:/_workspace/qt/LedOK/wProgramManager/sendprogramdialog.cpp","D:/_workspace/qt/LedOK/wProgramManager/sendprogramdialog.h","D:/_workspace/qt/LedOK/wProgramManager/sendprogthread.cpp","D:/_workspace/qt/LedOK/wProgramManager/sendprogthread.h","D:/_workspace/qt/LedOK/wProgramManager/threadexportprogrampro.cpp","D:/_workspace/qt/LedOK/wProgramManager/threadexportprogrampro.h","D:/_workspace/qt/LedOK/wProgramManager/usbdetectdialog.cpp","D:/_workspace/qt/LedOK/wProgramManager/usbdetectdialog.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eaclock.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eaclock.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/edclock.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/edclock.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/egif.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/egif.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eobject.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eobject.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ephoto.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ephoto.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etemp.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etemp.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etext.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etext.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextflipattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextinput.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextscrollattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etextstaticattr.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etimer.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/etimer.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/evideo.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/evideo.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eweb.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/eweb.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindow.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindow.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindowattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/ewindowattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wElement/imagecutwidget.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wattrview.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wdrawingboard.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wdrawingboard.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageattr.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageattr.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitem.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitemwidget.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpageitemwidget.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpagelist.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wpagelist.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.h","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanitem.ui","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanlist.cpp","D:/_workspace/qt/LedOK/wProgramManager/wEditProgram/wplanlist.h","D:/_workspace/qt/LedOK/wProgramManager/wexportprogramitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wexportprogramitem.h","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.cpp","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.h","D:/_workspace/qt/LedOK/wProgramManager/wnewprogram.ui","D:/_workspace/qt/LedOK/wProgramManager/wprogramitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wprogramitem.h","D:/_workspace/qt/LedOK/wProgramManager/wprogrampublishitem.cpp","D:/_workspace/qt/LedOK/wProgramManager/wprogrampublishitem.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractooxmlfile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxabstractsheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcell.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcell.h","D:/_workspace/qt/LedOK/xlsx/xlsxcell_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellformula_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellrange.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellrange.h","D:/_workspace/qt/LedOK/xlsx/xlsxcellreference.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcellreference.h","D:/_workspace/qt/LedOK/xlsx/xlsxchart.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxchart.h","D:/_workspace/qt/LedOK/xlsx/xlsxchart_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxchartsheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcolor.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcolor_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting.h","D:/_workspace/qt/LedOK/xlsx/xlsxconditionalformatting_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxcontenttypes.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxcontenttypes_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation.h","D:/_workspace/qt/LedOK/xlsx/xlsxdatavalidation_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropsapp.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropsapp_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropscore.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocpropscore_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocument.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdocument.h","D:/_workspace/qt/LedOK/xlsx/xlsxdocument_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdrawing.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdrawing_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxdrawinganchor.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxdrawinganchor_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxformat.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxformat.h","D:/_workspace/qt/LedOK/xlsx/xlsxformat_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxglobal.h","D:/_workspace/qt/LedOK/xlsx/xlsxmediafile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxmediafile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxnumformatparser.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxnumformatparser_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxrelationships.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxrelationships_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring.h","D:/_workspace/qt/LedOK/xlsx/xlsxrichstring_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxsharedstrings.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxsharedstrings_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxsimpleooxmlfile.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxsimpleooxmlfile_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxstyles.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxstyles_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxtheme.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxtheme_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxutility.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxutility_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook.h","D:/_workspace/qt/LedOK/xlsx/xlsxworkbook_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet.h","D:/_workspace/qt/LedOK/xlsx/xlsxworksheet_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxzipreader.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxzipreader_p.h","D:/_workspace/qt/LedOK/xlsx/xlsxzipwriter.cpp","D:/_workspace/qt/LedOK/xlsx/xlsxzipwriter_p.h"],"translations":["D:/_workspace/qt/LedOK/translations/zh_CN.ts","D:/_workspace/qt/LedOK/translations/zh_TW.ts","D:/_workspace/qt/LedOK/translations/ja.ts","D:/_workspace/qt/LedOK/translations/en.ts"]}] diff --git a/LedOK/progpanel.cpp b/LedOK/progpanel.cpp index 49f9b97..00d7ef7 100644 --- a/LedOK/progpanel.cpp +++ b/LedOK/progpanel.cpp @@ -3,7 +3,6 @@ #include "gutil/qgui.h" #include "cfg.h" #include "player/playwin.h" -#include "program/progcreatedlg.h" #include "program/progeditorwin.h" #include "program/copydirthread.h" #include @@ -12,6 +11,7 @@ #include #include #include +#include ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { setAttribute(Qt::WA_DeleteOnClose); @@ -56,7 +56,7 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { } auto item = new ProgItem(mProgsDir, dlg.fdName->text(), width, dlg.fdHeight->value(), dlg.fdRemark->toPlainText(), widths, max, mProgTree); item->save();//保存pro.json - mProgTree->adjustCheckState(); + if(mProgTree->fdCheckAll->checkState()==Qt::Checked) mProgTree->fdCheckAll->setCheckState(Qt::PartiallyChecked); auto editor = new ProgEditorWin(item, this); editor->show(); }); @@ -140,7 +140,7 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { connect(bnExport, &QPushButton::clicked, this, [=] { int cnt = mProgTree->topLevelItemCount(); QStringList progNames; - for(int i=0; itopLevelItem(i)->checkState(0) == Qt::Checked) progNames.append(static_cast(mProgTree->topLevelItem(i))->mName); + for(int i=0; iitem(i)->checkState("check") == Qt::Checked) progNames.append(((ProgItem*) mProgTree->topLevelItem(i))->mName); if(progNames.isEmpty()) return; ProgPortDlg dlg(this, tr("Export")); @@ -183,8 +183,8 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { if(PlayWin::self) PlayWin::self->close(); else { int cnt = mProgTree->topLevelItemCount(); - for(int i=0; itopLevelItem(i)->checkState(0) == Qt::Checked) { - auto item = static_cast(mProgTree->topLevelItem(i)); + for(int i=0; iitem(i)->checkState("check") == Qt::Checked) { + auto item = (ProgItem*) mProgTree->topLevelItem(i); QString dir = mProgsDir+"/"+item->mName+"_tmp"; QFile file(dir+"/program"); if(! file.open(QIODevice::ReadOnly | QIODevice::Text)) return; @@ -202,65 +202,45 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { hBox->addStretch(); - - auto txtSearch = new QLineEdit(this); - txtSearch->setFixedSize(QSize(240, 36)); - QAction *search = new QAction(txtSearch); + auto fdSearch = new QLineEdit; + fdSearch->setFixedWidth(200); + auto search = new QAction; search->setIcon(QIcon(":/res/program/bnSearch.png")); - txtSearch->addAction(search, QLineEdit::LeadingPosition); - txtSearch->setClearButtonEnabled(true); - txtSearch->setStyleSheet("border: 2px solid #aaaaaa;"); - hBox->addWidget(txtSearch); - connect(txtSearch,SIGNAL(textChanged(const QString &)),this,SLOT(FilterProgram(const QString &))); - - mProgTree = new LoQTreeWidget(); - mProgTree->setIndentation(6); - mProgTree->setSortingEnabled(true); - m_headerItem = new QTreeWidgetItem(); - for(int i=1; isetTextAlignment(i, Qt::AlignCenter); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_CHECK, Qt::DisplayRole, ""); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_NAME, Qt::DisplayRole, tr("Name")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, Qt::DisplayRole, tr("Resolution")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, Qt::DisplayRole, tr("File Size")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, Qt::DisplayRole, tr("Last Modify")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, Qt::DisplayRole, tr("USB Update")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_SEND, Qt::DisplayRole, tr("Publish")); - mProgTree->setHeaderItem(m_headerItem); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_CHECK, QHeaderView::Fixed); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_NAME, QHeaderView::Stretch); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, QHeaderView::Stretch); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_SIZE, QHeaderView::Stretch); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, QHeaderView::Stretch); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, QHeaderView::Fixed); - mProgTree->header()->setSectionResizeMode(ENUM_PROGRAMLISTHEADERITEM_SEND, QHeaderView::Fixed); - mProgTree->header()->setStretchLastSection(false); - mProgTree->setColumnWidth(ENUM_PROGRAMLISTHEADERITEM_CHECK, 66); - mProgTree->setColumnWidth(ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, 100); - mProgTree->setColumnWidth(ENUM_PROGRAMLISTHEADERITEM_SEND, 72); - vBox->addWidget(mProgTree); - connect(mProgTree, &LoQTreeWidget::sigCheckStateChanged, this, [this](int f){ - switch(f) { - case LoQTreeWidget::CheckNone: - bnEdit->setEnabled(false); - bnDelete->setEnabled(false); - bnExport->setEnabled(false); - bnSend->setEnabled(false); - break; - case LoQTreeWidget::CheckOne: - bnEdit ->setEnabled(true); - bnDelete->setEnabled(true); - bnExport->setEnabled(true); - bnSend ->setEnabled(true); - break; - case LoQTreeWidget::CheckMulti: - bnEdit ->setEnabled(false); - bnDelete->setEnabled(true); - bnExport->setEnabled(true); - bnSend ->setEnabled(true); - break; - default: break; + fdSearch->addAction(search, QLineEdit::LeadingPosition); + fdSearch->setClearButtonEnabled(true); + fdSearch->setStyleSheet("border: 2px solid #aaa;"); + connect(fdSearch, &QLineEdit::textChanged, this, [this](const QString &text) { + auto cnt = mProgTree->topLevelItemCount(); + for(int i=0; iitem(i); + item->setHidden(! (text.isEmpty() || item->text("name").contains(text) || item->text("resolution").contains(text))); } }); + hBox->addWidget(fdSearch); + + auto table = new LoQTreeWidget; + table->addCol("#", "", 20); + table->addCol("check", "", 36).margin(6); + table->addCol("name", "", 300, QHeaderView::Stretch); + table->addCol("resolution", "", 150, QHeaderView::Stretch); + table->addCol("size", "", 100, QHeaderView::Stretch); + table->addCol("lasttime", "", 180); + table->addCol("usb", "", 80); + table->addCol("send", "", 80); + table->setDefs()->setHeaderAlignC(); + table->addFd(); + table->minRowHeight = 36; + table->setSelectionMode(QAbstractItemView::NoSelection); + table->setSortingEnabled(true); + + connect(table, &LoQTreeWidget::selChanged, this, [=] { + auto en = table->fdCheckAll->checkState()!=Qt::Unchecked; + bnEdit->setEnabled(en); + bnDelete->setEnabled(en); + bnExport->setEnabled(en); + bnSend->setEnabled(en); + }); + vBox->addWidget(mProgTree = table); QString doc_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); if(!doc_path.isEmpty()) { @@ -289,27 +269,20 @@ ProgPanel::ProgPanel(QWidget *parent) : QWidget(parent) { if(settings.value("ProgramListSortOrder").toInt()==0) mProgTree->sortByColumn(settings.value("ProgramListSortColumn").toInt(),Qt::SortOrder::AscendingOrder); else mProgTree->sortByColumn(settings.value("ProgramListSortColumn").toInt(),Qt::SortOrder::DescendingOrder); -// ui->wProgramList->setSortingEnabled( false ); //不使能QT的自动排序 -// ui->wProgramList->header()->setSortIndicatorShown( true ); // 设置三角标识符可见 -// ui->wProgramList->header()->setSectionsClickable( true ); // 设置标题栏单击响应使能 -// connect( ui->wProgramList->header(), SIGNAL( sectionClicked(int) ), this, SLOT( OnClickColumn(int) ) ); + transUi(); } -void ProgPanel::OnClickColumn(int iColumn) { - if(iColumn!=ENUM_PROGRAMLISTHEADERITEM_CHECK && iColumn!=ENUM_PROGRAMLISTHEADERITEM_SEND) mProgTree->sortByColumn(iColumn, mProgTree->header()->sortIndicatorOrder()); -} void ProgPanel::changeEvent(QEvent *event) { QWidget::changeEvent(event); if(event->type() == QEvent::LanguageChange) transUi(); } void ProgPanel::transUi() { - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_CHECK, 0, ""); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_NAME, 0, tr("Name")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, tr("Resolution")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, tr("File Size")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, tr("Last Modify")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, 0, tr("USB Update")); - m_headerItem->setData(ENUM_PROGRAMLISTHEADERITEM_SEND, 0, tr("Publish")); + mProgTree->headerItem()->setText("name"**mProgTree, tr("Name")); + mProgTree->headerItem()->setText("resolution"**mProgTree, tr("Resolution")); + mProgTree->headerItem()->setText("size"**mProgTree, tr("File Size")); + mProgTree->headerItem()->setText("lasttime"**mProgTree, tr("Last Modify")); + mProgTree->headerItem()->setText("usb"**mProgTree, tr("USB Update")); + mProgTree->headerItem()->setText("send"**mProgTree, tr("Publish")); bnNew->setText(tr("New")); bnEdit->setText(tr("Edit")); bnDelete->setText(tr("Delete")); @@ -322,7 +295,7 @@ void ProgPanel::transUi() { void ProgPanel::onEditClicked(bool){ int cnt = mProgTree->topLevelItemCount(); for(int i=0; itopLevelItem(i)->checkState(0) == Qt::Checked) { + if(mProgTree->item(i)->checkState("check") == Qt::Checked) { auto item = static_cast(mProgTree->topLevelItem(i)); auto editor = new ProgEditorWin(item, this); editor->show(); @@ -348,7 +321,7 @@ void ProgPanel::onCreateNewProgramOnOpenEditProgramWidget(QString name, QSize re if(checkIfNameRepeated(name)) return; auto item = new ProgItem(mProgsDir, name, res.width(), res.height(), remarks, splitWidths, max, mProgTree); item->save();//保存pro.json - mProgTree->adjustCheckState(); + if(mProgTree->fdCheckAll->checkState()==Qt::Checked) mProgTree->fdCheckAll->setCheckState(Qt::PartiallyChecked); auto editor = new ProgEditorWin(item, this); editor->show(); } @@ -356,65 +329,18 @@ void ProgPanel::onDeleteClicked(bool){ auto res = QMessageBox::information(this, tr("Tip Info"), tr("You will delete the selected solution(s),are you sure?"), QMessageBox::Ok, QMessageBox::Cancel); if(res == QMessageBox::Ok) { int cnt = mProgTree->topLevelItemCount(); - QList list; - for(int i=0; itopLevelItem(i)->checkState(0) == Qt::Checked) { - auto item = static_cast(mProgTree->topLevelItem(i)); - list.push_back(item); - } - } - while(!list.isEmpty()) { - auto item = list.takeFirst(); + for(int i=0; iitem(i)->checkState("check") == Qt::Checked) { + auto item = (ProgItem*) mProgTree->topLevelItem(i--); item->del(); delete item; } - mProgTree->adjustCheckState(); + mProgTree->fdCheckAll->blockSignals(true); + mProgTree->fdCheckAll->setCheckState(Qt::Unchecked); + mProgTree->fdCheckAll->blockSignals(false); + emit mProgTree->selChanged(); } } -void ProgPanel::FilterProgram(const QString &strtemp){ - if (strtemp.isEmpty()) //显示全部 - { - for (int i = 0; i< mProgTree->topLevelItemCount(); ++i) - { - QTreeWidgetItem* topItem = mProgTree->topLevelItem(i); - mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),false); - } - } - else - { - QList resultList = mProgTree->findItems(strtemp, Qt::MatchContains,ENUM_PROGRAMLISTHEADERITEM_NAME); //搜索结果 - if (resultList.size() > 0) - { - for (int i = 0; i< mProgTree->topLevelItemCount(); ++i) - { - QTreeWidgetItem* topItem = mProgTree->topLevelItem(i); - if (resultList.contains(topItem)) - mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),false); //显示匹配的结果 - else - mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),true); //隐藏不匹配的结果 - } - } - else { - QList resultList1 = mProgTree->findItems(strtemp, Qt::MatchContains,ENUM_PROGRAMLISTHEADERITEM_RESOLUTION); //搜索结果 - if (resultList1.size() > 0){ - for (int i = 0; i< mProgTree->topLevelItemCount(); ++i){ - QTreeWidgetItem* topItem = mProgTree->topLevelItem(i); - if (resultList1.contains(topItem)) mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),false); //显示匹配的结果 - else mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),true); //隐藏不匹配的结果 - } - } - else { - for (int i = 0; i< mProgTree->topLevelItemCount(); ++i){ - QTreeWidgetItem* topItem = mProgTree->topLevelItem(i); - mProgTree->setRowHidden(i,mProgTree->indexFromItem(topItem->parent()),true); //隐藏不匹配的结果 - } - } - } - } - -} - ProgPortDlg::ProgPortDlg(QWidget *parent, QString title) : QDialog(parent) { #ifdef Q_OS_WIN setWindowFlag(Qt::WindowContextHelpButtonHint, 0); diff --git a/LedOK/progpanel.h b/LedOK/progpanel.h index fcfe738..5d97524 100644 --- a/LedOK/progpanel.h +++ b/LedOK/progpanel.h @@ -13,7 +13,6 @@ class ProgPanel : public QWidget { public: explicit ProgPanel(QWidget *parent = nullptr); - QTreeWidgetItem *m_headerItem{0}; LoQTreeWidget *mProgTree{0}; protected: void changeEvent(QEvent *) override; @@ -24,17 +23,13 @@ public slots: void onEditClicked(bool f); void onDeleteClicked(bool f); void onCreateNewProgramOnOpenEditProgramWidget(QString name, QSize res, QString remarks, QList &, int); - void FilterProgram(const QString &strtemp); - -private slots: - void OnClickColumn(int iColumn); private: QString mProgsDir; QList m_pwPorgramItemList; - QPushButton *bnNew = nullptr; - QPushButton *bnEdit = nullptr; - QPushButton *bnDelete = nullptr; + QPushButton *bnNew; + QPushButton *bnEdit; + QPushButton *bnDelete; QPushButton *bnImport, *bnExport; QPushButton *bnSend, *btnPlay; }; diff --git a/LedOK/program/progcreatedlg.cpp b/LedOK/program/progcreatedlg.cpp deleted file mode 100644 index 8b68671..0000000 --- a/LedOK/program/progcreatedlg.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "progcreatedlg.h" -#include "gutil/qgui.h" -#include "globaldefine.h" -#include -#include -#include - -ProgCreateDlg::ProgCreateDlg(QString name, int width, int height, QString remarks, QString widths, QWidget *parent) : QDialog(parent) { -#ifdef Q_OS_WIN - setWindowFlag(Qt::WindowContextHelpButtonHint, 0); -#endif - setWindowTitle(tr("Solution Information")); - auto vBox = new VBox(this); - auto hBox = new HBox(vBox); - - auto label = new QLabel(tr("Solution Name")); - label->setMinimumWidth(90); - label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); - hBox->addWidget(label); - hBox->addSpacing(6); - - fdName = new QLineEdit; - if(name.isEmpty()) name = QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"); - else fdName->setDisabled(true); - fdName->setText(name); - hBox->addWidget(fdName); - - hBox = new HBox(vBox); - hBox->setSpacing(12); - - label = new QLabel(tr("Resolution")); - label->setMinimumWidth(90); - label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); - hBox->addWidget(label); - hBox->addSpacing(6); - - auto label_4 = new QLabel(tr("Width")); - hBox->addWidget(label_4); - - fdWidth = new QSpinBox; - fdWidth->setMaximum(99999); - fdWidth->setValue(width); - hBox->addWidget(fdWidth); - - auto label_5 = new QLabel(tr("Height")); - hBox->addWidget(label_5); - - fdHeight = new QSpinBox; - fdHeight->setMaximum(99999); - fdHeight->setValue(height); - hBox->addWidget(fdHeight); - hBox->addStretch(); - - hBox = new HBox(vBox); - - label = new QLabel(tr("Remarks")); - label->setMinimumWidth(90); - label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); - hBox->addWidget(label); - hBox->addSpacing(6); - - fdRemark = new QTextEdit(remarks); - fdRemark->setFixedSize(300, 80); - hBox->addWidget(fdRemark); - - hBox = new HBox(vBox); - - auto lbSplitWidth = new QLabel(tr("每段打折宽度 (用空格分隔)")); - hBox->addWidget(lbSplitWidth); - - fdSplitWidths = new QLineEdit(widths); - fdSplitWidths->setPlaceholderText("256 256 256 ..."); - hBox->addWidget(fdSplitWidths); - if(! gWidthSplit) { - lbSplitWidth->setVisible(false); - fdSplitWidths->setVisible(false); - } - - vBox->addSpacing(6); - - auto btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - connect(btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - vBox->addWidget(btnBox); -} diff --git a/LedOK/program/progcreatedlg.h b/LedOK/program/progcreatedlg.h deleted file mode 100644 index bbf93ee..0000000 --- a/LedOK/program/progcreatedlg.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef PROGCREATEDLG_H -#define PROGCREATEDLG_H - -#include -#include -#include -#include - -class ProgCreateDlg : public QDialog { - Q_OBJECT -public: - ProgCreateDlg(QString name, int width, int height, QString remarks, QString, QWidget *parent = nullptr); - QLineEdit *fdName; - QSpinBox *fdWidth; - QSpinBox *fdHeight; - QTextEdit *fdRemark; - QLineEdit *fdSplitWidths; -}; - -#endif // PROGCREATEDLG_H diff --git a/LedOK/program/progeditorwin.cpp b/LedOK/program/progeditorwin.cpp index 9cb9a0f..82ec855 100644 --- a/LedOK/program/progeditorwin.cpp +++ b/LedOK/program/progeditorwin.cpp @@ -5,7 +5,7 @@ #include "player/playwin.h" #include "tools.h" #include "globaldefine.h" -#include "base/waitingdlg.h" +#include "gutil/qwaitingdlg.h" #include "program/ebase.h" #include "program/etext.h" #include "program/ephoto.h" @@ -19,7 +19,6 @@ #include "program/emultiwin.h" #include "program/gentmpthread.h" #include "program/sendprogramdialog.h" -#include "progcreatedlg.h" #include #include #include @@ -222,7 +221,7 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare QString value = file.readAll(); file.close(); QJsonParseError jsErr; - QJsonObject prog = QJsonDocument::fromJson(value.toUtf8(), &jsErr).object(); + auto prog = QJsonDocument::fromJson(value.toUtf8(), &jsErr).object(); if(jsErr.error) return; int www = mProgItem->mWidth, hhh = mProgItem->mHeight; if(mProgItem->mMaxWidth) { @@ -371,9 +370,10 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare if(listPage->count() > 0) { auto cur = (PageListItem*) listPage->currentItem(); cur->updateJson(); - auto item = new PageListItem(cur->mAttr, cur->mPageDir); + JObj attr; + for(auto &pair : cur->mAttr) attr.insert(pair.first, pair.second); + auto item = new PageListItem(attr, cur->mPageDir); item->mAttr["name"] = QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"); - item->mAttr["order"] = listPage->count(); listPage->addItem(item); listPage->setItemWidget(item, item->itemWgt()); listPage->setCurrentItem(item); @@ -391,12 +391,7 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare if(res == QMessageBox::Ok) { delete item; if(listPage->count() > 0) listPage->setCurrentRow(0); - int cnt = listPage->count(); - for(int i=0; iitem(i); - item->mAttr["order"] = i; - item->fdIdx->setNum(i+1); - } + for(int i=0; icount(); i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); } } }); @@ -412,12 +407,7 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare listPage->setItemWidget(item, item->itemWgt()); listPage->setCurrentRow(index-1); } - int cnt = listPage->count(); - for(int i=0; iitem(i); - item->mAttr["order"] = i; - item->fdIdx->setNum(i+1); - } + for(int i=0; icount(); i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); } }); toolBar->addAction(actMoveUp); @@ -432,12 +422,7 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare listPage->setItemWidget(item, item->itemWgt()); listPage->setCurrentRow(index+1); } - int cnt = listPage->count(); - for(int i=0; iitem(i); - item->mAttr["order"] = i; - item->fdIdx->setNum(i+1); - } + for(int i=0; icount(); i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); } }); toolBar->addAction(actMoveDown); @@ -516,8 +501,8 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare QDir progQDir(mProgItem->mProgDir); if(progQDir.exists()) { - QStringList pageNames = progQDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); - foreach(QString pageName, pageNames) { + auto pageNames = progQDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for(QString &pageName : pageNames) { if(pageName.endsWith(PAGEDEL_SUFFIX)) { QDir(mProgItem->mProgDir + "/" + pageName).removeRecursively(); continue; @@ -525,36 +510,40 @@ ProgEditorWin::ProgEditorWin(ProgItem *progItem, QWidget *parent) : QWidget(pare QFile pageFile(mProgItem->mProgDir + "/" + pageName + "/page.json"); if(pageFile.exists()) { pageFile.open(QIODevice::ReadOnly); - mPageJsons.push_back(QJsonDocument::fromJson(pageFile.readAll()).object()); + mPageJsons.emplace_back(JFrom(pageFile.readAll()).toObj()); pageFile.close(); } else QDir(mProgItem->mProgDir + "/" + pageName).removeRecursively(); } - } - if(mPageJsons.isEmpty()) onAddPage(); - else { - std::sort(mPageJsons.begin(), mPageJsons.end(), [](const QJsonObject &a, const QJsonObject &b) { + std::sort(mPageJsons.begin(), mPageJsons.end(), [](const JObj &a, const JObj &b) { return a["order"].toInt() < b["order"].toInt(); }); - foreach(QJsonObject pageJson, mPageJsons) { - auto pageDir = mProgItem->mProgDir+"/"+pageJson["name"].toString(); - QDir dir(pageDir); - if(! dir.exists() && ! dir.mkdir(pageDir)) continue; - auto item = new PageListItem(pageJson, pageDir); - listPage->addItem(item); - listPage->setItemWidget(item, item->itemWgt()); - auto cnt = listPage->count(); - if(cnt==5) for(int i=0; i<4; i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); - } + } + if(mPageJsons.empty()) onAddPage(); + else for(JObj &pageJson : mPageJsons) { + auto pageDir = mProgItem->mProgDir+"/"+pageJson["name"].toString(); + QDir dir(pageDir); + if(! dir.exists() && ! dir.mkdir(pageDir)) continue; + JObj attr; + for(auto &pair : pageJson) attr.insert(pair.first, pair.second); + auto item = new PageListItem(attr, pageDir); + listPage->addItem(item); + listPage->setItemWidget(item, item->itemWgt()); + auto cnt = listPage->count(); + if(cnt==5) for(int i=0; i<4; i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); } listPage->setCurrentRow(0); } bool ProgEditorWin::isProgChanged() { if(mPageJsons.size() != listPage->count()) return true; - for(int i=0; i(listPage->item(i)); + for(int i=0; i<(int)mPageJsons.size(); i++) { + auto page = (PageListItem*) listPage->item(i); if(page->mAttrWgt==0) continue; page->updateJson(); - if(page->mAttr != mPageJsons[i]) return true; + if(page->mAttr != mPageJsons[i]) { + qDebug()<mAttr; + qDebug()<mProgDir); return 0; } - QStringList pageNames = progDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); - foreach(QString pageName, pageNames) { - if(! progDir.rename(pageName, pageName + PAGEDEL_SUFFIX)) { - rtn = 0; - QMessageBox::critical(this, tr("Error"), tr("Rename fail when saving")+" "+pageName); - } + auto pageNames = progDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); + for(QString &pageName : pageNames) if(! progDir.rename(pageName, pageName + PAGEDEL_SUFFIX)) { + rtn = 0; + QMessageBox::critical(this, tr("Error"), tr("Rename fail when saving")+" "+pageName); } //保存每个页面的元素和页面属性到page.json文档 mPageJsons.clear(); for(int i=0; i(listPage->item(i)); - if(page->saveFiles()) mPageJsons.append(page->mAttr); + auto page = (PageListItem*) listPage->item(i); + page->mAttr["order"] = i; + if(page->saveFiles()) { + JObj json; + for(auto &pair : page->mAttr) json.insert(pair.first, pair.second); + mPageJsons.emplace_back(json); + } } pageNames = progDir.entryList(QStringList("*" PAGEDEL_SUFFIX)); foreach(QString pageName, pageNames) { @@ -624,43 +616,102 @@ void ProgEditorWin::onSave() { mProgItem->onSetProgram(); } -void ProgEditorWin::UdpSendJson(QJsonObject json) { - QUdpSocket *tempUdpSocket= new QUdpSocket(this); - if(!tempUdpSocket->bind(QHostAddress("127.0.0.1"))) { - QMessageBox::critical(this, tr("Warning"), "udp bind failed"); - return; - } - QJsonDocument resultJson; - resultJson.setObject(json); - QByteArray byteArray=resultJson.toJson(); - QHostAddress localAddress("127.0.0.1"); - int iSendLength=tempUdpSocket->writeDatagram(byteArray.data(),byteArray.size(),localAddress,2000); - if(iSendLength != byteArray.size()) { - char *aa=byteArray.data(); - tempUdpSocket->writeDatagram(&aa[iSendLength],byteArray.size()-iSendLength,localAddress,2000); - } - delete tempUdpSocket; -} - void ProgEditorWin::onAddPage() { QDateTime now = QDateTime::currentDateTime(); auto name = now.toString("yyyyMMddhhmmsszzz"); auto pageDir = mProgItem->mProgDir+"/"+name; QDir dir(pageDir); if(! dir.exists() && ! dir.mkpath(pageDir)) return; - QJsonObject attr; + JObj attr; attr["name"] = name; - attr["order"] = listPage->count(); attr["repeat"] = 1; - attr["validDate"] = QJsonObject{ + attr["validDate"] = JObj{ {"isValid", false}, {"start", now.date().toString("yyyy-MM-dd")}, {"end", now.addSecs(2678400).date().toString("yyyy-MM-dd")} }; - attr["plans"] = QJsonArray(); auto item = new PageListItem(attr, pageDir); listPage->addItem(item); listPage->setItemWidget(item, item->itemWgt()); listPage->setCurrentItem(item); if(listPage->count()==5) for(int i=0; i<4; i++) ((PageListItem*)listPage->item(i))->fdIdx->setNum(i+1); } + +ProgCreateDlg::ProgCreateDlg(QString name, int width, int height, QString remarks, QString widths, QWidget *parent) : QDialog(parent) { +#ifdef Q_OS_WIN + setWindowFlag(Qt::WindowContextHelpButtonHint, 0); +#endif + setWindowTitle(tr("Solution Information")); + auto vBox = new VBox(this); + auto hBox = new HBox(vBox); + + auto label = new QLabel(tr("Solution Name")); + label->setMinimumWidth(90); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + hBox->addWidget(label); + hBox->addSpacing(6); + + fdName = new QLineEdit; + if(name.isEmpty()) name = QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"); + else fdName->setDisabled(true); + fdName->setText(name); + hBox->addWidget(fdName); + + hBox = new HBox(vBox); + hBox->setSpacing(12); + + label = new QLabel(tr("Resolution")); + label->setMinimumWidth(90); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + hBox->addWidget(label); + hBox->addSpacing(6); + + auto label_4 = new QLabel(tr("Width")); + hBox->addWidget(label_4); + + fdWidth = new QSpinBox; + fdWidth->setMaximum(99999); + fdWidth->setValue(width); + hBox->addWidget(fdWidth); + + auto label_5 = new QLabel(tr("Height")); + hBox->addWidget(label_5); + + fdHeight = new QSpinBox; + fdHeight->setMaximum(99999); + fdHeight->setValue(height); + hBox->addWidget(fdHeight); + hBox->addStretch(); + + hBox = new HBox(vBox); + + label = new QLabel(tr("Remarks")); + label->setMinimumWidth(90); + label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); + hBox->addWidget(label); + hBox->addSpacing(6); + + fdRemark = new QTextEdit(remarks); + fdRemark->setFixedSize(300, 80); + hBox->addWidget(fdRemark); + + hBox = new HBox(vBox); + + auto lbSplitWidth = new QLabel(tr("每段打折宽度 (用空格分隔)")); + hBox->addWidget(lbSplitWidth); + + fdSplitWidths = new QLineEdit(widths); + fdSplitWidths->setPlaceholderText("256 256 256 ..."); + hBox->addWidget(fdSplitWidths); + if(! gWidthSplit) { + lbSplitWidth->setVisible(false); + fdSplitWidths->setVisible(false); + } + + vBox->addSpacing(6); + + auto btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + connect(btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + connect(btnBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + vBox->addWidget(btnBox); +} diff --git a/LedOK/program/progeditorwin.h b/LedOK/program/progeditorwin.h index 1691763..e9b7fc4 100644 --- a/LedOK/program/progeditorwin.h +++ b/LedOK/program/progeditorwin.h @@ -1,8 +1,11 @@ #ifndef PROGEDITORWIN_H #define PROGEDITORWIN_H #include "program/pageeditor.h" +#include +#include +#include #include -#include +#include "gutil/qjson.h" class ProgPanel; class ProgItem; @@ -18,16 +21,26 @@ protected: private: bool isProgChanged(); bool save(); - void UdpSendJson(QJsonObject json); QListWidget *listPage; - PageListItem *mPageItem = nullptr; + PageListItem *mPageItem = 0; PageEditor *mPageEditor; QTabWidget *mTabsAttr; - QList mPageJsons; + std::vector mPageJsons; ProgItem *mProgItem; int mNewEleX = 0; int mNewEleY = 0; }; +class ProgCreateDlg : public QDialog { + Q_OBJECT +public: + ProgCreateDlg(QString name, int width, int height, QString remarks, QString, QWidget *parent = nullptr); + QLineEdit *fdName; + QSpinBox *fdWidth; + QSpinBox *fdHeight; + QTextEdit *fdRemark; + QLineEdit *fdSplitWidths; +}; + #endif // PROGEDITORWIN_H diff --git a/LedOK/program/progitem.cpp b/LedOK/program/progitem.cpp index 7c31d18..4a6d15b 100644 --- a/LedOK/program/progitem.cpp +++ b/LedOK/program/progitem.cpp @@ -3,25 +3,25 @@ #include "QtWidgets/qlineedit.h" #include "gutil/qcore.h" #include "gutil/qgui.h" -#include "base/waitingdlg.h" -#include "progeditorwin.h" -#include "base/waitingdlg.h" +#include "gutil/qwaitingdlg.h" +#include "gutil/qwaitingdlg.h" #include "gentmpthread.h" #include #include "sendprogramdialog.h" +#include "program/progeditorwin.h" #include #include #include -ProgItem::ProgItem(const QString &progsDir, const QString &name, int w, int h, const QString &remarks, QList &splitWidths, int maxWidth, LoQTreeWidget *tree) : QTreeWidgetItem(UserType), - mName(name), mWidth(w), mHeight(h), mRemark(remarks), mSplitWidths(splitWidths), mMaxWidth(maxWidth), mProgsDir(progsDir), mTree(tree) { +ProgItem::ProgItem(const QString &progsDir, const QString &name, int w, int h, const QString &remarks, QList &splitWidths, int maxWidth, LoQTreeWidget *tree) : TreeWidgetItem(tree), + mName(name), mWidth(w), mHeight(h), mRemark(remarks), mSplitWidths(splitWidths), mMaxWidth(maxWidth), mProgsDir(progsDir) { m_last = QDateTime::currentDateTime(); mProgDir = progsDir + "/" + mName; m_orgName = mName; init(); } -ProgItem::ProgItem(const QString &progsDir, const QJsonObject &json, LoQTreeWidget *tree) : QTreeWidgetItem(UserType), mProgsDir(progsDir), mTree(tree) { +ProgItem::ProgItem(const QString &progsDir, const QJsonObject &json, LoQTreeWidget *tree) : TreeWidgetItem(tree), mProgsDir(progsDir) { mName = json["name"].toString(); mWidth = json["resolution"]["w"].toInt(); mHeight = json["resolution"]["h"].toInt(); @@ -40,41 +40,39 @@ ProgItem::ProgItem(const QString &progsDir, const QJsonObject &json, LoQTreeWidg } void ProgItem::init() { + setFlags(flags() & ~Qt::ItemIsUserCheckable); + setCheckState("check", Qt::Unchecked); auto ft = font(0); ft.setPixelSize(14); - for(int i=1; iinsertTopLevelItem(0,this); + for(int i=1; icolumnCount()-2; i++) { + setFont(i, ft); + setTextAlignment(i, Qt::AlignCenter); + } + setForeground("name"**treeWidget(), Qt::transparent); + setText("name", mName); + setText("resolution", QString("%1 x %2").arg(mWidth).arg(mHeight)); + setText("size", m_fsize<=0 ? "100B" : byteSizeStr(m_fsize)); + setText("lasttime", m_last.toString("yyyy-MM-dd hh:mm:ss")); m_bnName = new QPushButton(mName); m_bnName->setFont(ft); + m_bnName->setCursor(QCursor(Qt::PointingHandCursor)); m_bnName->setStyleSheet(R"delimiter( QPushButton{border-radius: 4px;} QPushButton:hover { - background-color: #cccccc; + background-color: #ccc; text-decoration: underline; } )delimiter"); - - m_bnName->setCursor(QCursor(Qt::PointingHandCursor)); - mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_NAME, m_bnName); - QObject::connect(m_bnName, &QPushButton::clicked, mTree, [this] { - auto editor = new ProgEditorWin(this, mTree->parentWidget()); + QObject::connect(m_bnName, &QPushButton::clicked, treeWidget(), [=] { + auto editor = new ProgEditorWin(this, treeWidget()->parentWidget()); editor->show(); }); - m_bnExport = new QPushButton(); - m_bnExport->setCursor(QCursor(Qt::PointingHandCursor)); - m_bnExport->setStyleSheet(R"rrr( + setCellWidget("name", m_bnName); + + auto btnExport = new QPushButton; + btnExport->setCursor(QCursor(Qt::PointingHandCursor)); + btnExport->setStyleSheet(R"rrr( QPushButton { border-radius: 4px; image: url(:/res/program/bnExport_u.png); @@ -82,10 +80,8 @@ QPushButton { QPushButton:pressed{image: url(:/res/program/bnExport_s.png);} QPushButton:hover{background-color: #cccccc;} )rrr"); - - mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, m_bnExport); - QObject::connect(m_bnExport, &QPushButton::clicked, mTree, [this] { - QDialog dlg(mTree); + QObject::connect(btnExport, &QPushButton::clicked, treeWidget(), [=] { + QDialog dlg(treeWidget()); dlg.setWindowTitle(QObject::tr("USB Update Program")); #ifdef Q_OS_WIN dlg.setWindowFlag(Qt::WindowContextHelpButtonHint, 0); @@ -132,14 +128,20 @@ QPushButton:hover{background-color: #cccccc;} fdDrives->clear(); auto volumes = QStorageInfo::mountedVolumes(); - foreach(auto volume, volumes) fdDrives->addItem(volume.displayName(), volume.rootPath()); + foreach(auto volume, volumes) { + auto text = volume.displayName(); + auto rootPath = volume.rootPath(); + if(text!=rootPath) text += " ("+rootPath+")"; + fdDrives->addItem(text, rootPath); + } dlg.exec(); }); + setCellWidget("usb", btnExport); - m_bnSend = new QPushButton(); - m_bnSend->setCursor(QCursor(Qt::PointingHandCursor)); - m_bnSend->setStyleSheet(R"rrr( + auto btnSend = new QPushButton; + btnSend->setCursor(QCursor(Qt::PointingHandCursor)); + btnSend->setStyleSheet(R"rrr( QPushButton{ border-radius: 4px; image: url(:/res/program/bnSend_u.png); @@ -147,20 +149,19 @@ QPushButton{ QPushButton:pressed{image: url(:/res/program/bnSend_s.png);} QPushButton:hover{background-color: #cccccc;} )rrr"); - - mTree->setItemWidget(this, ENUM_PROGRAMLISTHEADERITEM_SEND, m_bnSend); - QObject::connect(m_bnSend, &QPushButton::clicked, mTree, [this] { - auto waitingDlg = new WaitingDlg(mTree, QObject::tr("Convertering")+" ..."); + QObject::connect(btnSend, &QPushButton::clicked, treeWidget(), [this] { + auto waitingDlg = new WaitingDlg(treeWidget(), QObject::tr("Convertering")+" ..."); auto gen = new GenTmpThread(this, mName, "", ""); - QObject::connect(gen, &GenTmpThread::onErr, mTree, [=](QString err) { - QMessageBox::warning(mTree, "GenTmpThread Error", err); + QObject::connect(gen, &GenTmpThread::onErr, treeWidget(), [=](QString err) { + QMessageBox::warning(treeWidget(), "GenTmpThread Error", err); }); QObject::connect(gen, &QThread::finished, waitingDlg, &WaitingDlg::close); gen->start(); waitingDlg->exec(); - SendProgramDialog dlg(mName, mTree); + SendProgramDialog dlg(mName, treeWidget()->window()); dlg.exec(); }); + setCellWidget("send", btnSend); } void ProgItem::save() { @@ -177,7 +178,6 @@ void ProgItem::save() { dRoot = QDir(mProgDir); if(dRoot.exists()) { QJsonObject obj; - QJsonObject oSize; obj["name"] = mName; obj["resolution"] = QJsonObject{{"w", mWidth}, {"h", mHeight}}; obj["remarks"] = mRemark; @@ -186,10 +186,9 @@ void ProgItem::save() { obj["splitWidths"] = splitWidths; obj["file_size"] = m_fsize; obj["last_edit"] = m_last.toString("yyyy-MM-dd hh:mm:ss"); - QJsonDocument json(obj); QFile f(mProgDir + "/pro.json"); f.open(QIODevice::WriteOnly); - f.write(json.toJson()); + f.write(QJsonDocument(obj).toJson()); f.close(); } } @@ -201,8 +200,8 @@ void ProgItem::del() { //设置列表项的值 void ProgItem::onSetProgram() { m_bnName->setText(mName); - setData(ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, 0, QString("%1 x %2").arg(mWidth).arg(mHeight)); - setData(ENUM_PROGRAMLISTHEADERITEM_SIZE, 0, byteSizeStr(m_fsize<=0 ? 100 : m_fsize)); - setData(ENUM_PROGRAMLISTHEADERITEM_LASTTIME, 0, m_last.toString("yyyy-MM-dd hh:mm:ss")); + setText("resolution", QString("%1 x %2").arg(mWidth).arg(mHeight)); + setText("size", byteSizeStr(m_fsize<=0 ? 100 : m_fsize)); + setText("lasttime", m_last.toString("yyyy-MM-dd hh:mm:ss")); save(); } diff --git a/LedOK/program/progitem.h b/LedOK/program/progitem.h index f00de8e..b6ced69 100644 --- a/LedOK/program/progitem.h +++ b/LedOK/program/progitem.h @@ -1,23 +1,19 @@ #ifndef PROGITEM_H #define PROGITEM_H -#include -#include -#include -#include +#include "base/loqtreewidget.h" #include -#include #include -#include class ProgPanel; -class ProgItem : public QTreeWidgetItem { +class ProgItem : public TreeWidgetItem { public: explicit ProgItem(const QString &progsDir, const QString &name, int w, int h, const QString & remarks, QList &splitWidths, int, LoQTreeWidget *parent); explicit ProgItem(const QString &progsDir, const QJsonObject &json, LoQTreeWidget *parent); void save(); void del(); + void onSetProgram(); QString mName; int mWidth; @@ -30,25 +26,9 @@ public: qint64 m_fsize{0}; QDateTime m_last; QPushButton *m_bnName; - LoQTreeWidget *mTree; - - void onSetProgram(); - private: void init(); - QPushButton *m_bnExport; - QPushButton *m_bnSend; - QString m_orgName; -}; -enum ENUM_PROGRAMLISTHEADERITEM { - ENUM_PROGRAMLISTHEADERITEM_CHECK=0, - ENUM_PROGRAMLISTHEADERITEM_NAME, - ENUM_PROGRAMLISTHEADERITEM_RESOLUTION, - ENUM_PROGRAMLISTHEADERITEM_SIZE, - ENUM_PROGRAMLISTHEADERITEM_LASTTIME, - ENUM_PROGRAMLISTHEADERITEM_USB_EXPORT, - ENUM_PROGRAMLISTHEADERITEM_SEND, - ENUM_PROGRAMLISTHEADERITEM_END + QString m_orgName; }; #endif // PROGITEM_H diff --git a/LedOK/program/sendprogramdialog.cpp b/LedOK/program/sendprogramdialog.cpp index c98fe83..1b69e54 100644 --- a/LedOK/program/sendprogramdialog.cpp +++ b/LedOK/program/sendprogramdialog.cpp @@ -4,7 +4,7 @@ #include "deviceitem.h" #include "devicepanel.h" #include "gutil/qnetwork.h" -#include "base/waitingdlg.h" +#include "gutil/qwaitingdlg.h" #include #include #include @@ -18,20 +18,142 @@ SendProgramDialog::SendProgramDialog(QString progName, QWidget *parent) : QDialo setWindowFlag(Qt::WindowMaximizeButtonHint); #endif setWindowTitle(tr("Publish")+" "+mProgName); - resize(1024, 700); + resize(1024, 720); auto vBox = new VBox(this); - vBox->setContentsMargins(6,0,6,9); + vBox->setContentsMargins(6,0,6,0); auto hBox = new HBox(vBox); label = new QLabel(tr("success info")); hBox->addWidget(label); + hBox->addSpacing(20); + + auto btnPublish = new QPushButton(tr("Publish")); + connect(btnPublish, &QPushButton::clicked, this, [=] { + if(mWaitCnt > 0) return; + int cnt = table->topLevelItemCount(); + int sentCnt = 0; + SendProgramItem *item; + auto remarks = "remarks"**table; + for(int rr=0; rrtopLevelItem(rr))->isHidden() && item->checkState("id") == Qt::Checked && ! item->isSending) { + if(item->btnUnlock && item->isLocked) { + item->setResult(tr("This screen is encrypted"), Qt::red); + continue; + } + item->fdProgress->setValue(0); + if(sentCnt>=gSendBatch) { + item->setText(remarks, " "+tr("Waiting")+" ..."); + item->setForeground(remarks, Qt::black); + mWaitCnt++; + continue; + } + item->isSending = true; + item->setText(remarks, ""); + auto sendProg = new SendProgThread(programsDir()+"/"+mProgName+"_tmp", item->text("ip"), 3333); + connect(sendProg, &SendProgThread::emErr, item->fdProgress, [=](QString strTip) { + item->isSending = false; + if(strTip=="OK") { + item->setCheckState("id", Qt::Unchecked); + item->setText(remarks, "OK"); + item->setForeground(remarks, Qt::darkGreen); + } else { + item->setText(remarks, strTip); + item->setForeground(remarks, Qt::red); + } + sendNext(); + }); + connect(sendProg, &SendProgThread::emProgress, item->fdProgress, &QProgressBar::setValue); + connect(this, &SendProgramDialog::stopAllThd, sendProg, &SendProgThread::stop); + sendProg->start(); + sentCnt++; + } + }); + hBox->addWidget(btnPublish); hBox->addStretch(); auto btnRefresh = new QPushButton(tr("Refresh")); - btnRefresh->setProperty("ssType", "progManageTool"); - connect(btnRefresh, &QPushButton::clicked, this, &SendProgramDialog::refresh); + connect(btnRefresh, &QPushButton::clicked, this, [=] { + int cnt = gDevicePanel->mDeviceTable->topLevelItemCount(); + for(int i=0; imDeviceTable->topLevelItem(i))->mCard; + int cnt = table->topLevelItemCount(); + SendProgramItem *item; + for(int rr=0; rrtopLevelItem(rr))->text("id") == card.id) goto end; + item = new SendProgramItem(table); + item->setFlags(item->flags() & ~Qt::ItemIsUserCheckable); + item->setCheckState("id", Qt::Unchecked); + item->setText("id", card.id); + { + item->fdOnline = new QLabel; + item->fdOnline->setScaledContents(true); + item->fdOnline->setFixedSize(24, 24); + auto wgt = new QWidget; + auto hhh = new HBox(wgt); + hhh->setContentsMargins(0,0,0,0); + hhh->addWidget(item->fdOnline); + item->setCellWidget("online", wgt); + } + item->fdProgress = new QProgressBar; + item->fdProgress->setAlignment(Qt::AlignCenter); + item->fdProgress->setStyleSheet("QProgressBar {margin-top: 6px; margin-bottom: 6px;}"); + item->setCellWidget("progress", item->fdProgress); + end: + item->setText("ip", card.ip); + item->setText("alias", card.alias); + item->setText("size", QString("%1 x %2").arg(card.mWidth).arg(card.mHeight)); + item->fdOnline->setPixmap({card.isOnline ? ":/res/online.png" : ":/res/offline.png"}); + if(! card.hasPassword) { + item->isLocked = false; + item->setCellWidget("encrypt", item->btnUnlock = 0); + } else { + item->isLocked = card.isLocked; + if(item->btnUnlock==0) { + item->btnUnlock = new QPushButton; + item->btnUnlock->setMaximumHeight(36); + item->setCellWidget("encrypt", item->btnUnlock); + connect(item->btnUnlock, &QPushButton::clicked, item->btnUnlock, [=] { + if(! item->isLocked) return; + bool ok; + auto pwd = QInputDialog::getText(this, tr("Input password"), tr("Input password"), QLineEdit::Password, QString(), &ok); + if(! ok) return; + QJsonObject json; + json.insert("_id", "VerifyPassword"); + json.insert("_type", "VerifyPassword"); + json.insert("pwd", pwd); + auto waitingDlg = new WaitingDlg(this, tr("VerifyPassword")+" ..."); + waitingDlg->show(); + auto reply = NetReq("http://"+card.ip+":2016/settings").timeout(30000).post(json); + waitingDlg->connAbort(reply); + connect(reply, &QNetworkReply::finished, item->btnUnlock, [=] { + QJsonDocument json; + auto err = checkReplyForJson(reply, &json); + if(! err.isEmpty()) { + waitingDlg->close(); + QMessageBox::critical(this, QObject::tr("Error"), err); + return; + } + if(! json["result"].toBool()) { + waitingDlg->close(); + QMessageBox::warning(this, tr("Tip Info"), tr("password is wrong")); + return; + } + waitingDlg->success(); + item->isLocked = false; + item->btnUnlock->setIcon(QIcon(":/res/UnLock.png")); + auto item = findItem(card.id); + if(item) { + item->mCard.isLocked = false; + item->btnUnlock->setIcon(QIcon(":/res/UnLock.png")); + } + }); + }); + } + item->btnUnlock->setIcon(QIcon(card.isLocked ? ":/res/Lock.png" : ":/res/UnLock.png")); //已验证显示绿色 没验证蓝色 + } + } + label->setText(tr("All")+": "+QString::number(cnt)); + }); hBox->addWidget(btnRefresh); auto txtSearch = new QLineEdit; @@ -40,191 +162,35 @@ SendProgramDialog::SendProgramDialog(QString progName, QWidget *parent) : QDialo txtSearch->setStyleSheet("QLineEdit{border: 2px solid #aaa; padding: 2px;}"); txtSearch->addAction(new QAction(QIcon(":/res/program/bnSearch.png"), QString()), QLineEdit::LeadingPosition); connect(txtSearch, &QLineEdit::textEdited, this, [=](const QString &text) { - auto cnt = table->rowCount(); - for(int rr=0; rrsetRowHidden(rr, !(text.isEmpty() || table->text(rr, "id").contains(text) || table->text(rr, "ip").contains(text) || table->text(rr, "alias").contains(text) || table->text(rr, "size").contains(text))); + auto cnt = table->topLevelItemCount(); + for(int rr=0; rritem(rr); + item->setHidden(! (text.isEmpty() || item->text("id").contains(text) || item->text("ip").contains(text) || item->text("alias").contains(text) || item->text("size").contains(text))); + } }); hBox->addWidget(txtSearch); - table = new Table{ - {"id", "ID", 130}, - {"online", tr("Online"), 40}, - {"ip", "IP", 100}, - {"size", tr("Screen Size"), 80}, - {"alias", tr("Alias"), 120}, - {"encrypt", tr("Security"), 40}, - {"progress", tr("Progress"), 120}, - {"remarks", tr("Remarks"), QHeaderView::Stretch} - }; - table->setDefs(); - auto colId = table->mFieldMap["id"]; - table->sortItems(colId); - table->setSelectionMode(Table::NoSelection); - table->setStyle(new ViewItemStyle); + table = new LoQTreeWidget; + table->addCol("#", "", 20); + table->addCol("id", "ID", 130).margin(4); + table->addCol("online", tr("Online"), 40); + table->addCol("ip", "IP", 100); + table->addCol("size", tr("Screen Size"), 80).alignC(), + table->addCol("alias", tr("Alias"), 120); + table->addCol("encrypt", tr("Security"), 40); + table->addCol("progress", tr("Progress"), 120); + table->addCol("remarks", tr("Remarks"), QHeaderView::Stretch); + table->setDefs()->setHeaderAlignC(); + table->addFd(); + table->setSelectionMode(QAbstractItemView::NoSelection); + table->setSortingEnabled(true); vBox->addWidget(table); - fdCheckAll = new QCheckBox(table); - connect(fdCheckAll, &QCheckBox::stateChanged, this, [=](int state) { - if(state==Qt::PartiallyChecked) return; - int cnt = table->rowCount(); - for(int rr=0; rrisRowHidden(rr)) table->itemValid(rr, colId)->setCheckState((Qt::CheckState) state); - }); - connect(table, &Table::updGeos, this, [=] { - fdCheckAll->move(table->verticalHeader()->size().width() + 8, 2); - }); - auto cellClicked = [=](int row, int column) { - if(column!=colId) return; - auto item = table->itemValid(row, colId); - auto state = item->checkState()==Qt::Checked ? Qt::Unchecked : Qt::Checked; - item->setCheckState(state); - int cnt = table->rowCount(); - fdCheckAll->blockSignals(true); - for(int rr=0; rrisRowHidden(rr) && table->itemValid(rr, colId)->checkState()!=state) { - fdCheckAll->setCheckState(Qt::PartiallyChecked); - goto end; - } - fdCheckAll->setCheckState(state); - end:fdCheckAll->blockSignals(false); - }; - connect(table, &Table::cellClicked, table, cellClicked); - connect(table, &Table::cellEntered, table, [=](int row, int column) { - if(column!=colId) return; - if((QApplication::mouseButtons() & Qt::LeftButton) == 0) return; - cellClicked(row, column); - }); + auto sortField = gDevicePanel->mDeviceTable->sortField(); + if(sortField=="id" || sortField=="ip" || sortField=="alias") table->sortItems(sortField, gDevicePanel->mDeviceTable->header()->sortIndicatorOrder()); + else table->sortItems("id"); - auto btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - btnBox->button(QDialogButtonBox::Ok)->setText(tr("Publish")); - connect(btnBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - connect(btnBox, &QDialogButtonBox::accepted, this, [=] { - if(mWaitCnt > 0) return; - int cnt = table->rowCount(); - int sentCnt{0}; - for(int rr=0; rrisRowHidden(rr)) { - auto fdId = table->itemValid(rr, colId); - if(fdId->checkState()!=Qt::Checked) continue; - if(fdId->data(isSending).toBool()) continue; - auto btnUnlock = (QPushButton*) table->cellWidget(rr, "encrypt"); - auto fdRemarks = table->itemValid(rr, "remarks"); - if(btnUnlock && btnUnlock->property("isLocked").toBool()) { - fdRemarks->setText(tr("This screen is encrypted")); - fdRemarks->setForeground(Qt::red); - continue; - } - auto fdProgress = (QProgressBar*) table->cellWidget(rr, "progress"); - fdProgress->setValue(0); - if(sentCnt>=5) { - fdRemarks->setText(" "+tr("Waiting")+" ..."); - fdRemarks->setForeground(Qt::black); - mWaitCnt++; - continue; - } - fdId->setData(isSending, true); - fdRemarks->setText(""); - auto sendProg = new SendProgThread(programsDir()+"/"+mProgName+"_tmp", table->text(rr, "ip"), 3333); - connect(sendProg, &SendProgThread::emErr, fdProgress, [=](QString strTip) { - fdId->setData(isSending, false); - if(strTip=="OK") { - fdId->setCheckState(Qt::Unchecked); - fdRemarks->setText("OK"); - fdRemarks->setForeground(Qt::darkGreen); - } else { - fdRemarks->setText(strTip); - fdRemarks->setForeground(Qt::red); - } - sendNext(); - }); - connect(sendProg, &SendProgThread::emProgress, fdProgress, &QProgressBar::setValue); - connect(this, &SendProgramDialog::stopAllThd, sendProg, &SendProgThread::stop); - sendProg->start(); - sentCnt++; - } - }); - vBox->addWidget(btnBox); - - refresh(); - - auto timer = new QTimer(this); - connect(timer, &QTimer::timeout, this, &SendProgramDialog::refresh); - timer->start(60000); -} - -void SendProgramDialog::addRow(LedCard card) { - int cnt = table->rowCount(); - for(int rr=0; rrtext(rr, "id") == card.id) { - updRow(rr, card); - return; - } - table->setSortingEnabled(false); - table->setRowCount(cnt+1); - - auto item = table->setText(cnt, "id", card.id); - item->setCheckState(Qt::Unchecked); - item->setFlags(item->flags() & ~Qt::ItemIsUserCheckable); - - auto fdOnline = new QLabel; - fdOnline->setAlignment(Qt::AlignCenter); - table->setCellWidget(cnt, "online", fdOnline); - - auto fdProgress = new QProgressBar; - fdProgress->setAlignment(Qt::AlignCenter); - fdProgress->setStyleSheet("QProgressBar {margin-top: 6px; margin-bottom: 6px;}"); - table->setCellWidget(cnt, "progress", fdProgress); - - updRow(cnt, card); - table->setSortingEnabled(true); -} -void SendProgramDialog::updRow(int row, LedCard card) { - table->setText(row, "alias", card.alias); - table->setText(row, "ip", card.ip); - table->setText(row, "size", QString("%1 x %2").arg(card.mWidth).arg(card.mHeight))->setTextAlignment(Qt::AlignCenter); - ((QLabel*) table->cellWidget(row, "online"))->setPixmap(QPixmap(card.isOnline ? ":/res/O_Online.png" : ":/res/O_Offline.png")); - if(! card.hasPassword) table->setCellWidget(row, "encrypt", 0); - else { - auto btnUnlock = (QPushButton*) table->cellWidget(row, "encrypt"); - if(btnUnlock==0) { - btnUnlock = new QPushButton; - btnUnlock->setMaximumHeight(40); - btnUnlock->setProperty("isLocked", card.isLocked); - table->setCellWidget(row, "encrypt", btnUnlock); - connect(btnUnlock, &QPushButton::clicked, btnUnlock, [=] { - if(! btnUnlock->property("isLocked").toBool()) return; - bool ok; - auto pwd = QInputDialog::getText(this, tr("Input password"), tr("Input password"), QLineEdit::Password, QString(), &ok); - if(! ok) return; - QJsonObject json; - json.insert("_id", "VerifyPassword"); - json.insert("_type", "VerifyPassword"); - json.insert("pwd", pwd); - auto waitingDlg = new WaitingDlg(this, tr("VerifyPassword")+" ..."); - waitingDlg->show(); - auto reply = NetReq("http://"+card.ip+":2016/settings").timeout(60000).post(json); - waitingDlg->connAbort(reply); - connect(reply, &QNetworkReply::finished, btnUnlock, [=] { - QJsonDocument json; - QString err = checkReplyForJson(reply, &json); - if(! err.isEmpty()) { - waitingDlg->close(); - QMessageBox::critical(this, QObject::tr("Error"), err); - return; - } - if(! json["result"].toBool()) { - waitingDlg->close(); - QMessageBox::warning(this, tr("Tip Info"), tr("password is wrong")); - return; - } - waitingDlg->success(); - btnUnlock->setProperty("isLocked", false); - btnUnlock->setIcon(QIcon(":/res/UnLock.png")); - auto item = findItem(card.id); - if(item) { - item->mCard.isLocked = false; - item->btnUnlock->setIcon(QIcon(":/res/UnLock.png")); - } - }); - }); - } - btnUnlock->setIcon(QIcon(card.isLocked ? ":/res/Lock.png" : ":/res/UnLock.png")); //已验证显示绿色 没验证蓝色 - } + emit btnRefresh->clicked(); } void SendProgramDialog::closeEvent(QCloseEvent *) { @@ -232,42 +198,30 @@ void SendProgramDialog::closeEvent(QCloseEvent *) { } void SendProgramDialog::sendNext() { if(mWaitCnt <= 0) return; - int cnt = table->rowCount(); - for(int rr=0; rrisRowHidden(rr)) { - auto fdId = table->itemValid(rr, "id"); - if(fdId->checkState()!=Qt::Checked) continue; - if(fdId->data(isSending).toBool()) continue; - auto btnUnlock = (QPushButton*) table->cellWidget(rr, "encrypt"); - if(btnUnlock && btnUnlock->property("isLocked").toBool()) continue; - auto fdRemarks = table->itemValid(rr, "remarks"); - if(! fdRemarks->text().startsWith(" ")) continue; - fdRemarks->setText(""); - auto fdProgress = (QProgressBar*) table->cellWidget(rr, "progress"); - fdProgress->setValue(0); - fdId->setData(isSending, true); + int cnt = table->topLevelItemCount(); + SendProgramItem *item; + auto remarks = "remarks"**table; + for(int rr=0; rritem(rr))->isHidden() && item->checkState("id") == Qt::Checked && ! item->isSending && ! item->isLocked && item->text(remarks).startsWith(" ")) { + item->setText(remarks, ""); + item->fdProgress->setValue(0); + item->isSending = true; mWaitCnt--; - auto sendProg = new SendProgThread(programsDir()+"/"+mProgName+"_tmp", table->text(rr, "ip"), 3333); - connect(sendProg, &SendProgThread::emErr, fdProgress, [=](QString strTip) { - fdId->setData(isSending, false); + auto sendProg = new SendProgThread(programsDir()+"/"+mProgName+"_tmp", item->text("ip"), 3333); + connect(sendProg, &SendProgThread::emErr, item->fdProgress, [=](QString strTip) { + item->isSending = false; if(strTip=="OK") { - fdId->setCheckState(Qt::Unchecked); - fdRemarks->setText("OK"); - fdRemarks->setForeground(Qt::darkGreen); + item->setCheckState("id", Qt::Unchecked); + item->setText(remarks, "OK"); + item->setForeground(remarks, Qt::darkGreen); } else { - fdRemarks->setText(strTip); - fdRemarks->setForeground(Qt::red); + item->setText(remarks, strTip); + item->setForeground(remarks, Qt::red); } sendNext(); }); - connect(sendProg, &SendProgThread::emProgress, fdProgress, &QProgressBar::setValue); + connect(sendProg, &SendProgThread::emProgress, item->fdProgress, &QProgressBar::setValue); connect(this, &SendProgramDialog::stopAllThd, sendProg, &SendProgThread::stop); sendProg->start(); return; } } - -void SendProgramDialog::refresh() { - int cnt = gDevicePanel->mDeviceTable->topLevelItemCount(); - for(int rr=0; rrmDeviceTable->topLevelItem(rr))->mCard); - label->setText(tr("All")+": "+QString::number(cnt)); -} diff --git a/LedOK/program/sendprogramdialog.h b/LedOK/program/sendprogramdialog.h index c78916b..cecb812 100644 --- a/LedOK/program/sendprogramdialog.h +++ b/LedOK/program/sendprogramdialog.h @@ -1,51 +1,44 @@ #ifndef SENDPROGRAMDIALOG_H #define SENDPROGRAMDIALOG_H -#include "globaldefine.h" -#include "gutil/qgui.h" +#include "base/loqtreewidget.h" #include -#include -#include -#include +#include class SendProgramDialog : public QDialog { Q_OBJECT public: - explicit SendProgramDialog(QString, QWidget *parent = nullptr); + explicit SendProgramDialog(QString, QWidget *parent); signals: void stopAllThd(); -protected slots: - void refresh(); protected: void closeEvent(QCloseEvent *event) override; void sendNext(); - void addRow(LedCard); - void updRow(int, LedCard); - Table *table; - QCheckBox *fdCheckAll; + LoQTreeWidget *table; int mWaitCnt{0}; QLabel *label; QString mProgName; QString m_strUrl; - - enum {isSending = Qt::UserRole}; }; -class ViewItemStyle : public QProxyStyle { +class SendProgramItem : public TreeWidgetItem { public: - ViewItemStyle() : QProxyStyle(QApplication::style()) {} - QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override { - auto res = QProxyStyle::subElementRect(element, option, widget); - if(option && option->type==QStyleOption::SO_ViewItem && ((QStyleOptionViewItem*)option)->features & QStyleOptionViewItem::HasCheckIndicator && ((QStyleOptionViewItem*)option)->index.internalId()==0) res.setLeft(res.x() + 6); - return res; - } - int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override { - auto res = QProxyStyle::pixelMetric(metric, option, widget); - if(metric==PM_FocusFrameHMargin && option && option->type==QStyleOption::SO_ViewItem && ((QStyleOptionViewItem*)option)->features & QStyleOptionViewItem::HasCheckIndicator) res += 4; - return res; + using TreeWidgetItem::TreeWidgetItem; + void setResult(QString tip, QColor color) { + auto remarks = "remarks"**treeWidget(); + setText(remarks, tip); + setToolTip(remarks, tip); + setForeground(remarks, color); } + bool isSending = false; + bool isLocked = true; + QLabel *fdOnline; + QProgressBar *fdProgress; + QPushButton *btnUnlock = 0; }; + + #endif // SENDPROGRAMDIALOG_H diff --git a/LedOK/program/wplanitem.cpp b/LedOK/program/wplanitem.cpp deleted file mode 100644 index bae9087..0000000 --- a/LedOK/program/wplanitem.cpp +++ /dev/null @@ -1,125 +0,0 @@ -#include "wplanitem.h" -#include "gutil/qgui.h" -#include - -wPlanItem::wPlanItem(QListWidgetItem *item, const QJsonObject *json) : m_item(item) { - setAttribute(Qt::WA_DeleteOnClose); - - auto vBox = new VBox(this); - vBox->setContentsMargins(6, 6, 0, 6); - auto hBox = new HBox(vBox); - - fdIdx = new QLabel("1"); - hBox->addWidget(fdIdx); - - tStart = new QTimeEdit; - tStart->setDisplayFormat("HH:mm"); - hBox->addWidget(tStart); - - tEnd = new QTimeEdit; - tEnd->setDisplayFormat("HH:mm"); - tEnd->setTime(QTime(23, 59, 59)); - - hBox->addWidget(tEnd); - - bnDel = new QPushButton; - hBox->addWidget(bnDel); - - hBox = new HBox(vBox); - - sMon = new QPushButton(tr("M")); - sMon ->setCheckable(true); - sMon ->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sMon); - hBox->addStretch(); - - sTues = new QPushButton(tr("Tu")); - sTues->setCheckable(true); - sTues->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sTues); - hBox->addStretch(); - - sWed = new QPushButton(tr("W")); - sWed ->setCheckable(true); - sWed ->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sWed); - hBox->addStretch(); - - sThur = new QPushButton(tr("Th")); - sThur->setCheckable(true); - sThur->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sThur); - hBox->addStretch(); - - sFri = new QPushButton(tr("F")); - sFri ->setCheckable(true); - sFri ->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sFri); - hBox->addStretch(); - - sSat = new QPushButton(tr("Sa")); - sSat ->setCheckable(true); - sSat ->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sSat); - hBox->addStretch(); - - sSun = new QPushButton(tr("Su")); - sSun ->setCheckable(true); - sSun ->setProperty("ssName", "weeklySelector"); - hBox->addWidget(sSun); - - if(json==0) { - sMon ->setChecked(true); - sTues->setChecked(true); - sWed ->setChecked(true); - sThur->setChecked(true); - sFri ->setChecked(true); - sSat ->setChecked(true); - sSun ->setChecked(true); - } else { - tStart->setTime(QTime::fromString(json->value("start").toString(), "hh:mm")); - tEnd->setTime(QTime::fromString(json->value("end").toString(), "hh:mm")); - auto oWeekly = json->value("weekly").toArray(); - sMon ->setChecked(oWeekly.contains(1)); - sTues->setChecked(oWeekly.contains(2)); - sWed ->setChecked(oWeekly.contains(3)); - sThur->setChecked(oWeekly.contains(4)); - sFri ->setChecked(oWeekly.contains(5)); - sSat ->setChecked(oWeekly.contains(6)); - sSun ->setChecked(oWeekly.contains(7)); - } - connect(tStart, SIGNAL(timeChanged(const QTime&)), this, SLOT(onItemChanged())); - connect(tEnd, SIGNAL(timeChanged(const QTime&)), this, SLOT(onItemChanged())); - connect(sMon, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sTues, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sWed, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sThur, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sFri, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sSat, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(sSun, SIGNAL(toggled(bool)), this, SLOT(onItemChanged())); - connect(bnDel, SIGNAL(clicked(bool)), this, SLOT(onDelete(bool))); -} - -void wPlanItem::onItemChanged(){ - emit sigItemChanged(m_item); -} - -void wPlanItem::onDelete(bool){ - emit sigDelete(m_item); -} - -QJsonObject wPlanItem::planJson() const { - QJsonObject oRoot; - QJsonArray oWeekly; - if(sMon ->isChecked()) oWeekly.append(QJsonValue(1)); - if(sTues->isChecked()) oWeekly.append(QJsonValue(2)); - if(sWed ->isChecked()) oWeekly.append(QJsonValue(3)); - if(sThur->isChecked()) oWeekly.append(QJsonValue(4)); - if(sFri ->isChecked()) oWeekly.append(QJsonValue(5)); - if(sSat ->isChecked()) oWeekly.append(QJsonValue(6)); - if(sSun ->isChecked()) oWeekly.append(QJsonValue(7)); - oRoot["start"] = tStart->time().toString("hh:mm"); - oRoot["end"] = tEnd->time().toString("hh:mm"); - oRoot["weekly"] = oWeekly; - return oRoot; -} diff --git a/LedOK/program/wplanitem.h b/LedOK/program/wplanitem.h deleted file mode 100644 index 011f10e..0000000 --- a/LedOK/program/wplanitem.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef WPLANITEM_H -#define WPLANITEM_H - -#include -#include -#include -#include -#include - -class wPlanItem : public QWidget { - Q_OBJECT -public: - explicit wPlanItem(QListWidgetItem *item, const QJsonObject * = 0); - - QJsonObject planJson() const; - QLabel *fdIdx; - -signals: - void sigItemChanged(QListWidgetItem *); - void sigDelete(QListWidgetItem *); - -protected slots: - void onItemChanged(); - void onDelete(bool); - -private: - QListWidgetItem *m_item; - - QTimeEdit *tStart; - QTimeEdit *tEnd; - QPushButton *bnDel; - QPushButton *sMon; - QPushButton *sTues; - QPushButton *sWed; - QPushButton *sThur; - QPushButton *sFri; - QPushButton *sSat; - QPushButton *sSun; -}; - -#endif // WPLANITEM_H diff --git a/LedOK/program/wplanlist.cpp b/LedOK/program/wplanlist.cpp deleted file mode 100644 index 02a3a5d..0000000 --- a/LedOK/program/wplanlist.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "wplanlist.h" -#include "wplanitem.h" -#include - -wPlanList::wPlanList(QWidget *parent) : QListWidget(parent) { - setAttribute(Qt::WA_DeleteOnClose); - setFrameShape(QListWidget::NoFrame); -} - -void wPlanList::adjustItemNum() { - int n = count(); - for(int i=0; i(itemWidget(item(i)))->fdIdx->setNum(i+1); -} - -QJsonArray wPlanList::plansJson() { - QJsonArray oRoot; - int n = count(); - for(int i=0; i(itemWidget(item(i))); - oRoot.append(w->planJson()); - } - return oRoot; -} -//添加时间计划表 -void wPlanList::onAddPlan() -{ - QListWidgetItem *item = new QListWidgetItem(); - item->setFlags(item->flags() & ~Qt::ItemIsSelectable); - wPlanItem *widget = new wPlanItem(item); - addItem(item); - setItemWidget(item, widget); - setCurrentItem(item); - connect(widget, SIGNAL(sigItemChanged(QListWidgetItem*)), this, SIGNAL(itemChanged(QListWidgetItem*))); - connect(widget, SIGNAL(sigDelete(QListWidgetItem*)), this, SLOT(onDeletePlan(QListWidgetItem*))); - adjustItemNum(); - emit itemChanged(item); -} - -void wPlanList::onRestorePlan(const QJsonArray &jRoot) -{ - clear(); - int n = jRoot.count(); - for(int i=0; isetFlags(item->flags() & ~Qt::ItemIsSelectable); - auto json = jRoot.at(i).toObject(); - wPlanItem *widget = new wPlanItem(item, &json); - addItem(item); - setItemWidget(item, widget); - setCurrentItem(item); - connect(widget, SIGNAL(sigItemChanged(QListWidgetItem*)), this, SIGNAL(itemChanged(QListWidgetItem*))); - connect(widget, SIGNAL(sigDelete(QListWidgetItem*)), this, SLOT(onDeletePlan(QListWidgetItem*))); - } - adjustItemNum(); -} - -void wPlanList::onDeletePlan(QListWidgetItem *item) -{ - int index = row(item); - if(index >= 0) { - removeItemWidget(item); - delete item; - emit itemChanged(nullptr); - } - adjustItemNum(); -} diff --git a/LedOK/program/wplanlist.h b/LedOK/program/wplanlist.h deleted file mode 100644 index 5d16738..0000000 --- a/LedOK/program/wplanlist.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef WPLANLIST_H -#define WPLANLIST_H - -#include -#include - -class wPlanList : public QListWidget { - Q_OBJECT -public: - explicit wPlanList(QWidget *parent = nullptr); - QJsonArray plansJson(); - -protected: - void adjustItemNum(); - -signals: - -public slots: - void onAddPlan(); - void onRestorePlan(const QJsonArray &jRoot); - void onDeletePlan(QListWidgetItem *item); -}; - -#endif // WPLANLIST_H diff --git a/LedOK/res.qrc b/LedOK/res.qrc index 86b07fe..f8f6f9f 100644 --- a/LedOK/res.qrc +++ b/LedOK/res.qrc @@ -17,10 +17,10 @@ res/DeviceNum_All.png res/FlashArrow.png res/Lock.png - res/O_Offline.png - res/O_Online.png + res/offline.png + res/online.png res/UnLock.png - res/bnDetail.png + res/info.png res/deviceReadbackPic.png res/DeviceManager_s.png res/DeviceManager_u.png diff --git a/LedOK/res/O_Offline.png b/LedOK/res/O_Offline.png deleted file mode 100644 index 23a6306..0000000 Binary files a/LedOK/res/O_Offline.png and /dev/null differ diff --git a/LedOK/res/O_Online.png b/LedOK/res/O_Online.png deleted file mode 100644 index d53dfa4..0000000 Binary files a/LedOK/res/O_Online.png and /dev/null differ diff --git a/LedOK/res/bnDetail.png b/LedOK/res/bnDetail.png deleted file mode 100644 index 256e52a..0000000 Binary files a/LedOK/res/bnDetail.png and /dev/null differ diff --git a/LedOK/res/info.png b/LedOK/res/info.png new file mode 100644 index 0000000..37e6eac Binary files /dev/null and b/LedOK/res/info.png differ diff --git a/LedOK/res/offline.png b/LedOK/res/offline.png new file mode 100644 index 0000000..5747fed Binary files /dev/null and b/LedOK/res/offline.png differ diff --git a/LedOK/res/online.png b/LedOK/res/online.png new file mode 100644 index 0000000..5643b89 Binary files /dev/null and b/LedOK/res/online.png differ diff --git a/LedOK/tools.cpp b/LedOK/tools.cpp index 95f9177..e67ea39 100644 --- a/LedOK/tools.cpp +++ b/LedOK/tools.cpp @@ -58,7 +58,7 @@ void Tools::mergeFormat(QTextEdit *textEdit, const QTextCharFormat &fmt) { if(! cursor.hasSelection()) cursor.select(QTextCursor::WordUnderCursor); cursor.mergeCharFormat(fmt); } -void Tools::saveImg(const QString& dir, const QFontMetrics& metric, const QFont& font, const QColor& color, QJsonObject& imgs, const QString& str, const QString& name) { +void Tools::saveImg(const QString& dir, const QFontMetrics& metric, const QFont& font, const QColor& color, JObj& imgs, const QString& str, const QString& name) { if(str.isEmpty()) return; QImage img(metric.horizontalAdvance(str), metric.lineSpacing(), QImage::Format_ARGB32); img.fill(Qt::transparent); @@ -83,8 +83,8 @@ void Tools::saveImg(const QString& dir, const QFontMetrics& metric, const QFont& file.close(); imgs.insert(name, md5); } -void Tools::saveImg2(const QString& dir, const QFontMetrics& metric, const QFont& font, const QColor& color, QJsonArray& imgs, const QString& str, const QString& name) { - QJsonObject obj{ +void Tools::saveImg2(const QString& dir, const QFontMetrics& metric, const QFont& font, const QColor& color, JArray& imgs, const QString& str, const QString& name) { + JObj obj{ {"name", name}, {"mime", "image/png"} }; diff --git a/LedOK/tools.h b/LedOK/tools.h index c7522d8..26f382f 100644 --- a/LedOK/tools.h +++ b/LedOK/tools.h @@ -2,6 +2,7 @@ #define TOOLS_H #include "program/progitem.h" +#include "gutil/qjson.h" #include #include #include @@ -14,7 +15,6 @@ const QString str0_9[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; extern QTextEdit *gFdResInfo; -extern QString gFileHome; extern ProgItem *gProgItem; extern QString css; @@ -31,8 +31,8 @@ public: static void mergeFormat(QTextEdit *textEdit, const QTextCharFormat &format); static QString readErrStr(QImageReader::ImageReaderError); static QString fileMd5(QString); - static void saveImg(const QString&, const QFontMetrics&, const QFont&, const QColor&, QJsonObject&, const QString&, const QString&); - static void saveImg2(const QString&, const QFontMetrics&, const QFont&, const QColor&, QJsonArray&, const QString&, const QString&); + static void saveImg(const QString&, const QFontMetrics&, const QFont&, const QColor&, JObj&, const QString&, const QString&); + static void saveImg2(const QString&, const QFontMetrics&, const QFont&, const QColor&, JArray&, const QString&, const QString&); static QColor int2Color(int value); static int color2Int(const QColor& color); static QBrush getBrush(const QColor& color); diff --git a/LedOK/translations/app_en.qm b/LedOK/translations/app_en.qm deleted file mode 100644 index 502f7b9..0000000 Binary files a/LedOK/translations/app_en.qm and /dev/null differ diff --git a/LedOK/translations/app_ja.qm b/LedOK/translations/app_ja.qm deleted file mode 100644 index 6fba7ee..0000000 Binary files a/LedOK/translations/app_ja.qm and /dev/null differ diff --git a/LedOK/translations/app_zh_CN.qm b/LedOK/translations/app_zh_CN.qm deleted file mode 100644 index 5c084d6..0000000 Binary files a/LedOK/translations/app_zh_CN.qm and /dev/null differ diff --git a/LedOK/translations/app_zh_TW.qm b/LedOK/translations/app_zh_TW.qm deleted file mode 100644 index d8946d3..0000000 Binary files a/LedOK/translations/app_zh_TW.qm and /dev/null differ diff --git a/LedOK/translations/qt_ar.qm b/LedOK/translations/qt_ar.qm new file mode 100644 index 0000000..2dd5f16 Binary files /dev/null and b/LedOK/translations/qt_ar.qm differ diff --git a/LedOK/translations/qt_bg.qm b/LedOK/translations/qt_bg.qm new file mode 100644 index 0000000..2a81a6f Binary files /dev/null and b/LedOK/translations/qt_bg.qm differ diff --git a/LedOK/translations/qt_ca.qm b/LedOK/translations/qt_ca.qm new file mode 100644 index 0000000..f939e04 Binary files /dev/null and b/LedOK/translations/qt_ca.qm differ diff --git a/LedOK/translations/qt_cs.qm b/LedOK/translations/qt_cs.qm new file mode 100644 index 0000000..3035bdf Binary files /dev/null and b/LedOK/translations/qt_cs.qm differ diff --git a/LedOK/translations/qt_da.qm b/LedOK/translations/qt_da.qm new file mode 100644 index 0000000..3ca8c67 Binary files /dev/null and b/LedOK/translations/qt_da.qm differ diff --git a/LedOK/translations/qt_de.qm b/LedOK/translations/qt_de.qm new file mode 100644 index 0000000..ee7cdeb Binary files /dev/null and b/LedOK/translations/qt_de.qm differ diff --git a/LedOK/translations/qt_en.qm b/LedOK/translations/qt_en.qm new file mode 100644 index 0000000..937ea3e Binary files /dev/null and b/LedOK/translations/qt_en.qm differ diff --git a/LedOK/translations/qt_en.ts b/LedOK/translations/qt_en.ts deleted file mode 100644 index 6d08da8..0000000 --- a/LedOK/translations/qt_en.ts +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/LedOK/translations/qt_es.qm b/LedOK/translations/qt_es.qm new file mode 100644 index 0000000..4ca085c Binary files /dev/null and b/LedOK/translations/qt_es.qm differ diff --git a/LedOK/translations/qt_fi.qm b/LedOK/translations/qt_fi.qm new file mode 100644 index 0000000..cbb4fd5 Binary files /dev/null and b/LedOK/translations/qt_fi.qm differ diff --git a/LedOK/translations/qt_fr.qm b/LedOK/translations/qt_fr.qm new file mode 100644 index 0000000..9dc05e4 Binary files /dev/null and b/LedOK/translations/qt_fr.qm differ diff --git a/LedOK/translations/qt_gd.qm b/LedOK/translations/qt_gd.qm new file mode 100644 index 0000000..f0571d3 Binary files /dev/null and b/LedOK/translations/qt_gd.qm differ diff --git a/LedOK/translations/qt_he.qm b/LedOK/translations/qt_he.qm new file mode 100644 index 0000000..4b623a3 Binary files /dev/null and b/LedOK/translations/qt_he.qm differ diff --git a/LedOK/translations/qt_hu.qm b/LedOK/translations/qt_hu.qm new file mode 100644 index 0000000..c14de0e Binary files /dev/null and b/LedOK/translations/qt_hu.qm differ diff --git a/LedOK/translations/qt_it.qm b/LedOK/translations/qt_it.qm new file mode 100644 index 0000000..f2b98bb Binary files /dev/null and b/LedOK/translations/qt_it.qm differ diff --git a/LedOK/translations/qt_ja.qm b/LedOK/translations/qt_ja.qm new file mode 100644 index 0000000..0b83c51 Binary files /dev/null and b/LedOK/translations/qt_ja.qm differ diff --git a/LedOK/translations/qt_ja.ts b/LedOK/translations/qt_ja.ts deleted file mode 100644 index 5a1c904..0000000 --- a/LedOK/translations/qt_ja.ts +++ /dev/null @@ -1,8655 +0,0 @@ - - - - - QWidget - - * - * - - - - QShortcut - - + - + - - - CD - CD - - - Go - 確定 - - - No - いいえ - - - Up - - - - Alt - Alt - - - F%1 - F%1 - - - DOS - DOS - - - Del - Del - - - Cut - 切り取り - - - End - End - - - Esc - Esc - - - Ins - Ins - - - New - 新規 - - - Num - Num - - - Red - - - - Tab - Tab - - - WWW - WWW - - - Yes - はい - - - Back - 戻る - - - Away - 離席 - - - Blue - - - - Book - 書籍 - - - Call - 通話 - - - Copy - コピー - - - Ctrl - Ctrl - - - Down - - - - Exit - 終了 - - - Find - 検索 - - - Flip - フリップ - - - Game - ゲーム - - - Help - Help - - - Home - Home - - - Info - 情報 - - - Left - - - - Menu - Menu - - - Meta - Meta - - - News - ニュース - - - Open - 開く - - - PgUp - PgUp - - - Play - 再生 - - - Redo - やり直す - - - Save - 保存 - - - Send - 送信 - - - Shop - ショップ - - - Stop - 停止 - - - Time - 時間 - - - Undo - 元に戻す - - - XFer - 変換 - - - View - 表示 - - - Zoom - 拡大・縮小 - - - Split Screen - 画面の分割 - - - Clear - クリア - - - Close - 閉じる - - - Eject - 取り出し - - - Enter - Enter - - - Green - - - - Guide - ガイド - - - Kanji - 漢字 - - - Music - 音楽 - - - Paste - 貼り付け - - - Pause - Pause - - - Phone - 電話 - - - Print - Print - - - Reply - 返信 - - - Right - - - - Shift - Shift - - - Sleep - スリープ - - - Space - Space - - - Tools - ツール - - - Video - 動画 - - - Hiragana - ひらがな - - - Wireless - 無線 - - - Media Record - メディアの録音 - - - Media Rewind - メディアの早戻し - - - Multiple Candidate - 全候補 - - - Zenkaku - 全角 - - - Print Screen - プリントスクリーン - - - Audio Repeat - オーディオの繰り返し - - - Toggle Call/Hangup - 通話/終話の切替 - - - Zoom In - 拡大 - - - Camera Shutter - カメラシャッター - - - Ultra Wide Band - 超広帯域無線(UWB) - - - Hangul Special - ハングル スペシャル - - - Treble Down - 高音を下げる - - - Scroll Lock - スクロールロック - - - Media Pause - メディアの一時停止 - - - Word Processor - ワードプロセッサ - - - Volume Down - 音量を下げる - - - Volume Mute - 消音 - - - Kana Shift - カナシフト - - - Media Previous - 前のメディア - - - Home Page - ホームページ - - - Meeting - 会議 - - - Touchpad Off - タッチパッドをオフ - - - Volume Up - 音量を上げる - - - Menu PB - PB メニュー - - - Keyboard Brightness Up - キーボードの輝度を上げる - - - Hangul PostHanja - ハングル 漢字後変換 - - - Kana Lock - カナロック - - - Community - コミュニティ - - - Cancel - キャンセル - - - Launch (6) - (6)の起動 - - - Launch (7) - (7)の起動 - - - Launch (8) - (8)の起動 - - - Launch (9) - (9)の起動 - - - Launch (2) - (2)の起動 - - - Launch (3) - (3)の起動 - - - Launch (4) - (4)の起動 - - - Launch (5) - (5)の起動 - - - Launch (0) - (0)の起動 - - - Launch (1) - (1)の起動 - - - Launch (F) - (F)の起動 - - - Launch (B) - (B)の起動 - - - Launch (C) - (C)の起動 - - - Launch (D) - (D)の起動 - - - Launch (E) - (E)の起動 - - - Launch (A) - (A)の起動 - - - Delete - 削除 - - - Escape - エスケープ - - - Audio Random Play - オーディオのランダム再生 - - - Hangul - ハングル - - - Hangup - 終話 - - - Henkan - 変換 - - - Insert - 挿入 - - - Home Office - ホームオフィス - - - Last Number Redial - 直前の番号にリダイヤル - - - Logoff - ログオフ - - - Market - マーケット - - - Massyo - 単語抹消 - - - Bass Boost - 低音ブースト - - - Channel Up - チャンネルアップ - - - Option - オプション - - - PgDown - PgDown - - - Reload - リロード - - - Return - Return - - - Romaji - ローマ字 - - - Search - 検索 - - - Select - 選択 - - - SysReq - SysReq - - - Travel - 旅行 - - - NumLock - NumLock - - - WebCam - Webカメラ - - - Hiragana Katakana - ひらがな/カタカナ - - - Yellow - 黄色 - - - Top Menu - トップメニュー - - - ScrollLock - ScrollLock - - - Hot Links - 人気のリンク - - - Context1 - コンテキスト1 - - - Context2 - コンテキスト2 - - - Context3 - コンテキスト3 - - - Context4 - コンテキスト4 - - - Zoom Out - 縮小 - - - Page Up - ページアップ - - - Open URL - URL を開く - - - iTouch - iTouch - - - Previous Candidate - 前候補 - - - Toggle Media Play/Pause - メディアの再生と一時停止の切り替え - - - Caps Lock - キャプスロック - - - Eisu Shift - 英数シフト - - - Code input - コード入力 - - - Printer - プリンタ - - - Camera Focus - カメラフォーカス - - - Adjust Brightness - 輝度の調整 - - - Spreadsheet - スプレッドシート - - - Eisu toggle - 英数 - - - Keyboard Brightness Down - キーボードの輝度を下げる - - - Clear Grab - グラブのクリア - - - Monitor Brightness Up - モニタの輝度を上げる - - - System Request - システムリクエスト - - - Microphone Volume Up - マイクの音量を上げる - - - CapsLock - CapsLock - - - Backtab - Backtab - - - Bass Up - 低音を上げる - - - Battery - バッテリ - - - Katakana - カタカナ - - - Refresh - 更新 - - - Hibernate - 休止 - - - Application Left - 次のアプリケーション - - - Voice Dial - ボイスダイアル - - - Browser - ブラウザ - - - Keyboard Menu - キーボードメニュー - - - Back Forward - 戻る - - - Launch Mail - メールの起動 - - - Keyboard Light On/Off - キーボードライトのオン・オフ - - - Backspace - Backspae - - - Bass Down - 低音を下げる - - - Mail Forward - メールの転送 - - - Messenger - メッセンジャー - - - Hangul Banja - ハングル Banja モード - - - Hangul Hanja - ハングル 漢字 - - - Standby - スタンバイ - - - Hangul Start - ハングル 入力開始 - - - Documents - ドキュメント - - - Calculator - 電卓 - - - Support - サポート - - - Suspend - サスペンド - - - Display - ディスプレイ - - - Hangul Romaja - ハングル ローマ字入力 - - - My Sites - マイサイト - - - Rotate Windows - ウィンドウ切り替え - - - Touroku - 単語登録 - - - Zenkaku Hankaku - 全角/半角 - - - Hangul Jeonja - ハングル Jeonja モード - - - Treble Up - 高音を上げる - - - Subtitle - 字幕 - - - Hangul Jamo - ハングル 字母 - - - Bluetooth - ブルートゥース - - - Muhenkan - 無変換 - - - Num Lock - ナムロック - - - Screensaver - スクリーンセーバ - - - Number Lock - ナンバーロック - - - Power Down - 電源オフ - - - Spellchecker - スペルチェッカー - - - Hangul PreHanja - ハングル 漢字前変換 - - - Terminal - 端末 - - - Settings - 設定 - - - Add Favorite - お気に入りに追加 - - - Execute - 実行 - - - Finance - ファイナンス - - - Microphone Volume Down - マイクの音量を下げる - - - Task Panel - タスクパネル - - - Favorites - お気に入り - - - Forward - 進む - - - Page Down - ページダウン - - - Wake Up - 起動 - - - Power Off - 電源オフ - - - LightBulb - ライト - - - Touchpad Toggle - タッチパッドのオン/オフ - - - Hankaku - 半角 - - - Media Fast Forward - メディアの早送り - - - Hangul End - ハングル 入力終了 - - - Monitor Brightness Down - モニタの輝度を下げる - - - Microphone Mute - マイクをミュート - - - History - 履歴 - - - Media Play - メディアの再生 - - - Media Stop - メディアの停止 - - - Media Next - 次のメディア - - - Touchpad On - タッチパッドをオン - - - Channel Down - チャンネルダウン - - - Launch Media - メディアの起動 - - - Application Right - 前のアプリケーション - - - Pictures - 画像 - - - - QPageSize - - A0 - A0 - - - A1 - A1 - - - A2 - A2 - - - A3 - A3 - - - A4 - A4 - - - A5 - A5 - - - A6 - A6 - - - A7 - A7 - - - A8 - A8 - - - A9 - A9 - - - B0 - B0 - - - B1 - B1 - - - B2 - B2 - - - B3 - B3 - - - B4 - B4 - - - B5 - B5 - - - B6 - B6 - - - B7 - B7 - - - B8 - B8 - - - B9 - B9 - - - A10 - A10 - - - B10 - B10 - - - Note - ノート - - - Letter / ANSI A - レター / ANSI A - - - Legal - リーガルサイズ - - - Envelope Monarch - 封筒モナーク - - - Architect A - ARCH A - - - Architect B - ARCH B - - - Architect C - ARCH C - - - Architect D - ARCH D - - - Architect E - ARCH E - - - Letter Extra - レター Extra - - - Letter Small - レター Small - - - Envelope You 4 - 洋形4号封筒 - - - Envelope US 10 - US 封筒 #10 - - - Envelope US 11 - US 封筒 #11 - - - Envelope US 12 - US 封筒 #12 - - - Envelope US 14 - US 封筒 #14 - - - Envelope PRC 1 - PRC 封筒 #1 - - - Envelope PRC 2 - PRC 封筒 #2 - - - Envelope PRC 3 - PRC 封筒 #3 - - - Envelope PRC 4 - PRC 封筒 #4 - - - Envelope PRC 5 - PRC 封筒 #5 - - - Envelope PRC 6 - PRC 封筒 #6 - - - Envelope PRC 7 - PRC 封筒 #7 - - - Envelope PRC 8 - PRC 封筒 #8 - - - Envelope PRC 9 - PRC 封筒 #9 - - - Envelope C65 - C65 封筒 - - - Envelope DL - DL 封筒 - - - Envelope B4 - B4 封筒 - - - Envelope B5 - B5 封筒 - - - Envelope B6 - B6 封筒 - - - Envelope C0 - C0 封筒 - - - Envelope C1 - C1 封筒 - - - Envelope C2 - C2 封筒 - - - Envelope C3 - C3 封筒 - - - Envelope C4 - C4 封筒 - - - Envelope C5 - C5 封筒 - - - Envelope C6 - C6 封筒 - - - Envelope C7 - C7 封筒 - - - Executive (7.5 x 10 in) - エグゼクティヴ (7.5 × 10in) - - - ANSI C - ANSI C - - - ANSI D - ANSI D - - - ANSI E - ANSI E - - - A4 Plus - A4 Plus - - - Custom - カスタム - - - JIS B0 - JIS B0 - - - JIS B1 - JIS B1 - - - JIS B2 - JIS B2 - - - JIS B3 - JIS B3 - - - JIS B4 - JIS B4 - - - JIS B5 - JIS B5 - - - JIS B6 - JIS B6 - - - JIS B7 - JIS B7 - - - JIS B8 - JIS B8 - - - JIS B9 - JIS B9 - - - A3 Extra - A3 Extra - - - PRC 16K - PRC 16K - - - PRC 32K - PRC 32K - - - Quarto - クォート - - - PRC 32K Big - PRC 32K(大) - - - A4 Extra - A4 Extra - - - A4 Small - A4 Small - - - Executive (7.25 x 10.5 in) - エグゼクティヴ (7.25 × 10.5in) - - - Postcard - ポストカード - - - Tabloid / ANSI B - タブロイド / ANSI B - - - A5 Extra - A5 Extra - - - B5 Extra - B5 Extra - - - Envelope Invite - 招待状用封筒 - - - Envelope Chou 3 - 長形3号封筒 - - - Envelope Chou 4 - 長形4号封筒 - - - Statement - ステイトメント - - - Fan-fold German (8.5 x 12 in) - ドイツファンフォールド (8.5 × 12in) - - - Envelope PRC 10 - PRC 封筒 #10 - - - Envelope Kaku 2 - 角形2号封筒 - - - Envelope Kaku 3 - 角形3号封筒 - - - Envelope US 9 - US 封筒 #9 - - - %1 x %2 in - %1 × %2in - - - Super A - Super A - - - Super B - Super B - - - Fan-fold US (14.875 x 11 in) - US ファンフォールド (14.875 × 11in) - - - Fan-fold German Legal (8.5 x 13 in) - ドイツリーガルファンフォールド (8.5 × 13in) - - - Custom (%1in x %2in) - カスタム (%1in × %2in) - - - Custom (%1mm x %2mm) - カスタム (%1mm × %2mm) - - - Custom (%1CC x %2CC) - カスタム (%1CC × %2CC) - - - Custom (%1DD x %2DD) - カスタム (%1DD × %2DD) - - - Custom (%1pc x %2pc) - カスタム (%1pc × %2pc) - - - Custom (%1pt x %2pt) - カスタム (%1pt × %2pt) - - - Letter Plus - レター Plus - - - Tabloid Extra - タブロイド・エクストラ - - - Envelope Italian - 封筒イタリア - - - Double Postcard - ダブルポストカード - - - Legal Extra - リーガル Extra - - - Folio (8.27 x 13 in) - フォリオ (8.27 × 13in) - - - Ledger / ANSI B - レジャー / ANSI B - - - JIS B10 - JIS B10 - - - Envelope Personal - 個人用封筒 - - - - QDateTimeParser - - AM - 午前 - - - PM - 午後 - - - am - 午前 - - - pm - 午後 - - - - QPageSetupWidget - - CC - CC - - - DD - DD - - - in - in - - - mm - mm - - - pt - pt - - - P̸ - pc - - - Form - 書式設定 - - - bottom margin - 下端余白 - - - Paper - 用紙 - - - Paper source: - 給紙装置: - - - right margin - 右端余白 - - - Pica (P̸) - パイカ (pc) - - - Margins - 余白 - - - Custom - カスタム - - - Landscape - 横 (ランドスケープ) - - - Page Layout - ページレイアウト - - - Width: - 幅: - - - Orientation - 印刷の向き - - - Didot (DD) - ディドー (DD) - - - Portrait - 縦 (ポートレート) - - - Page order: - ページの順序: - - - top margin - 上端余白 - - - left margin - 左端余白 - - - Page size: - 用紙サイズ: - - - Cicero (CC) - シセロ (CC) - - - Reverse portrait - 縦 反転 (リバースポートレート) - - - Millimeters (mm) - ミリメートル (mm) - - - Points (pt) - ポイント (pt) - - - Pages per sheet: - シートごとのページ数: - - - Inches (in) - インチ (in) - - - Reverse landscape - 横 反転 (リバースランドスケープ) - - - Height: - 高さ: - - - - QDBusTrayIcon - - OK - OK - - - - QDialogButtonBox - - OK - OK - - - - QMessageBox - - OK - OK - - - Help - ヘルプ - - - Show Details... - 詳細を表示... - - - <p>Qt is a C++ toolkit for cross-platform application development.</p><p>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.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>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 the GNU LGPL version 3 or GNU LGPL version 2.1.</p><p>Qt licensed under the GNU LGPL version 3 is appropriate for the development of Qt&nbsp;applications provided you can comply with the terms and conditions of the GNU LGPL version 3.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt&nbsp;applications provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Please see <a href="http://%2/">%2</a> for an overview of Qt licensing.</p><p>Copyright (C) %1 The Qt Company Ltd and other contributors.</p><p>Qt and the Qt logo are trademarks of The Qt Company Ltd.</p><p>Qt is The Qt Company Ltd product developed as an open source project. See <a href="http://%3/">%3</a> for more information.</p> - <p>Qt はクロスプラットフォームアプリケーション開発用の C++ ツールキットです。</p><p>Qt はすべての主なデスクトップオペレーティングシステムにまたがってシングルソースポータビリティを提供します。また、組込み Linux やその他の組込み・モバイルオペレーティングシステムにも対応しています。</p><p>Qt はさまざまなユーザの需要に応えるために、3つの異なるライセンスで提供されています。</p><p>いかなるソースも第三者と共有したくない場合や GNU LGPL v3 や GNU LGPL v2.1 の条件に従うことができないようなプロプライエタリ/商用ソフトウェアの開発には商用ライセンス版の Qt の利用が適切です。</p><p>GNU LGPL v3 の条件に応じることができるのであれば GNU LGPL v3 版の Qt の利用が適切です。</p><p>GNU LGPL v2.1 の条件に応じることができるのであれば GNU LGPL v2.1 版の Qt の利用が適切です。</p><p>Qt のライセンスについての概要は <a href="http://%2/">%2</a> をご覧ください。</p><p>Copyright (C) %1 The Qt Company Ltd and other contributors.</p><p>Qt および Qt のロゴは The Qt Company Ltd の商標です。</p><p>Qt はオープンソースプロジェクトとして開発されている The Qt Company Ltd の製品です。詳細は <a href="http://%3/">%3</a> をご覧ください。</p> - - - About Qt - Qt について - - - Hide Details... - 詳細を隠す... - - - <h3>About Qt</h3><p>This program uses Qt version %1.</p> - <h3>Qt について</h3><p>このプログラムは Qt バージョン %1 を使用しています。</p> - - - - QPlatformTheme - - OK - OK - - - &No - いいえ(&N) - - - &Yes - はい(&Y) - - - Help - ヘルプ - - - Open - 開く - - - Save - 保存 - - - Abort - 中止 - - - Apply - 適用 - - - Close - 閉じる - - - Reset - リセット - - - Retry - 再試行 - - - Restore Defaults - デフォルトに戻す - - - Cancel - キャンセル - - - Ignore - 無視 - - - N&o to All - 全ていいえ(&O) - - - Save All - すべて保存 - - - Discard - 変更を破棄 - - - Yes to &All - 全てはい(&A) - - - - QPrintDialog - - OK - OK - - - Even Pages - 偶数ページ - - - Print - 印刷 - - - &Options << - オプション(&O) << - - - &Options >> - オプション(&O) >> - - - Left to Right, Top to Bottom - 左から右、上から下 - - - Right to Left, Bottom to Top - 右から左、下から上 - - - Write PDF file - PDF ファイルへ書き込み - - - &Print - 印刷(&P) - - - 1 (1x1) - 1 (1x1) - - - Options 'Pages Per Sheet' and 'Page Set' cannot be used together. -Please turn one of those options off. - 「シートごとのページ数」と「ページセット」オプションは同時には使用できません。 -どちらかのオプションをオフにしてください。 - - - %1 already exists. -Do you want to overwrite it? - %1 は既に存在します。 -上書きしますか? - - - 2 (2x1) - 2 (2x1) - - - Left to Right, Bottom to Top - 左から右、下から上 - - - 4 (2x2) - 4 (2x2) - - - Odd Pages - 奇数ページ - - - Local file - ローカルファイル - - - 6 (2x3) - 6 (2x3) - - - 16 (4x4) - 16 (4x4) - - - Print to File (PDF) - PDF ファイルに出力 - - - Print To File ... - ファイルへ出力... - - - 9 (3x3) - 9 (3x3) - - - Automatic - 自動 - - - Right to Left, Top to Bottom - 右から左、上から下 - - - Bottom to Top, Left to Right - 下から上、左から右 - - - The 'From' value cannot be greater than the 'To' value. - 印刷開始ページ番号は、印刷終了ページ番号より小さくなければなりません。 - - - All Pages - 全てのページ - - - %1 is a directory. -Please choose a different file name. - %1 はディレクトリです。 -別のファイル名を指定してください。 - - - File %1 is not writable. -Please choose a different file name. - ファイル %1 は書き込み可能ではありません。 -別のファイル名を指定してください。 - - - Bottom to Top, Right to Left - 下から上、右から左 - - - Top to Bottom, Left to Right - 上から下、左から右 - - - Top to Bottom, Right to Left - 上から下、右から左 - - - - QAndroidPlatformTheme - - No - いいえ - - - Yes - はい - - - No to All - 全ていいえ - - - Yes to All - 全てはい - - - - QPrintSettingsOutput - - to - 末尾のページ - - - Form - 書式 - - - None - なし - - - Color - カラー - - - Print all - すべて印刷 - - - Current Page - 現在のページ - - - Selection - 選択した部分を印刷 - - - Long side - 長辺綴じ - - - Copies - 印刷部数 - - - Print range - 印刷範囲 - - - Color Mode - カラーモード - - - Options - オプション - - - Output Settings - 出力設定 - - - Reverse - 逆順 - - - Grayscale - グレースケール - - - Short side - 短辺綴じ - - - Collate - 丁合い - - - Copies: - 印刷部数: - - - Pages from - 先頭のページ - - - Page Set: - ページセット: - - - Duplex Printing - 両面印刷 - - - - QPrintPreviewDialog - - %1% - %1% - - - Print Preview - 印刷のプレビュー - - - Print - 印刷 - - - Fit page - ページ全体を表示 - - - Zoom in - 拡大 - - - Landscape - - - - Zoom out - 縮小 - - - Fit width - 幅をあわせる - - - Portrait - - - - Page Setup - ページ設定 - - - Page setup - ページ設定 - - - Show overview of all pages - すべてのページの概要を表示する - - - First page - 最初のページ - - - Last page - 最後のページ - - - Show single page - 単一ページで表示する - - - Export to PDF - PDF に出力 - - - Previous page - 前のページ - - - Next page - 次のページ - - - Show facing pages - 見開きページで表示する - - - - QErrorMessage - - &OK - &OK - - - Fatal Error: - 致命的なエラー: - - - &Show this message again - 次回もこのメッセージを表示する(&S) - - - Debug Message: - デバッグメッセージ: - - - Warning: - 警告: - - - - QGnomeTheme - - &OK - &OK - - - &Save - 保存(&S) - - - &Close - 閉じる(&C) - - - Close without Saving - 保存せずに閉じる - - - &Cancel - キャンセル(&C) - - - - QPrintWidget - - ... - ... - - - Form - 書式 - - - Type: - タイプ: - - - &Name: - 名前(&N): - - - Output &file: - 出力ファイル名(&F): - - - P&roperties - プロパティ(&R) - - - Preview - プレビュー - - - Printer - プリンタ - - - Location: - 設置場所: - - - - QFontDatabase - - Any - すべて - - - Lao - ラーオ - - - Bold - 太字 - - - Demi - - - - N'Ko - ンコ - - - Thai - タイ - - - Thin - 超極細 - - - Black - 超極太 - - - Extra - - - - Greek - ギリシャ - - - Khmer - クメール - - - Latin - ラテン - - - Light - 細字 - - - Ogham - オガム - - - Oriya - オリヤー - - - Runic - ルーン - - - Tamil - タミル - - - Cyrillic - キリル - - - Kannada - カンナダ - - - Malayalam - マラヤーラム - - - Extra Light - 極細 - - - Simplified Chinese - 簡体中国 - - - Demi Bold - 中太 - - - Arabic - アラビア - - - Hebrew - ヘブライ - - - Myanmar - ビルマ - - - Italic - 斜体 - - - Korean - ハングル - - - Medium - 中字 - - - Normal - 標準 - - - Oblique - 斜体 - - - Telugu - テルグ - - - Thaana - ターナ - - - Symbol - 記号 - - - Syriac - シリア - - - Extra Bold - 極太 - - - Devanagari - デーヴァナーガリー - - - Japanese - 日本 - - - Bengali - ベンガル - - - Armenian - アルメニア - - - Sinhala - シンハラ - - - Tibetan - チベット - - - Vietnamese - ベトナム - - - Gujarati - グジャラート - - - Traditional Chinese - 繁体中国 - - - Georgian - グルジア - - - Gurmukhi - グルムキー - - - - QCocoaMenuItem - - Cut - 切り取り - - - Copy - コピー - - - Exit - 終了 - - - Quit - 終了 - - - About - について - - - Paste - 貼り付け - - - Setup - セットアップ - - - Config - コンフィグ - - - Options - オプション - - - About Qt - Qt について - - - Setting - 設定 - - - Select All - すべてを選択 - - - Preference - 環境設定 - - - - QCupsJobWidget - - Job - ジョブ - - - End: - 終了バナー: - - - None - なし - - - Banner Pages - バナーページ - - - Night (18:00 to 05:59) - 夜間 (18:00 から 05:59) - - - Specific Time - 指定時刻 - - - Billing information: - 課金情報: - - - Scheduled printing: - 印刷スケジュール: - - - Secret - 機密 - - - Top Secret - 最高機密 - - - Start: - 開始バナー: - - - Day (06:00 to 17:59) - 昼間 (06:00 から 17:59) - - - Second Shift (16:00 to 23:59) - 第2直 (16:00 から 23:59) - - - Job Control - ジョブコントロール - - - Weekend (Saturday to Sunday) - 週末 (土曜日から日曜日) - - - Standard - 標準 - - - Classified - 機密扱い - - - Third Shift (00:00 to 07:59) - 第3直 (0:00 から 07:59) - - - Hold Indefinitely - 待機 - - - Print Immediately - すぐに印刷 - - - Confidential - 内密 - - - Job priority: - ジョブ優先度: - - - Unclassified - 機密扱いなし - - - - QScrollBar - - Top - 上端にスクロール - - - Scroll down - 下へスクロール - - - Scroll here - ここにスクロール - - - Scroll left - 左へスクロール - - - Bottom - 下端にスクロール - - - Page up - 1ページ戻る - - - Page right - 1ページ右へスクロール - - - Scroll up - 上へスクロール - - - Scroll right - 右へスクロール - - - Left edge - 左端にスクロール - - - Page down - 1ページ進む - - - Page left - 1ページ左へスクロール - - - Right edge - 右端にスクロール - - - - QSpiAccessibleBridge - - row - - - - cell - セル - - - dial - ダイアル - - - form - フォーム - - - grip - グリップ - - - link - リンク - - - list - リスト - - - note - 注釈 - - - text - テキスト - - - tree - ツリー - - - animation - アニメーション - - - chart - チャート - - - clock - クロック - - - frame - - - - label - ラベル - - - panel - パネル - - - space - スペース - - - sound - サウンド - - - table - テーブル - - - radio button - ラジオボタン - - - page tab list - ページタブのリスト - - - web document - Webドキュメント - - - combo box - コンボボックス - - - color chooser - 色の選択 - - - menu item - メニューアイテム - - - document - ドキュメント - - - scroll bar - スクロールバー - - - tool bar - ツールバー - - - tool tip - ツールチップ - - - text caret - キャレット - - - button menu - ボタンメニュー - - - separator - 仕切り - - - canvas - キャンバス - - - column - - - - cursor - カーソル - - - dialog - ダイアログ - - - filler - フィルタ - - - footer - フッタ - - - push button - プッシュボタン - - - row header - 行ヘッダ - - - spin box - スピンボックス - - - splitter - 仕切り - - - slider - スライダー - - - button with drop down grid - ドロップダウングリッド付きボタン - - - page tab - ページタブ - - - invalid role - 無効なロール - - - paragraph - 段落 - - - equation - 数式 - - - complementary content - 補足的なコンテンツ - - - section - - - - assistant - アシスタント - - - list item - リストアイテム - - - indicator - インジケーター - - - title bar - タイトルバー - - - tree item - ツリーアイテム - - - check box - チェックボックス - - - status bar - ステータスバー - - - progress bar - プログレスバー - - - alert message - 警告メッセージ - - - property page - プロパティページ - - - popup menu - ポップアップメニュー - - - layered pane - 階層ペイン - - - unknown - 不明 - - - menu bar - メニューバー - - - column header - 列ヘッダ - - - button with drop down - ドロップダウン付きボタン - - - hotkey field - ホットキー領域 - - - graphic - グラフィック - - - help balloon - ヘルプバルーン - - - heading - ヘッダ - - - application - アプリケーション - - - - QFile - - Cannot remove source file - 元のファイルを削除できません - - - Destination file is the same file. - コピー先のファイルが同じファイルです。 - - - Error while renaming. - 名前の変更中にエラーが発生しました。 - - - Cannot create %1 for output - コピー先として %1 を作成できません - - - Failure to write block - 書き込みに失敗しました - - - Cannot open %1 for input - コピー元ファイル %1 を読み込み用に開けません - - - Destination file exists - コピー先のファイルは既に存在しています - - - Cannot open for output - コピー先のファイルを開けません - - - Will not rename sequential file using block copy - ブロックコピーを用いてシーケンシャルファイルの名前を変更することはできません - - - Source file does not exist. - コピー元のファイルが存在しません。 - - - Unable to restore from %1: %2 - %1 から復元できませんでした: %2 - - - - QFileDialog - - Back - 戻る - - - File - ファイル - - - Open - 開く - - - &Open - 開く(&O) - - - &Save - 保存(&S) - - - Alias - エイリアス - - - Drive - ドライブ - - - Files - ファイル - - - Show - 表示 - - - '%1' is write protected. -Do you want to delete it anyway? - '%1' は書き込みが禁止されています。 -本当に削除しますか? - - - Are you sure you want to delete '%1'? - '%1' を本当に削除しますか? - - - List of places and bookmarks - アドレスやブックマークのリスト - - - File &name: - ファイル名(&N): - - - Alt+Left - Alt+Left - - - Alt+Up - Alt+Up - - - File Folder - ファイルフォルダ - - - Delete - 削除 - - - New Folder - 新しいフォルダ - - - Folder - フォルダ - - - Parent Directory - 親ディレクトリ - - - &New Folder - 新しいフォルダ(&N) - - - Remove - 削除 - - - My Computer - マイコンピュータ - - - Look in: - アドレス: - - - Alt+Right - Alt+Right - - - Create a New Folder - 新しいフォルダの作成 - - - %1 File - %1 ファイル - - - Files of type: - ファイルの種類: - - - Find Directory - ディレクトリの検索 - - - Show &hidden files - 隠しファイルの表示(&H) - - - Save As - 名前を付けて保存 - - - %1 -Directory not found. -Please verify the correct directory name was given. - %1 -ディレクトリが見つかりません。 -正しいディレクトリ名が入力されているかを確認してください。 - - - Sidebar - サイドバー - - - List View - 一覧表示 - - - &Choose - 選択(&C) - - - &Delete - 削除(&D) - - - All files (*) - すべてのファイル(*) - - - All Files (*) - すべてのファイル(*) - - - Directories - ディレクトリ - - - &Rename - 名前の変更(&R) - - - Could not delete directory. - ディレクトリを削除できませんでした。 - - - Directory: - ディレクトリ: - - - Unknown - 不明 - - - %1 already exists. -Do you want to replace it? - %1 は既に存在します。 -置き換えますか? - - - Forward - 進む - - - Go forward - 進む - - - Go to the parent directory - 親ディレクトリへ移動 - - - Recent Places - 履歴 - - - Go back - 戻る - - - Change to detail view mode - 詳細表示モードへ変更 - - - Create New Folder - 新しいフォルダの作成 - - - Shortcut - ショートカット - - - Detail View - 詳細表示 - - - %1 -File not found. -Please verify the correct file name was given. - %1 -ファイルが見つかりません。 -正しいファイル名が入力されているかを確認してください。 - - - Change to list view mode - リスト表示モードへ変更 - - - - QLineEdit - - Cu&t - 切り取り(&T) - - - &Copy - コピー(&C) - - - &Redo - やり直す(&R) - - - &Undo - 元に戻す(&U) - - - &Paste - 貼り付け(&P) - - - Delete - 削除 - - - Select All - すべてを選択 - - - - QWidgetTextControl - - Cu&t - 切り取り(&T) - - - &Copy - コピー(&C) - - - &Redo - やり直す(&R) - - - &Undo - 元に戻す(&U) - - - &Paste - 貼り付け(&P) - - - Delete - 削除 - - - Select All - すべてを選択 - - - Copy &Link Location - リンクの場所をコピー(&L) - - - - QWizard - - Done - 終了 - - - Help - ヘルプ - - - &Help - ヘルプ(&H) - - - &Next - 次へ(&N) - - - Cancel - キャンセル - - - Commit - 適用 - - - Continue - 続き - - - &Finish - 完了(&F) - - - &Next > - 次へ(&N) > - - - Go Back - 戻る - - - < &Back - < 戻る(&B) - - - - QPrintPropertiesWidget - - Form - 書式 - - - Page - ページ - - - - QMdiSubWindow - - Help - ヘルプ - - - Menu - メニュー - - - &Move - 移動(&M) - - - &Size - サイズ(&S) - - - Close - 閉じる - - - Minimize - 最小化 - - - Shade - 折りたたむ - - - Stay on &Top - 常に手前に表示(&T) - - - &Close - 閉じる(&C) - - - - [%1] - - [%1] - - - %1 - [%2] - %1 - [%2] - - - &Restore - 元に戻す(&R) - - - Restore - 元に戻す - - - Maximize - 最大化 - - - Unshade - 展開する - - - Mi&nimize - 最小化(&N) - - - Ma&ximize - 最大化(&X) - - - Restore Down - 元に戻す - - - - QStandardPaths - - Home - ホーム - - - Cache - キャッシュ - - - Fonts - フォント - - - Music - 音楽 - - - Shared Cache - 共有キャッシュ - - - Shared Configuration - 共有設定 - - - Movies - ムービー - - - Application Configuration - アプリケーション設定 - - - Download - ダウンロード - - - Configuration - 設定 - - - Application Data - アプリケーションデータ - - - Runtime - ランタイム - - - Documents - ドキュメント - - - Desktop - デスクトップ - - - Temporary Directory - 一時ディレクトリ - - - Shared Data - 共有データ - - - Applications - アプリケーション - - - Pictures - 画像 - - - - QDirModel - - Kind - 種類 - - - Name - 名前 - - - Size - サイズ - - - Type - タイプ - - - Date Modified - 更新日 - - - - QFileSystemModel - - Kind - 種類 - - - Name - 名前 - - - Size - サイズ - - - Type - タイプ - - - %1 GB - %1 GB - - - %1 KB - %1 KB - - - %1 MB - %1 MB - - - %1 TB - %1 TB - - - <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. - <b>ファイル名 "%1" は使用できません。</b><p>名前を短くしたり、アクセント記号などを削除して再度試してください。 - - - %1 bytes - %1 バイト - - - My Computer - マイコンピュータ - - - Computer - コンピュータ - - - Invalid filename - 無効なファイル名 - - - %1 byte(s) - %1 バイト - - - Date Modified - 更新日 - - - - QUndoGroup - - Redo - やり直す - - - Undo - 元に戻す - - - Redo %1 - %1 をやり直す - - - Undo %1 - %1 を元に戻す - - - - QUndoStack - - Redo - やり直す - - - Undo - 元に戻す - - - Redo %1 - %1 をやり直す - - - Undo %1 - %1 を元に戻す - - - - QComboBox - - True - - - - False - - - - Open the combo box selection popup - コンボボックスの選択用ポップアップを開く - - - - QQmlPropertyValidator - - Attached properties cannot be used here - アタッチされたプロパティはここでは利用できません - - - Invalid property assignment: rect expected - 無効なプロパティの値: 矩形(rect)を指定してください - - - Invalid attached object assignment - 無効なアタッチされたオブジェクトへの割り当て - - - Invalid grouped property access - 無効なグループ化されたプロパティへのアクセスです - - - Invalid property assignment: size expected - 無効なプロパティの値: サイズ(size)を指定してください - - - Invalid property assignment: string expected - 無効なプロパティの値: 文字列(string)を指定してください - - - Invalid property assignment: 4D vector expected - 無効なプロパティの値: 4D ベクターを指定してください - - - Invalid property assignment: unknown enumeration - 無効なプロパティの値: 未知の列挙型(enum)です - - - Invalid property assignment: unsupported type "%1" - 無効なプロパティの値: 未知の型 "%1" です - - - Invalid property assignment: datetime expected - 無効なプロパティの値: 日付と時間(datetime)を指定してください - - - Invalid property assignment: 3D vector expected - 無効なプロパティの値: 3D ベクターを指定してください - - - Cannot assign multiple values to a script property - 複数の値をスクリプトプロパティに割り当てできません - - - Invalid property assignment: date expected - 無効なプロパティの値: 日付(date)を指定してください - - - Invalid property assignment: time expected - 無効なプロパティの値: 時間(time)を指定してください - - - Property assignment expected - プロパティに値が必要です - - - Cannot assign object to list property "%1" - オブジェクトをリストプロパティ %1 に割り当てることはできません - - - "%1" cannot operate on "%2" - "%1" は "%2" を操作できません - - - Invalid property assignment: number or array of numbers expected - 無効なプロパティの値: 数値あるいはその配列を指定してください - - - Invalid property assignment: bool or array of bools expected - 無効なプロパティの値: 真偽値(bool)あるいはその配列を指定してください - - - Invalid property assignment: color expected - 無効なプロパティの値: 色(color)を指定してください - - - Cannot assign multiple values to a singular property - 複数の値を単数プロパティに割り当てできません - - - Invalid property assignment: boolean expected - 無効なプロパティの値: 真偽値(bool)を指定してください - - - Cannot assign to non-existent default property - 存在しないデフォルトプロパティへは割り当てできません - - - Invalid property assignment: point expected - 無効なプロパティの値: 位置(point)を指定してください - - - Invalid property assignment: unsigned int expected - 無効なプロパティの値: 符号なしの整数(unsigned int)を指定してください - - - Invalid property assignment: byte array expected - 無効なプロパティの値: バイトアレイを指定してください - - - Invalid property assignment: "%1" is a read-only property - 無効なプロパティの値: "%1" は読込専用のプロパティです - - - Invalid property assignment: int or array of ints expected - 無効なプロパティの値: 整数(int)あるいはその配列を指定してください - - - Invalid property assignment: url or array of urls expected - 無効なプロパティの値: URL あるいはその配列を指定してください - - - Cannot assign primitives to lists - プリミティブをリストに割り当てできません - - - Cannot assign object to property - オブジェクトをプロパティに割り当てできません - - - Property has already been assigned a value - プロパティには既に値が割り当てられています - - - Invalid property assignment: number expected - 無効なプロパティの値: 数値(real)を指定してください - - - Cannot assign a value directly to a grouped property - グループ化されたプロパティに直接値を割り当てできません - - - Invalid property assignment: string or array of strings expected - 無効なプロパティの値: 文字列(string)あるいはその配列を指定してください - - - Unexpected object assignment - オブジェクトを割り当てできません - - - "%1.%2" is not available due to component versioning. - コンポーネントのバージョンの問題により "%1.%2" は利用できません。 - - - Cannot assign to non-existent property "%1" - 存在しないプロパティ "%1" へは割り当てできません - - - Invalid property assignment: string or string list expected - 無効なプロパティの値: 文字列(string)あるいは文字列の配列を指定してください - - - Invalid property assignment: regular expression expected; use /pattern/ syntax - 無効なプロパティの値: /パターン/ 形式で正規表現を指定してください - - - "%1.%2" is not available in %3 %4.%5. - %3 %4.%5 で "%1.%2" は利用できません。 - - - Invalid use of namespace - 無効な名前空間の使用法です - - - Invalid property assignment: int expected - 無効なプロパティの値: 整数(int)を指定してください - - - Invalid property assignment: url expected - 無効なプロパティの値: URL を指定してください - - - Invalid property assignment: script expected - 無効なプロパティの値: スクリプトを指定してください - - - - QSslSocket - - Error creating SSL session: %1 - SSL セッションを作成できません: %1 - - - Error creating SSL session, %1 - SSL セッションを作成できません。 %1 - - - Error when setting the elliptic curves (%1) - 楕円曲線(%1)の設定時にエラーが発生しました - - - The certificate's notAfter field contains an invalid time - 証明書の notAfter フィールドに不正な時刻が含まれています - - - No error - エラーはありません - - - Cannot provide a certificate with no key, %1 - 秘密鍵のない証明書は利用できません: %1 - - - Unable to write data: %1 - データを書き込みできません: %1 - - - The basicConstraints path length parameter has been exceeded - 基本制約(basicConstraints)で制限されたパスの長さを超えています - - - The certificate has expired - 証明書の有効期限が切れています - - - The TLS/SSL connection has been closed - TLS/SSL 接続が閉じられました - - - Error during SSL handshake: %1 - SSL ハンドシェーク時にエラーが発生しました: %1 - - - Error loading local certificate, %1 - ローカルの証明書をロードできません。 %1 - - - The certificate is self-signed, and untrusted - この証明書は自己証明書であり、信頼されていません - - - Unable to init SSL Context: %1 - SSL コンテキストを初期化できません: %1 - - - The peer did not present any certificate - 通信相手は証明書を提示しませんでした - - - unsupported protocol - サポートされていないプロトコル - - - The root CA certificate is marked to reject the specified purpose - ルートCA証明書を指定された目的に使用することは拒否されています - - - Invalid or empty cipher list (%1) - 暗号方式リストが不正または空です (%1) - - - No certificates could be verified - どの証明書も検証できませんでした - - - 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 - 更新用に準備された発行者証明書は、その発行者名とシリアル番号が現在の証明書の機関鍵識別子と異なるため拒否されました - - - The root CA certificate is not trusted for this purpose - ルートCA証明書はこの目的には信頼されていません - - - The host name did not match any of the valid hosts for this certificate - ホスト名がこの証明書のどの有効なホストとも一致しませんでした - - - The root certificate of the certificate chain is self-signed, and untrusted - 証明書チェインのルート証明書が自己証明書であり、信頼されていません - - - The peer certificate is blacklisted - 通信相手の証明書がブラックリストに載っています - - - The certificate signature could not be decrypted - 証明書の署名が復号できません - - - The supplied certificate is unsuitable for this purpose - 与えられた証明書はこの目的には利用できません - - - Private key does not certify public key, %1 - 秘密鍵が公開鍵を認証していません。 %1 - - - Error creating SSL context (%1) - SSL context の作成に失敗しました (%1) - - - OpenSSL version too old, need at least v1.0.2 - OpenSSL のバージョンが古すぎます。v1.0.2 以上が必要です - - - The issuer certificate could not be found - 発行者証明書が見つけられませんでした - - - Unknown error - 未知のエラー - - - The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate - 更新用に準備された発行者証明書は、その所有者名が現在の証明書の発行者名と異なるため拒否されました - - - Error while reading: %1 - 読み込み時にエラーが発生しました: %1 - - - The certificate's notBefore field contains an invalid time - 証明書の notBefore フィールドに不正な時刻が含まれています - - - Error loading private key, %1 - 秘密鍵をロードできません。 %1 - - - The certificate is not yet valid - 証明書が有効ではありません - - - The public key in the certificate could not be read - 証明書の公開鍵が読めません - - - One of the CA certificates is invalid - CA 証明書に不正な証明書があります - - - The signature of the certificate is invalid - 証明書の署名が不正です - - - The issuer certificate of a locally looked up certificate could not be found - ローカルで発見した証明書の発行者証明書が見つけられませんでした - - - Unable to decrypt data: %1 - データを解読できません: %1 - - - - QLocalSocket - - %1: Connection error - %1: 接続のエラーが発生しました - - - %1: Access denied - %1: アクセスが拒否されました - - - %1: Operation not permitted when socket is in this state - %1: ソケットがこの状態の場合、この操作は許可されていません - - - %1: Connection refused - %1: 接続が拒否されました - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - %1: Socket access error - %1: ソケットアクセスのエラーです - - - %1: Socket resource error - %1: ソケットリソースのエラーです - - - Trying to connect while connection is in progress - 接続の実行中に接続を試みました - - - %1: The socket operation is not supported - %1: そのソケット操作はサポートされていません - - - %1: Invalid name - %1: 無効な名前です - - - %1: Unknown error - %1: 未知のエラーです - - - %1: Socket operation timed out - %1: ソケット操作がタイムアウトしました - - - %1: Datagram too large - %1: データグラムが大きすぎます - - - %1: Remote closed - %1: リモートにより接続が閉じられました - - - - QRegularExpression - - digit expected after (?+ - (?+ の後に数字が必要です - - - unmatched parentheses - 括弧の対応が取れていません - - - inconsistent NEWLINE options - NEWLINE オプションが矛盾しています - - - (?R or (?[+-]digits must be followed by ) - (?R や (?[+-]数字 の後には ) が必要です - - - syntax error in subpattern name (missing terminator) - サブパターン名に構文エラーがあります(終端文字がありません) - - - missing terminating ] for character class - 文字クラスを閉じる ] がありません - - - setting UTF is disabled by the application - UTF の設定はアプリケーションにより禁止されています - - - \k is not followed by a braced, angle-bracketed, or quoted name - \g の後に波括弧 {} や山括弧 <> や引用符 ' でくくられた名前がありません - - - internal error: unexpected repeat - 内部エラー: 予期しない繰り返し - - - this version of PCRE is not compiled with PCRE_UCP support - このバージョンの PCRE は PCRE_UCP サポート込みでコンパイルされていません - - - no error - エラーはありません - - - POSIX named classes are supported only within a class - POSIX の名前付きクラスは文字クラスの中でだけサポートされています - - - invalid UTF-16 string - 無効な UTF-16 文字列です - - - invalid UTF-32 string - 無効な UTF-32 文字列です - - - parentheses are too deeply nested (stack check) - 括弧のネストが深すぎます (スタックチェック) - - - \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number - \g の後に波括弧 {} や山括弧 <> や引用符 ' でくくられた名前や数値、あるいはただの数字がありません - - - invalid escape sequence in character class - 文字クラス内に無効なエスケープシーケンスがあります - - - missing opening brace after \o - \o の後に開き括弧がありません - - - range out of order in character class - 文字クラスの範囲の順番が間違っています - - - (*MARK) must have an argument - (*MARK) には引数が一つ必要です - - - this version of PCRE is not compiled with PCRE_UTF8 support - このバージョンの PCRE は PCRE_UTF8 サポート込みでコンパイルされていません - - - too many forward references - 前方参照が多すぎます - - - a numbered reference must not be zero - 数値での参照に 0 は使用できません - - - reference to non-existent subpattern - 存在しないサブパターンを参照しています - - - PCRE does not support \L, \l, \N{name}, \U, or \u - PCRE は \L, \l, \N{name}, \U, \u をサポートしていません - - - number after (?C is > 255 - (?C の後の数値が 255 よりも大きいです - - - two named subpatterns have the same name - 二つの名前付きサブパターンの名前が同じです - - - internal error: overran compiling workspace - 内部エラー: コンパイル作業領域をオーバーランしました - - - ] is an invalid data character in JavaScript compatibility mode - JavaScript 互換モードでは ] は無効なデータ文字です - - - unrecognized character follows \ - 認識できない文字が \\ の後にあります - - - octal value is greater than \377 (not in UTF-8 mode) - 8進数の値が \377 よりも大きいです(非 UTF-8 モード時) - - - unknown option bit(s) set - 未知のオプションビットセットです - - - \N is not supported in a class - 文字クラスで \N はサポートされていません - - - non-hex character in \x{} (closing brace missing?) - \x{} シーケンス内に16進数ではない文字があります(括弧を閉じ忘れていませんか?) - - - support for \P, \p, and \X has not been compiled - \P, \p, \X のサポートはコンパイル時に外されています - - - character value in \x{...} sequence is too large - \x{...} シーケンス内の文字の値が大きすぎます - - - invalid condition (?(0) - 無効な条件です (?(0) - - - regular expression is too large - 正規表現が大きすぎます - - - failed to get memory - メモリの確保に失敗しました - - - unknown property name after \P or \p - \P あるいは \p の後に未知のプロパティ名があります - - - internal error: code overflow - 内部エラー: コードオーバーフロー - - - \C not allowed in lookbehind assertion - 戻り読み(lookbehind)アサーションで \c は許可されていません - - - group name must start with a non-digit - グループ名を数字で始めることはできません - - - recursive call could loop indefinitely - 再起呼び出しが無限ループとなる可能性があります - - - number is too big - 数値が大きすぎます - - - \c at end of pattern - パターンの終端に \c があります - - - nothing to repeat - 繰り返すものがありません - - - invalid UTF-8 string - 無効な UTF-8 文字列です - - - subpattern name expected - サブパターンに名前が必要です - - - character value in \u.... sequence is too large - \u... シーケンスの文字の値が大きすぎます - - - invalid range in character class - 文字クラス内に無効な範囲があります - - - internal error: previously-checked referenced subpattern not found - 内部エラー: 直前にチェックしたサブパターンへのリファレンスが見つかりません - - - name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN) - (*MARK), (*PRUNE), (*SKIP), (*THEN) の名前が長すぎます - - - an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT) - (*ACCEPT), (*FAIL), (*COMMIT) の引数は一つではありません - - - (*VERB) not recognized - (*VERB) を認識できません - - - assertion expected after (?( - (?( の後にアサーションがありません - - - missing ) - ) がありません - - - malformed number or name after (?( - 不正な数値あるいは名前が (?( の後にあります - - - number too big in {} quantifier - 量指定子 {} の中にある数値が大きすぎます - - - unrecognized character after (?< - 認識できない文字が (?< の後にあります - - - unrecognized character after (?P - 認識できない文字が (?P の後にあります - - - parentheses are too deeply nested - 括弧のネストが深すぎます - - - erroffset passed as NULL - erroffset に NULL が渡されました - - - subpattern name is too long (maximum 32 characters) - サブパターン名が長すぎます(最長32文字です) - - - non-octal character in \o{} (closing brace missing?) - \o{} シーケンス内に8進数ではない文字があります(括弧を閉じ忘れていませんか?) - - - closing ) for (?C expected - (?C を閉じる ) がありません - - - disallowed Unicode code point (>= 0xd800 && <= 0xdfff) - 許可されていないコードの Unicode です(>= 0xd800 && <= 0xdfff) - - - malformed \P or \p sequence - 不正な \P あるいは \p のシーケンスです - - - \ at end of pattern - パターンの終端に \ があります - - - POSIX collating elements are not supported - POSIX の照合順序の要素はサポートされていません - - - repeating a DEFINE group is not allowed - DEFINE グループの繰り返しは許可されていません - - - unrecognized character after (? or (?- - 認識できない文字が (? か (?- の後にあります - - - numbers out of order in {} quantifier - 量指定子 {} の中にある数値の順番が間違っています - - - DEFINE group contains more than one branch - DEFINE グループが2つ以上の枝があります - - - \c must be followed by an ASCII character - \c の後には ASCII 文字が必要です - - - unknown POSIX class name - 未知の POSIX クラスの名前です - - - conditional group contains more than two branches - 条件付きグループに3つ以上の枝があります - - - lookbehind assertion is not fixed length - 戻り読み(lookbehind)アサーションが固定長ではありません - - - missing ) after comment - コメントの後に ) がありません - - - too many named subpatterns (maximum 10000) - 名前付きサブパターンが多すぎます(10000個以下にしてください) - - - digits missing in \x{} or \o{} - \x{} または \o{} 内に数字がありません - - - internal error: unknown opcode in find_fixedlength() - 内部エラー: find_fixedlength() で未知のオペコード - - - different names for subpatterns of the same number are not allowed - 同じ番号のサブパターンの名前が違うことは許可されていません - - - - QOCIResult - - Unable to get statement type - ステートメントの型を取得できません - - - Unable to alloc statement - ステートメントの領域を確保できません - - - Unable to goto next - 次のレコードへ進めません - - - Unable to execute statement - ステートメントを実行できません - - - Unable to bind column for batch execute - バッチ処理用にフィールドをバインドできません - - - Unable to prepare statement - プリペアドステートメントを作成できません - - - Unable to execute batch statement - バッチステートメントを実行できません - - - Unable to bind value - 値をバインドできません - - - - QQuickAnchors - - Cannot anchor item to self. - 自分自身へはアンカーできません。 - - - Possible anchor loop detected on horizontal anchor. - 横方向のアンカーによってアンカーのループが発生しています。 - - - Cannot anchor to a null item. - 空の要素にはアンカーできません。 - - - Cannot specify left, right, and horizontalCenter anchors at the same time. - left, right および horizontalCenter アンカーを同時にすべて使用することはできません。 - - - Possible anchor loop detected on centerIn. - centerIn によってアンカーのループが発生しています。 - - - Baseline anchor cannot be used in conjunction with top, bottom, or verticalCenter anchors. - baseline アンカーを top, bottom あるいは verticalCenter アンカーと混ぜて使用することはできません。 - - - Cannot specify top, bottom, and verticalCenter anchors at the same time. - top, bottom および verticalCenter アンカーを同時にすべて使用することはできません。 - - - Possible anchor loop detected on vertical anchor. - 縦方向のアンカーによってアンカーのループが発生しています。 - - - Cannot anchor a horizontal edge to a vertical edge. - 横方向のエッジから縦方向のエッジへはアンカーできません。 - - - Cannot anchor a vertical edge to a horizontal edge. - 縦方向のエッジから横方向のエッジへはアンカーできません。 - - - Cannot anchor to an item that isn't a parent or sibling. - 親でも兄弟でもない要素にはアンカーできません。 - - - Possible anchor loop detected on fill. - fill によってアンカーのループが発生しています。 - - - - QQuickLayoutMirroringAttached - - LayoutMirroring is only available via attached properties - LayoutMirroring はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - LayoutDirection attached property only works with Items - アタッチされたプロパティ LayoutDirection は Item およびその派生クラスでのみ利用できます - - - - QQmlDelegateModelGroup - - resolve: to index invalid - resolve: to が無効です - - - resolve: to index out of range - resolve: to の値が有効範囲外です - - - create: index out of range - create: index の値が有効範囲外です - - - move: invalid to index - move: to が無効です - - - move: invalid from index - move: from が無効です - - - setGroups: index out of range - setGroups: index の値が有効範囲外です - - - move: to index out of range - move: to の値が有効範囲外です - - - remove: index out of range - remove: index の値が有効範囲外です - - - move: from index out of range - move: from の値が有効範囲外です - - - addGroups: invalid count - addGroups: count が無効です - - - Group names must start with a lower case letter - グループの名前は小文字で始まらなくてはいけません - - - removeGroups: invalid count - removeGroups: count が無効です - - - resolve: from is not an unresolved item - resolve: from は未解決アイテムではありません - - - resolve: from index out of range - resolve: from の値が有効範囲外です - - - setGroups: invalid count - setGroups: count が無効です - - - get: index out of range - get: index の値が有効範囲外です - - - move: invalid count - move: count が無効です - - - remove: invalid count - remove: count が無効です - - - remove: invalid index - remove: index が無効です - - - resolve: from index invalid - resolve: from が無効です - - - resolve: to is not a model item - resolve: to はモデルのアイテムではありません - - - insert: index out of range - insert: index の値が有効範囲外です - - - removeGroups: index out of range - removeGroups: index の値が有効範囲外です - - - addGroups: index out of range - addGroups: index の値が有効範囲外です - - - - QQmlTypeLoader - - %1 %2 - %1 %2 - - - Unreported error adding script import to import database - import するデータベースに import スクリプトの追加時に未報告のエラーが発生しました - - - pragma Singleton used with a non composite singleton type %1 - Singleton pragma がコンポジットではないシングルトンな型 %1 で使われています - - - Cannot update qmldir content for '%1' - qmldir "%1" のコンテンツの更新ができませんでした - - - No matching type found, pragma Singleton files cannot be used by QQmlComponent. - 合致する型が見つからないため、Singleton pragma ファイルを QQmlComponent から使用できません。 - - - module "%1" is not installed - "%1" モジュールがインストールされていません - - - Type %1 unavailable - 型 %1 が利用できません - - - qmldir defines type as singleton, but no pragma Singleton found in type %1. - qmldir はシングルトンな型として定義されていますが、Singleton pragma が型 %1 に見つかりません。 - - - Namespace %1 cannot be used as a type - 名前空間 %1 を型として使用することはできません - - - Script %1 unavailable - スクリプト %1 が利用できません - - - - QFontDialog - - &Font - フォント(&F) - - - &Size - サイズ(&S) - - - Sample - サンプル - - - Font st&yle - フォントスタイル(&Y) - - - Wr&iting System - 言語(&I) - - - Select Font - フォントの選択 - - - &Underline - 下線(&U) - - - Effects - 文字飾り - - - Stri&keout - 取り消し線(&K) - - - - QColorDialog - - &Red: - 赤(&R): - - - &Sat: - 彩度(&S): - - - &Val: - 明度(&V): - - - Hu&e: - 色相(&E): - - - &HTML: - &HTML: - - - Select Color - 色を選択 - - - &Add to Custom Colors - カスタムカラーに追加(&A) - - - Bl&ue: - 青(&U): - - - &Pick Screen Color - スクリーンの色を取得(&P) - - - Cursor at %1, %2 -Press ESC to cancel - カーソル位置 %1, %2 -エスケープキーでキャンセル - - - &Green: - 緑(&G): - - - &Basic colors - 基本カラー(&B) - - - &Custom colors - カスタムカラー(&C) - - - A&lpha channel: - アルファチャネル(&L): - - - - QSharedMemory - - %1: system-imposed size restrictions - %1: 指定されたサイズはシステムにより拒否されました - - - %1: key is empty - %1: キーが空です - - - %1: key error - %1: キーにエラーが発生しました - - - %1: bad name - %1: 無効な名前です - - - %1: create size is less then 0 - %1: 0 より小さいサイズの共有メモリは作成できません - - - %1: already exists - %1: 既に存在します - - - %1: unknown error %2 - %1: 未知のエラー %2 - - - %1: invalid size - %1: 無効なサイズです - - - %1: unable to make key - %1: キーを作成できません - - - %1: unable to set key on lock - %1: ロックするためのキーを設定できません - - - %1: unable to unlock - %1: アンロックできません - - - %1: permission denied - %1: 許可されていません - - - %1: ftok failed - %1: ftok に失敗しました - - - %1: out of resources - %1: リソース不足です - - - %1: not attached - %1: アタッチしていません - - - %1: UNIX key file doesn't exist - %1: UNIX key file が存在しません - - - %1: doesn't exist - %1: 存在しません - - - %1: size query failed - %1: サイズのクエリーに失敗しました - - - %1: unable to lock - %1: ロックできません - - - - QXmlStream - - Reference to unparsed entity '%1'. - 解析対象外実体 '%1' を参照しています。 - - - Unexpected character '%1' in public id literal. - 公開 ID に使用できない文字 '%1' が使用されています。 - - - Illegal namespace declaration. - 無効な名前空間の宣言です。 - - - Invalid XML character. - 無効な XML 文字です。 - - - Expected character data. - 予期していた文字列。 - - - Standalone accepts only yes or no. - standalone には yes または no のみ指定できます。 - - - Invalid XML version string. - 無効な XML バージョン指定です。 - - - Invalid processing instruction name. - 無効な処理命令名です。 - - - Namespace prefix '%1' not declared - 名前空間のブリフィックス '%1' は宣言されていません - - - Entity '%1' not declared. - 実体 '%1' は宣言されていません。 - - - %1 is an invalid processing instruction name. - %1 は無効な処理命令名です。 - - - The standalone pseudo attribute must appear after the encoding. - 仮想属性指定は、エンコーディング指定の後にのみ使用できます。 - - - Sequence ']]>' not allowed in content. - このコンテンツでは、']]>' は許可されていません。 - - - %1 is an invalid encoding name. - %1 は無効なエンコーディングの名前です。 - - - , but got ' - ですが、取得した表現は以下のものでした ' - - - Start tag expected. - 開始タグを予期していましたが、見つかりません。 - - - Invalid character reference. - 無効な文字への参照です。 - - - Reference to external entity '%1' in attribute value. - 属性値として、外部実体 '%1' を参照しています。 - - - Expected - 予期していた表現は、 - - - Invalid document. - 無効なドキュメントです。 - - - Opening and ending tag mismatch. - 開始タグと、終了タグがマッチしません。 - - - Encountered incorrectly encoded content. - 正しくないエンコードの文脈に遭遇しました。 - - - Invalid attribute in XML declaration. - XML 宣言に無効な属性があります。 - - - %1 is an invalid PUBLIC identifier. - %1 は、公開 (PUBLIC) 識別子として無効です。 - - - Extra content at end of document. - ドキュメントの末尾に余計なものがついています。 - - - Attribute '%1' redefined. - 属性 '%1' が再度定義されています。 - - - Invalid XML name. - 無効な XML 名です。 - - - Premature end of document. - ドキュメントが途中で終わっています。 - - - XML declaration not at start of document. - XML 宣言がドキュメントの先頭にありません。 - - - Recursive entity detected. - 再帰しているエンティティを発見しました。 - - - Unsupported XML version. - この XML のバージョンはサポートされていません。 - - - Unexpected ' - 予期していなかった表現 ' - - - Invalid entity value. - 実体の値が無効です。 - - - Encoding %1 is unsupported - エンコーディング '%1' はサポートされていません - - - NDATA in parameter entity declaration. - パラメータ実体の宣言において NDATA があります。 - - - - QProcess - - Error writing to process - プロセスへの書き込みにおいてエラーが発生しました - - - Resource error (fork failure): %1 - リソースエラー (fork に失敗しました): %1 - - - Error reading from process - プロセスからの読み込みにおいてエラーが発生しました - - - Process failed to start - プロセスの起動に失敗しました - - - Process failed to start: %1 - プロセスの起動に失敗しました: %1 - - - Could not open input redirection for reading - 読み込み用に入力リダイレクトを開けませんでした - - - Process failed to start (spawned process exited with code 127) - プロセスの起動に失敗しました(子プロセスはエラーコード 127 で終了しました) - - - No program defined - プログラムが指定されていません - - - Could not open output redirection for writing - 書き込み用に出力リダイレクトを開けませんでした - - - Process operation timed out - プロセス処理がタイムアウトしました - - - Process crashed - プロセスがクラッシュしました - - - - QNativeSocketEngine - - The proxy type is invalid for this operation - このプロキシは、この操作に対応していません - - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - The remote host closed the connection - リモートホストは接続を閉じました - - - Invalid socket descriptor - 無効なソケット記述子です - - - Host unreachable - ホストへ到達できません - - - Protocol type not supported - サポートされていないプロトコル型です - - - Datagram was too large to send - データグラムが大きすぎるため送信できませんでした - - - Attempt to use IPv6 socket on a platform with no IPv6 support - IPv6 がサポートされていないプラットフォームで IPv6 ソケットを使用しようとしています - - - Unable to receive a message - メッセージを受信できません - - - Permission denied - 許可されていません - - - Connection refused - 接続を拒否されました - - - Unable to write - 書き込みができません - - - Another socket is already listening on the same port - 別のソケットが同じポートで既に待ち受けています - - - Unable to send a message - メッセージを送信できません - - - The bound address is already in use - バインドアドレスは既に使われています - - - Connection timed out - 接続がタイムアウトしました - - - Network error - ネットワークエラー - - - Unsupported socket operation - サポートされていないソケットの操作です - - - Operation on non-socket - 非ソケットに対する操作です - - - Unable to initialize broadcast socket - ブロードキャストソケットを初期化できません - - - Unknown error - 未知のエラー - - - Unable to initialize non-blocking socket - 非ブロック型ソケットを初期化できません - - - The address is protected - そのアドレスへのアクセス権がありません - - - Network unreachable - ネットワークへ到達できません - - - The address is not available - そのアドレスは使用できません - - - Temporary error - 一時エラー - - - Out of resources - リソースが足りません - - - - QNetworkAccessFtpBackend - - No suitable proxy found - 適切なプロキシが見つかりません - - - Error while downloading %1: %2 - %1 のダウンロード中にエラーが発生しました: %2 - - - Error while uploading %1: %2 - %1 のアップロード中にエラーが発生しました: %2 - - - Cannot open %1: is a directory - %1 を開けません: 指定されたパスはディレクトリです - - - Logging in to %1 failed: authentication required - %1 へのログインに失敗しました: 認証が必要です - - - - QNetworkReplyHttpImpl - - No suitable proxy found - 適切なプロキシが見つかりません - - - Operation canceled - 操作はキャンセルされました - - - - QDockWidget - - Close - 閉じる - - - Float - フロート - - - Undocks and re-attaches the dock widget - ドックウィジェットのドッキング解除やドッキングを行う - - - Closes the dock widget - ドックウィジェットを閉じる - - - - BbCameraAudioEncoderSettingsControl - - PCM uncompressed - PCM 非圧縮 - - - No compression - 非圧縮 - - - AAC compression - AAC 圧縮 - - - - BbVideoDeviceSelectorControl - - Front Camera - フロントカメラ - - - Rear Camera - リアカメラ - - - Desktop Camera - デスクトップカメラ - - - - QQuickShaderEffectMesh - - Cannot create instance of abstract class ShaderEffectMesh. - 抽象クラス ShaderEffectMesh のインスタンスは作成できません。 - - - - QAccessibleActionInterface - - Press - 押す - - - Shows the menu - メニューを表示する - - - Scrolls to the left - 左へスクロール - - - Scroll Down - 下へスクロール - - - Scroll Left - 左へスクロール - - - Goes back a page - 前のページへ戻る - - - Triggers the action - アクションを実行する - - - Increase - 増加 - - - Toggle - 反転 - - - Toggles the state - 状態を反転させる - - - Scrolls up - 上へスクロール - - - Scrolls down - 下へスクロール - - - Scroll Up - 上へスクロール - - - Goes to the next page - 次のページへ進む - - - Scrolls to the right - 右へスクロール - - - Increase the value - 値を増加させる - - - Decrease the value - 値を減少させる - - - Decrease - 減少 - - - Scroll Right - 右へスクロール - - - Previous Page - 前のページ - - - Sets the focus - フォーカスをセットする - - - SetFocus - フォーカスをセット - - - Next Page - 次のページ - - - ShowMenu - メニューの表示 - - - - QMultimediaDeclarativeModule - - CameraFocus is provided by Camera - Camera エレメントが提供する CameraFocus エレメント - - - CameraRecorder is provided by Camera - Camera エレメントが提供する CameraRecorder エレメント - - - CameraFlash is provided by Camera - Camera エレメントが提供する CameraFlash エレメント - - - CameraViewfinder is provided by Camera - Camera エレメントが提供する CameraViewfinder エレメント - - - CameraExposure is provided by Camera - Camera エレメントが提供する CameraExposure エレメント - - - CameraImageProcessing is provided by Camera - Camera エレメントが提供する CameraImageProcessing エレメント - - - CameraCapture is provided by Camera - Camera エレメントが提供する CameraCapture エレメント - - - - QSocks5SocketEngine - - Network operation timed out - ネットワーク操作がタイムアウトしました - - - Connection to proxy closed prematurely - プロキシの接続が通信の終了前に切断されました - - - Proxy authentication failed: %1 - プロキシでの認証に失敗しました: %1 - - - Proxy authentication failed - プロキシでの認証に失敗しました - - - General SOCKSv5 server failure - SOCKS バージョン 5 サーバのエラーです - - - Unknown SOCKSv5 proxy error code 0x%1 - 未知の SOCKSv5 プロキシエラーです: 0x%1 - - - Connection not allowed by SOCKSv5 server - SOCKS バージョン 5 サーバより接続を拒否されました - - - SOCKSv5 command not supported - この SOCKSv5 コマンドはサポートされていません - - - Connection to proxy timed out - プロキシとの接続がタイムアウトしました - - - Proxy host not found - プロキシホストが見つかりません - - - TTL expired - ネットワークへ到達できません - - - Address type not supported - 指定されたアドレスタイプはサポートされていません - - - Connection to proxy refused - プロキシへの接続が拒否されました - - - SOCKS version 5 protocol error - SOCKS バージョン 5 プロトコルのエラーです - - - - QQuickWindow - - Failed to create %1 context for format %2. -This is most likely caused by not having the necessary graphics drivers installed. - -Install a driver providing OpenGL 2.0 or higher, or, if this is not possible, make sure the ANGLE Open GL ES 2.0 emulation libraries (%3, %4 and d3dcompiler_*.dll) are available in the application executable's directory or in a location listed in PATH. - フォーマット %2 用の %1 コンテキストの作成に失敗しました。 -多くの場合、このエラーは適切なグラフィックドライバーがインストールされていないために発生します。 - -OpenGL 2.0 以上に対応したドライバーをインストールするか、それが不可能な場合、ANGLE OpenGL ES 2.0 エミュレーションライブラリ(%3, %4 および d3dcompiler_*.dll)がアプリケーションの実行ファイルのあるディレクトリか PATH の通ったディレクトリに存在することを確認してください。 - - - Failed to create %1 context for format %2 - フォーマット %2 用の %1 コンテキストの作成に失敗しました - - - - QQmlParser - - Invalid signal parameter type: - 無効な型のシグナルの引数: - - - Stray newline in string literal - 文字列リテラルに改行が紛れ込んでいます - - - Invalid module URI - 無効なモジュールの URI - - - Script import qualifiers must be unique. - スクリプトを import する名前空間は一意である必要があります。 - - - Unterminated regular expression class - 正規表現の文字クラスが閉じていません - - - Library import requires a version - ライブラリの import にはバージョンが必要です - - - Octal escape sequences are not allowed - 8進数のエスケープシーケンスは許可されていません - - - At least one hexadecimal digit is required after '0%1' - '0%1' の後に少なくとも一つの16進数が必要です - - - Invalid regular expression flag '%0' - '%0' は無効な正規表現のフラグです - - - JavaScript declaration outside Script element - Script 要素の外部での JavaScript の宣言 - - - Illegal hexadecimal escape sequence - 無効な16進数のエスケープシーケンスです - - - Module import requires a qualifier - モジュールの import には修飾子が必要です - - - Unclosed string at end of line - 文字列が行末で閉じていません - - - Expected property type - 予期するプロパティの型 - - - Decimal numbers can't start with '0' - 十進数を '0' から始めることはできません - - - Module import requires a version - モジュールの import にはバージョンが必要です - - - Unterminated regular expression literal - 正規表現リテラルが閉じていません - - - Unterminated regular expression backslash sequence - 正規表現のバックスラッシュエスケープが閉じていません - - - File import requires a qualifier - ファイルの import には修飾子が必要です - - - Script import requires a qualifier - スクリプトを import する際には名前空間の指定が必要です - - - Illegal syntax for exponential number - 無効な指数の構文です - - - Imported file must be a script - インポートしたファイルがスクリプトではありません - - - Pragma requires a valid qualifier - Pragma には有効な修飾子が必要です - - - Invalid import qualifier - 無効な import の修飾子 - - - Invalid property type modifier - 無効なプロパティの型の修飾子 - - - Unexpected object definition - 予期しないオブジェクト定義です - - - Reserved name "Qt" cannot be used as an qualifier - 予約語 "Qt" を import する名前空間に使用することはできません - - - Expected token `%1' - トークン '%1' を予期してます - - - Unexpected token `%1' - '%1' は予期しないトークンです - - - Expected parameter type - 予期するパラメータの型 - - - Illegal unicode escape sequence - 無効な Unicode のエスケープシーケンスです - - - Unexpected property type modifier - 予期しないプロパティの型の修飾子 - - - Invalid import qualifier ID - import する名前空間の id が無効です - - - Syntax error - 構文エラー - - - - QDnsLookupRunnable - - No hostname given - ホストネームが与えられていません - - - Server failure - サーバが失敗しました - - - Invalid text record - 無効なテキスト(TXT)レコードです - - - Invalid mail exchange record - 無効な MX レコードです - - - Invalid canonical name record - 無効な別名(CNAME)レコードです - - - Invalid service record - 無効な SRV レコードです - - - Non existent domain - 存在しないドメイン - - - Server could not process query - サーバが問い合わせを処理できませんでした - - - Host %1 could not be found. - ホスト %1 が見つけられませんでした。 - - - IPv6 addresses for nameservers are currently not supported - IPv6 アドレスでのネームサーバの指定は現在サポートされていません - - - Not yet supported on Android - Android はまだサポートされていません - - - Resolver functions not found - リゾルバ関数が見つかりません - - - Invalid domain name - 無効なドメイン名 - - - Invalid pointer record - 無効な PTR レコードです - - - Invalid name server record - 無効なネームサーバ(NS)レコードです - - - Resolver library can't be loaded: No runtime library loading support - リゾルバライブラリがロードできません: ランタイムライブラリのロードがサポートされていません - - - Unknown error - 未知のエラー - - - Server refused to answer - サーバが返答を拒否しました - - - Invalid hostname - 無効なホスト名 - - - Could not expand domain name - ドメイン名を展開できませんでした - - - Resolver initialization failed - リゾルバの初期化に失敗しました - - - Invalid reply received - 無効な返答を受け取りました - - - Invalid IPv6 address record - 無効な IPv6 アドレスレコードです - - - Invalid IPv4 address record - 無効な IPv4 アドレスレコードです - - - - QQmlComponent - - createObject: value is not an object - createObject: 値がオブジェクトではありません - - - Invalid empty URL - 空の URL は無効です - - - Object destroyed during incubation - オブジェクトが生成中に破棄されました - - - - QRegExp - - invalid category - 無効なカテゴリー - - - bad lookahead syntax - 不正なlookahead構文 - - - no error occurred - エラーは発生しませんでした - - - missing left delim - 左の区切り文字がありません - - - bad char class syntax - 不正な文字クラス構文 - - - disabled feature used - 無効な機能が使用されました - - - invalid octal value - 無効な8進値 - - - bad repetition syntax - 不正なrepetition構文 - - - met internal limit - 内部制限を満たしました - - - invalid interval - 無効な間隔 - - - unexpected end - 予期しない末尾です - - - lookbehinds not supported, see QTBUG-2371 - lookbehind はサポートされていません。QTBUG-2371 を参照してください - - - - QDialog - - What's This? - ヒント - - - - QWhatsThisAction - - What's This? - ヒント - - - - QFtp - - Listing directory failed: -%1 - ディレクトリのファイル一覧が取得できません: -%1 - - - Creating directory failed: -%1 - ディレクトリの作成に失敗しました: -%1 - - - Not connected - 未接続です - - - Login failed: -%1 - ログインに失敗しました: -%1 - - - Downloading file failed: -%1 - ファイルのダウンロードに失敗しました: -%1 - - - Connection timed out to host %1 - ホスト %1 への接続がタイムアウトしました - - - Connected to host %1 - ホスト %1 に接続しました - - - Connecting to host failed: -%1 - ホストへの接続に失敗しました: -%1 - - - Host %1 not found - ホスト %1 が見つかりません - - - Uploading file failed: -%1 - ファイルのアップロードに失敗しました: -%1 - - - Changing directory failed: -%1 - ディレクトリの変更に失敗しました: -%1 - - - Data Connection refused - データ接続が拒否されました - - - Removing directory failed: -%1 - ディレクトリの削除に失敗しました: -%1 - - - Connection refused to host %1 - ホスト %1 への接続が拒否されました - - - Removing file failed: -%1 - ファイルの削除に失敗しました: -%1 - - - Unknown error - 未知のエラー - - - Connection closed - 接続が閉じられました - - - - QQmlAnonymousComponentResolver - - Component elements may not contain properties other than id - Component 要素に id 以外のプロパティが含まれていません - - - Cannot create empty component specification - 空のコンポーネントは作成できません - - - Component objects cannot declare new functions. - Component オブジェクトには新しい関数を宣言できません。 - - - Component objects cannot declare new properties. - Component オブジェクトには新しいプロパティを宣言できません。 - - - id is not unique - id が重複しています - - - Invalid alias reference. Unable to find id "%1" - 無効なエイリアスの参照です。id "%1" が見つかりません - - - Invalid component body specification - 無効なコンポーネントボディが指定されています - - - Component objects cannot declare new signals. - Component オブジェクトには新しいシグナルを宣言できません。 - - - Invalid alias target location: %1 - 無効なエイリアス先のパス: %1 - - - - QQmlListModel - - set: value is not an object - set: オブジェクト以外の値は代入できません - - - remove: incorrect number of arguments - remove: 引数の数が異なります - - - remove: indices [%1 - %2] out of range [0 - %3] - remove: 削除対象のインデックス [%1 - %2] は有効範囲 [0 - %3] 外の値です - - - dynamic role setting must be made from the main thread, before any worker scripts are created - 動的ロールの設定はメインスレッドでワーカースクリプトが生成される前に行う必要があります - - - ListElement: cannot use script for property value - ListElement: スクリプトをプロパティの値には使用できません - - - ListModel: undefined property '%1' - ListModel: '%1' は未定義のプロパティです - - - ListElement: cannot contain nested elements - ListElement: ネストした要素は保持できません - - - insert: value is not an object - insert: オブジェクト以外の値は挿入できません - - - unable to enable dynamic roles as this model is not empty! - モデルが空ではないため動的ロールを有効にできません。 - - - set: index %1 out of range - set: インデックス %1 の値が有効範囲外です - - - append: value is not an object - append: オブジェクト以外の値は追加できません - - - move: out of range - move: 値が有効範囲外です - - - insert: index %1 out of range - insert: インデックス %1 の値が有効範囲外です - - - ListElement: cannot use reserved "id" property - ListElement: 予約語 "id" をプロパティに使用できません - - - unable to enable static roles as this model is not empty! - モデルが空ではないため静的ロールを有効にできません。 - - - - QAndroidCameraSession - - Camera cannot be started without a viewfinder. - カメラはビューファインダ無しでは開始できません。 - - - Could not open destination file: %1 - 保存先のファイルを開けませんでした: %1 - - - Camera not ready - カメラが使用可能ではありません - - - Drive mode not supported - ドライブモードはサポートされていません - - - - QQmlPropertyCacheCreator - - Invalid property type - 無効なプロパティの型です - - - Cannot override FINAL property - FINAL プロパティは上書きできません - - - Fully Dynamic types cannot declare new functions. - 完全に動的な型に新たな関数を宣言することはできません。 - - - Non-existent attached object - アタッチされたオブジェクトが存在しません - - - Fully dynamic types cannot declare new signals. - 完全に動的な型に新たなシグナルを宣言することはできません。 - - - Duplicate method name: invalid override of property change signal or superclass signal - メソッド名が重複しています: プロパティの変更通知シグナルや基底クラスのシグナルのオーバーライドは無効です - - - Invalid signal parameter type: %1 - 無効な型のシグナルの引数: %1 - - - Fully dynamic types cannot declare new properties. - 完全に動的な型に新たなプロパティを宣言することはできません。 - - - Duplicate signal name: invalid override of property change signal or superclass signal - シグナル名が重複しています: プロパティの変更通知シグナルや基底クラスのシグナルのオーバーライドは無効です - - - - QQmlEngine - - Version mismatch: expected %1, found %2 - バージョンが一致しません: 予期したバージョンは %1 ですが、 %2 が見つかりました - - - Locale cannot be instantiated. Use Qt.locale() - Locale は生成不能な型です。Qt.locale() を使用してください - - - SQL: can't create database, offline storage is disabled. - SQL: データベースを作成できません。オフラインストレージが無効化されています。 - - - executeSql called outside transaction() - transaction() の外部から executeSql が呼び出されました - - - Read-only Transaction - 読込専用のトランザクションです - - - SQL transaction failed - SQL のトランザクションを失敗しました - - - transaction: missing callback - トランザクション: コールバックが必要です - - - There are still "%1" items in the process of being created at engine destruction. - エンジンの終了処理を行っていますが、%1個のアイテムを作成中です。 - - - SQL: database version mismatch - SQL: データーベースのバージョンが一致しません - - - - QDB2Driver - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to set autocommit - 自動コミットを設定できません - - - Unable to connect - 接続できません - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QIBaseDriver - - Unable to commit transaction - トランザクションをコミットできません - - - Could not start transaction - トランザクションを開始できませんでした - - - Error opening database - データベースのオープン時にエラーが発生しました - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QIBaseResult - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to open BLOB - バイナリラージオブジェクト(BLOB)を開けません - - - Could not describe statement - ステートメントの情報を取得できませんでした - - - Could not describe input statement - INPUT ステートメントの情報を取得できませんでした - - - Could not allocate statement - ステートメントの領域を確保できませんでした - - - Unable to write BLOB - バイナリラージオブジェクト(BLOB)を書き込めません - - - Could not start transaction - トランザクションを開始できませんでした - - - Unable to close statement - ステートメントをクローズできません - - - Could not get query info - クエリー情報を取得できませんでした - - - Could not find array - 配列が見つけられませんでした - - - Could not get array data - 配列データを取得できませんでした - - - Unable to execute query - クエリーを実行できません - - - Could not prepare statement - プリペアドステートメントを作成できませんでした - - - Could not fetch next item - 次のレコードをフェッチできませんでした - - - Could not get statement info - ステートメントの情報を取得できませんでした - - - Unable to create BLOB - バイナリラージオブジェクト(BLOB)を作成できません - - - Unable to read BLOB - バイナリラージオブジェクト(BLOB)を読み込めません - - - - QMYSQLDriver - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to open database '%1' - データベース '%1' を開けません - - - Unable to allocate a MYSQL object - MYSQL オブジェクトを配置できません - - - Unable to connect - 接続できません - - - Unable to rollback transaction - トランザクションをロールバックできません - - - Unable to begin transaction - トランザクションを開始できません - - - - QOCIDriver - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to initialize - 初期化できません - - - Unable to logon - ログオンできません - - - Unable to rollback transaction - トランザクションをロールバックできません - - - Unable to begin transaction - トランザクションを開始できません - - - - QODBCDriver - - Unable to commit transaction - トランザクションをコミットできません - - - Unable to enable autocommit - 自動コミットを有効にできません - - - Unable to disable autocommit - 自動コミットを無効にできません - - - Unable to connect - Driver doesn't support all functionality required - 接続できません - ドライバは必要なすべての機能をサポートしていません - - - Unable to connect - 接続できません - - - Unable to rollback transaction - トランザクションをロールバックできません - - - - QSQLite2Driver - - Unable to commit transaction - トランザクションをコミットできません - - - Error opening database - データベースのオープン時にエラーが発生しました - - - Unable to rollback transaction - トランザクションをロールバックできません - - - Unable to begin transaction - トランザクションを開始できません - - - - QSQLiteDriver - - Unable to commit transaction - トランザクションをコミットできません - - - Error closing database - データベースのクローズ時にエラーが発生しました - - - Error opening database - データベースのオープン時にエラーが発生しました - - - Unable to rollback transaction - トランザクションをロールバックできません - - - Unable to begin transaction - トランザクションを開始できません - - - - QAbstractSocket - - Host not found - ホストが見つかりません - - - Connection refused - 接続が拒否されました - - - Connection timed out - 接続がタイムアウトしました - - - Trying to connect while connection is in progress - 接続の実行中に接続を試みました - - - Socket is not connected - ソケットが接続されていません - - - Socket operation timed out - ソケット操作がタイムアウトしました - - - Network unreachable - ネットワークへ到達できません - - - Operation on socket is not supported - このソケットへのこの操作はサポートされていません - - - - QHostInfoAgent - - Host not found - ホストが見つかりません - - - No host name given - ホストネームが与えられていません - - - Unknown address type - 未知のアドレス型です - - - Unknown error - 未知のエラー - - - Invalid hostname - 無効なホスト名 - - - Unknown error (%1) - 未知のエラー (%1) - - - - QTgaFile - - Image type not supported - サポートされていない型の画像です - - - Image header read failed - 画像ヘッダの読み込みに失敗しました - - - Seek file/device for image read failed - 画像読み込み中にファイル/デバイスのシークに失敗しました - - - Could not read image data - 画像データを読み込めません - - - Could not reset to read data - 読み込んだデータをリセットできませんでした - - - Image depth not valid - 画像のデプスが不正です - - - Could not read footer - フッタを読み込めませんでした - - - Sequential device (eg socket) for image read not supported - (ソケットなどの)シーケンシャルデバイスからの画像の読み込みはサポートしていません - - - Image type (non-TrueVision 2.0) not supported - (TrueVision 2.0 ではない)型の画像はサポートされていません - - - Could not seek to image read footer - 画像のフッタ読み込み時にシークできませんでした - - - - QLibrary - - not a dynamic library - ダイナミックライブラリではありません - - - file too small - ファイルが小さすぎます - - - Cannot unload library %1: %2 - ライブラリ %1 を解放できません: %2 - - - '%1' is not a valid Mach-O binary (%2) - '%1' は有効な Mach-O バイナリ(%2)ではありません - - - Cannot load library %1: %2 - ライブラリ %1 を読み込めません: %2 - - - '%1' is not a Qt plugin - '%1' は Qt のプラグインではありません - - - '%1' is not an ELF object (%2) - '%1' は ELF オブジェクトではありません(%2) - - - The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] - プラグイン '%1' は、互換性のない Qt ライブラリを使用しています。(%2.%3.%4) [%5] - - - Cannot resolve symbol "%1" in %2: %3 - %2 に含まれる識別子 "%1" を解決できません: %3 - - - Plugin verification data mismatch in '%1' - '%1' でプラグイン検証データが一致しません - - - '%1' is an invalid ELF object (%2) - '%1' は無効な ELF オブジェクトです(%2) - - - The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) - プラグイン '%1' はこの Qt と互換性のないライブラリを使用しています。 (デバック版とリリース版のライブラリを同時に使用することはできません) - - - '%1' is not an ELF object - '%1' は ELF オブジェクトではありません - - - The file '%1' is not a valid Qt plugin. - ファイル '%1' は有効な Qt プラグインではありません。 - - - The shared library was not found. - 共有ライブラリが見つかりませんでした。 - - - wrong architecture - アーキテクチャが異なります - - - file is corrupt - ファイルが破損しています - - - Unknown error - 未知のエラー - - - no suitable architecture in fat binary - ファットバイナリに適切なアーキテクチャが含まれていません - - - invalid magic %1 - 無効なマジック %1 - - - - QSerialPort - - Permission error while creating lock file - ロックファイルを生成可能な権限がありません - - - No error - エラーなし - - - Device is already open - デバイスは既に開かれています - - - No suitable custom baud rate divisor - カスタマイズされたボーレートの除数が適切ではありません - - - Cannot set custom speed for one direction - 一方向だけ速度をカスタマイズすることはできません - - - Device is not open - デバイスが開かれていません - - - The device supports only the ignoring policy - このデバイスではデータエラーのポリシーは無視のみサポートしています - - - Operation timed out - 処理がタイムアウトしました - - - Custom baud rate is not supported - ボーレートのカスタマイズはサポートされていません - - - Error writing to device - デバイスへ書き込めませんでした - - - Permission error while locking the device - デバイスをロック可能な権限がありません - - - Error reading from device - デバイスから読み込めませんでした - - - Unsupported open mode - サポートされていないオープンモードです - - - Device disappeared from the system - システムからデバイスが消失しました - - - Custom baud rate direction is unsupported - 一方向だけボーレートをカスタマイズすることはできません - - - Invalid baud rate value - 無効なボーレートの値です - - - - QSQLiteResult - - Unable to execute multiple statements at a time - 一度に複数ステートメントを実行することはできません - - - Unable to fetch row - レコードをフェッチできません - - - No query - クエリーがありません - - - Unable to execute statement - ステートメントを実行できません - - - Unable to bind parameters - パラメータをバインドできません - - - Unable to reset statement - ステートメントをリセットできません - - - Parameter count mismatch - パラメータの数が合っていません - - - - SignalHandlerConverter - - Cannot assign a value to a signal (expecting a script to be run) - 値はシグナルに割り当てできません(スクリプト自体は実行されます) - - - Signal uses unnamed parameter followed by named parameter. - シグナルは名前付きの引数の後に無名の引数を使用しています。 - - - Incorrectly specified signal assignment - 仕様の異なるシグナルが割り当てられています - - - Non-existent attached object - アタッチされたオブジェクトが存在しません - - - Signal parameter "%1" hides global variable. - シグナルの引数 "%1" がグローバル変数を隠しています。 - - - "%1.%2" is not available due to component versioning. - コンポーネントのバージョンの問題により "%1.%2" は利用できません。 - - - "%1.%2" is not available in %3 %4.%5. - %3 %4.%5 で "%1.%2" は利用できません。 - - - - QQmlImportDatabase - - is ambiguous. Found in %1 and in %2 - を特定できません。%1 と %2 の双方に見つかりました - - - Namespace '%1' has already been used for type registration - 名前空間 '%1' は既に型の登録の際に使用されています - - - Module '%1' does not contain a module identifier directive - it cannot be protected from external registrations. - モジュール '%1' にモジュール識別子が含まれていません。そのため、外部からの登録から保護することができません。 - - - local directory - ローカルディレクトリ - - - import "%1" has no qmldir and no namespace - import する "%1" に qmldir も名前空間もありません - - - - %1 is not a namespace - - %1 は名前空間ではありません - - - "%1" is ambiguous. Found in %2 and in %3 - "%1" を特定できません。%2 と %3 の双方に見つかりました - - - "%1" version %2.%3 is defined more than once in module "%4" - バージョン %2.%3 の "%1" がモジュール "%4" 内で複数回定義されています - - - module "%1" plugin "%2" not found - "%1" モジュールの "%2" プラグインが見つかりません - - - is not a type - は型ではありません - - - module "%1" is not installed - "%1" モジュールがインストールされていません - - - static plugin for module "%1" with name "%2" has no metadata URI - モジュール "%1"("%2") 用のスタティックプラグインにメタデータ URI が有りません - - - static plugin for module "%1" with name "%2" cannot be loaded: %3 - モジュール "%1"("%2") 用のスタティックプラグインがロードできません: %3 - - - module "%1" version %2.%3 is not installed - バージョン %2.%3 の "%1" モジュールがインストールされていません - - - File name case mismatch for "%1" - ファイル名の大文字小文字が "%1" に合っていません - - - Module loaded for URI '%1' does not implement QQmlTypesExtensionInterface - URI '%1' としてロードしたモジュールが QQmlTypesExtensionInterface を実装していません - - - - nested namespaces not allowed - - 名前空間のネストは許可されていません - - - plugin cannot be loaded for module "%1": %2 - "%1" モジュール用のプラグインがロードできません: %2 - - - module does not support the designer "%1" - モジュール "%1" はデザイナをサポートしていません - - - is instantiated recursively - が再帰的に生成されています - - - Module namespace '%1' does not match import URI '%2' - モジュールの名前空間 '%1' が import する URI '%2' と一致しません - - - is ambiguous. Found in %1 in version %2.%3 and %4.%5 - を特定できません。%1 にバージョン %2.%3 と %4.%5 の双方を見つけました - - - "%1": no such directory - "%1": そのようなディレクトリはありません - - - could not resolve all plugins for module "%1" - モジュール "%1" 用プラグインのすべてシンボルを解決することが出来ませんでした - - - - MFPlayerSession - - Unsupported media, a codec is missing. - サポートされていないメディアです。コーデックがありません。 - - - Failed to stop. - 停止に失敗しました。 - - - Failed to seek. - シークに失敗しました。 - - - Attempting to play invalid Qt resource. - 無効な Qt リソースを再生しようとしています。 - - - Unsupported media type. - サポートされていない型のメディアです。 - - - Unable to create mediasession. - メディアセッションが作成できません。 - - - Failed to set topology. - トポロジーのセットに失敗しました。 - - - Failed to pause. - 一時停止に失敗しました。 - - - Unable to play. - 再生できません。 - - - failed to start playback - プレイバックの開始に失敗しました - - - Cannot create presentation descriptor. - プレゼンテーション記述子が作成できません。 - - - The specified server could not be found. - 指定されたサーバが見つかりません。 - - - The system cannot find the file specified. - システムは指定されたファイルを見つけられません。 - - - Invalid stream source. - 無効なストリームのソースです。 - - - Media session serious error. - メディアセッションに深刻なエラーが発生しました。 - - - Unable to pull session events. - セッションイベントをプルできません。 - - - Failed to get stream count. - ストリームカウントの取得に失敗しました。 - - - Media session non-fatal error. - メディアセッションに致命的ではないエラーが発生しました。 - - - Failed to load source. - ソースの読み込みに失敗しました。 - - - Unknown stream type. - 未知の型のストリームです。 - - - Unable to play any stream. - どのストリームも再生できません。 - - - Failed to create topology. - トポロジーの作成に失敗しました。 - - - - QXml - - unparsed entity reference in wrong context - 不正な文脈で解析対象外実体を参照しました - - - external parsed general entity reference not allowed in DTD - DTDでの外部一般解析対象実体への参照は許可されていません - - - wrong value for standalone declaration - スタンドアロン宣言として正しくない値です - - - encoding declaration or standalone declaration expected while reading the XML declaration - XML宣言にはエンコーディング宣言かスタンドアローン宣言が必要です - - - no error occurred - エラーは発生しませんでした - - - error occurred while parsing reference - 参照の解析中にエラーが発生しました - - - standalone declaration expected while reading the XML declaration - XML宣言にはスタンドアローン宣言が必要です - - - invalid name for processing instruction - 無効な処理命令名です - - - error triggered by consumer - コンシューマによってエラーが誘発されました - - - error occurred while parsing element - 要素の解析中にエラーが発生しました - - - unexpected character - 予期しない文字です - - - tag mismatch - タグが一致しません - - - error occurred while parsing content - コンテンツの解析中にエラーが発生しました - - - error occurred while parsing comment - コメントの解析中にエラーが発生しました - - - internal general entity reference not allowed in DTD - DTDでの内部一般実体への参照は許可されていません - - - recursive entities - 実体が再帰しています - - - more than one document type definition - ドキュメントタイプの定義が複数あります - - - version expected while reading the XML declaration - XML 宣言にはバージョンが必要です - - - letter is expected - 文字が必要です - - - unexpected end of file - 予期しないファイルの終りです - - - external parsed general entity reference not allowed in attribute value - 属性値での外部一般解析対象実体への参照は許可されていません - - - error in the text declaration of an external entity - 外部実体のテキスト宣言にエラーがあります - - - error occurred while parsing document type definition - ドキュメントタイプの定義を解析中にエラーが発生しました - - - - QSystemSemaphore - - %1: does not exist - %1: 存在しません - - - %1: already exists - %1: 既に存在します - - - %1: unknown error %2 - %1: 未知のエラーです %2 - - - %1: permission denied - %1: 許可されていません - - - %1: out of resources - %1: リソース不足です - - - - QCommandLineParser - - Unknown options: %1. - 未知のオプション: %1. - - - Unknown option '%1'. - '%1' は未知のオプションです。 - - - [options] - [オプション] - - - Options: - オプション: - - - Usage: %1 - 使い方: %1 - - - Unexpected value after '%1'. - '%1' の後が予期せぬ値です。 - - - Displays version information. - バージョン情報を表示する。 - - - Arguments: - 引数: - - - Displays this help. - このヘルプを表示する。 - - - Missing value after '%1'. - '%1' の後の値が欠けています。 - - - - QHttp - - Data corrupted - データが破損しています - - - Insecure redirect - 安全ではないリダイレクト - - - Host %1 not found - ホスト %1 が見つかりません - - - Host requires authentication - ホストの認証が必要です - - - Connection refused - 接続が拒否されました - - - Unknown protocol specified - 未対応のプロトコルです - - - Proxy requires authentication - プロキシでの認証が必要です - - - SSL handshake failed - SSLのハンドシェークに失敗しました - - - Too many redirects - リダイレクトが多すぎます - - - Connection closed - 接続が閉じられました - - - - QQuickPixmap - - Failed to get texture from provider: %1 - プロバイダーからのテクスチャの取得に失敗しました: %1 - - - Error decoding: %1: %2 - デコード中にエラーが発生しました: %1: %2 - - - Invalid image data: %1 - 無効な画像データ: %1 - - - Cannot open: %1 - 開けませんでした: %1 - - - Failed to get image from provider: %1 - プロバイダーからの画像の取得に失敗しました: %1 - - - Invalid image provider: %1 - 無効なイメージプロバイダー: %1 - - - - BbCameraSession - - Unable to start video recording - ビデオ録画を開始できません - - - Unable to open camera - カメラを開けません - - - Unable to retrieve native camera orientation - カメラのネイティブの方向を取得できません - - - Could not load JPEG data from frame - フレームから JPEG データを読み込めません - - - Camera provides image in unsupported format - カメラが提供する画像形式はサポートされていません - - - Unable to apply video settings - ビデオの設定を反映できません - - - Could not open destination file: -%1 - 保存先のファイルを開けませんでした: -%1 - - - Unable to close camera - カメラを閉じれません - - - Camera not ready - カメラが準備できていません - - - Unable to stop video recording - ビデオ録画を停止できません - - - - QUnicodeControlCharacterMenu - - RLE Start of right-to-left embedding - RLE(Start of right-to-left embedding) - - - ZWSP Zero width space - ZWSP(幅0の空白) - - - LRI Left-to-right isolate - LRI(Left-to-right isolate) - - - Insert Unicode control character - Unicode制御文字を挿入 - - - LRO Start of left-to-right override - LRO(Start of left-to-right override) - - - LRE Start of left-to-right embedding - LRE(Start of left-to-right embedding) - - - RLI Right-to-left isolate - RLI(Right-to-left isolate) - - - RLM Right-to-left mark - RLM(Right-to-left mark) - - - PDF Pop directional formatting - PDF(Pop directional formatting) - - - ZWNJ Zero width non-joiner - ZWNJ(幅0の非接続文字) - - - RLO Start of right-to-left override - RLO(Start of right-to-left override) - - - PDI Pop directional isolate - PDI(Pop directional isolate) - - - ZWJ Zero width joiner - ZWJ(幅0の接続文字) - - - LRM Left-to-right mark - LRM(Left-to-right mark) - - - FSI First strong isolate - FSI(First strong isolate) - - - - QJsonParseError - - invalid UTF8 string - 無効な UTF-8 文字列です - - - unterminated array - 閉じられていない配列です - - - unterminated object - 閉じられていないオブジェクトです - - - no error occurred - エラーは発生しませんでした - - - unterminated string - 閉じられていない文字列です - - - garbage at the end of the document - ドキュメントの末尾にゴミがあります - - - invalid termination by number - 数値による終端は無効です - - - missing value separator - 値の区切りがありません - - - illegal number - 無効な数字です - - - invalid escape sequence - 無効なエスケープシーケンスです - - - missing name separator - 名前の区切りがありません - - - too large document - ドキュメントが大きすぎます - - - object is missing after a comma - コンマの後にオブジェクトがありません - - - too deeply nested document - ドキュメントのネストが深すぎます - - - illegal value - 無効な値です - - - - QQmlObjectModel - - remove: indices [%1 - %2] out of range [0 - %3] - remove: 削除対象のインデックス [%1 - %2] は有効範囲 [0 - %3] 外の値です - - - move: out of range - move: 値が有効範囲外です - - - insert: index %1 out of range - insert: インデックス %1 の値が有効範囲外です - - - - QImageReader - - Unable to read image data - 画像データを読み込めません - - - Invalid device - 無効なデバイス - - - Unsupported image format - サポートされていない画像形式です - - - File not found - ファイルが見つかりません - - - Unknown error - 未知のエラー - - - - QHttpSocketEngine - - Proxy connection refused - プロキシが接続を拒否しました - - - Proxy denied connection - プロキシが接続を拒否しました - - - Proxy server not found - プロキシサーバが見つかりません - - - Proxy server connection timed out - プロキシとの接続がタイムアウトしました - - - Did not receive HTTP response from proxy - プロキシからHTTPレスポンスを受信できませんでした - - - Proxy connection closed prematurely - プロキシの接続が通信の終了前に切断されました - - - Error communicating with HTTP proxy - HTTP プロキシとの通信にて、エラーが発生しました - - - Authentication required - 認証が必要です - - - Error parsing authentication request from proxy - プロキシからの認証要求のパースに失敗しました - - - - QSaveFile - - Filename refers to a directory - ファイルではなくディレクトリを参照しています - - - Writing canceled by application - アプリケーションによって書き込みがキャンセルされました - - - Existing file %1 is not writable - 既存のファイル %1 は書き込み可能ではありません - - - - QNetworkAccessManager - - Network access is disabled. - ネットワークへのアクセスが無効になっています。 - - - - QAbstractSpinBox - - Step &down - 下(&D) - - - &Step up - 上(&S) - - - &Select All - すべてを選択(&S) - - - - QQuickXmlRoleList - - An XmlListModel query must start with '/' or "//" - XmlListModel のクエリーは '/' か "//" のどちらかで始まらなくてはいけません - - - - QGstreamerVideoInputDeviceControl - - Front camera - フロントカメラ - - - Main camera - メインカメラ - - - - QQuickAbstractAnimation - - Animator is an abstract class - Animator は抽象クラスです - - - Animation is an abstract class - Animation は抽象クラスです - - - Cannot animate non-existent property "%1" - 存在しないプロパティ "%1" はアニメーションできません - - - Cannot animate read-only property "%1" - 読込専用のプロパティ "%1" はアニメーションできません - - - - QDB2Result - - Unable to bind variable - 変数をバインドできません - - - Unable to execute statement - ステートメントを実行できません - - - Unable to fetch next - 次のレコードをフェッチできません - - - Unable to prepare statement - プリペアドステートメントを作成できません - - - Unable to fetch record %1 - レコード %1 をフェッチできません - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - QODBCResult - - Unable to bind variable - 変数をバインドできません - - - Unable to execute statement - ステートメントを実行できません - - - Unable to fetch next - 次のレコードをフェッチできません - - - Unable to fetch last - ラストレコードをフェッチできません - - - Unable to prepare statement - プリペアドステートメントを作成できません - - - Unable to fetch previous - 前のレコードをフェッチできません - - - Unable to fetch - フェッチできません - - - QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration - QODBCResult::reset: ステートメントの属性として 'SQL_CURSOR_STATUS' を設定できません。ODBC ドライバの構成を確認してください - - - Unable to fetch first - 最初のレコードをフェッチできません - - - - QPSQLDriver - - Unable to subscribe - サブスクライブできません - - - Could not begin transaction - トランザクションを開始できませんでした - - - Could not rollback transaction - トランザクションをロールバックできませんでした - - - Could not commit transaction - トランザクションをコミットできませんでした - - - Unable to connect - 接続できません - - - Unable to unsubscribe - サブスクリプションを削除できません - - - - QInputDialog - - Enter a value: - 値を入力: - - - - AVFMediaRecorderControl - - Recorder not configured - レコーダが設定されていません - - - Could not connect the video recorder - ビデオレコーダに接続できませんでした - - - Recording pause not supported - 録画時の一時停止はサポートされていません - - - - QCoreApplication - - %1: key is empty - %1: キーが空です - - - %1: unable to make key - %1: キーを作成できません - - - %1: ftok failed - %1: ftok に失敗しました - - - - QGstreamerAudioDecoderSession - - Cannot play stream of type: <unknown> - 再生不可能な型のストリームです: <不明> - - - - QGstreamerPlayerSession - - Cannot play stream of type: <unknown> - 再生不可能な型のストリームです: <不明> - - - UDP source timeout - UDP ソースがタイムアウトしました - - - Media is loaded as a playlist - メディアがプレイリストとして読み込まれました - - - - QIODevice - - No such file or directory - そのようなファイルやディレクトリはありません - - - Permission denied - 許可されていません - - - file to open is a directory - ディレクトリを開こうとしました - - - No space left on device - デバイスに空き容量がありません - - - Unknown error - 未知のエラー - - - Too many open files - 開かれたファイルが多すぎます - - - - QQmlPartsModel - - Delegate component must be Package type. - Delegate コンポーネントは Package 型である必要があります。 - - - The group of a DelegateModel cannot be changed within onChanged - DelegateModel のグループを onChanged の中で変更することはできません - - - - QTabBar - - Scroll Left - 左へスクロール - - - Scroll Right - 右へスクロール - - - - QUndoModel - - <empty> - <空> - - - - QNetworkAccessCacheBackend - - Error opening %1 - %1 オープン時のエラー - - - - QMYSQLResult - - Unable to execute statement - ステートメントを実行できません - - - Unable to store statement results - ステートメントの実行結果を記録できません - - - Unable to execute next query - 次のクエリーを実行できません - - - Unable to bind outvalues - 出力値をバインドできません - - - Unable to store next result - 次の結果を記録できません - - - Unable to fetch data - データをフェッチできません - - - Unable to prepare statement - プリペアドステートメントを作成できません - - - Unable to store result - 実行結果を記録できません - - - Unable to bind value - 値をバインドできません - - - Unable to execute query - クエリーを実行できません - - - Unable to reset statement - ステートメントをリセットできません - - - - QSQLite2Result - - Unable to execute statement - ステートメントを実行できません - - - Unable to fetch results - 実行結果をフェッチできません - - - - QAndroidVideoEncoderSettingsControl - - MPEG-4 SP compression - MPEG-4 SP 圧縮 - - - H.263 compression - H.263 圧縮 - - - H.264 compression - H.264 圧縮 - - - - QQmlCodeGenerator - - Invalid use of id property - 無効な id プロパティの使用法です - - - IDs cannot start with an uppercase letter - id を大文字から始めることはできません - - - Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property> - 無効なエイリアスの参照です。エイリアスの参照先は <id>, <id>.<プロパティ> もしくは <id>.<値プロパティ>.<プロパティ> のいずれかでなくてはいけません - - - Expected type name - 予期する型の名前 - - - Property value set multiple times - 複数回プロパティに値を割り当てています - - - Illegal signal name - シグナルの名前が無効です - - - No property alias location - プロパティのエイリアスへのパスがありません - - - IDs must start with a letter or underscore - id は英字もしくはアンダースコアで始まらなくてはいけません - - - Invalid empty ID - 空の id は無効です - - - ID illegally masks global JavaScript property - id はグローバルな JavaScript のプロパティを不正に隠しています - - - IDs must contain only letters, numbers, and underscores - id には英数字およびアンダースコアのみ使用できます - - - Invalid component id specification - 無効なコンポーネント id が指定されています - - - Illegal property name - プロパティの名前が無効です - - - Invalid alias location - 無効なエイリアスのパス - - - Signal names cannot begin with an upper case letter - シグナルの名前を大文字から始めることはできません - - - - CameraBinRecorder - - QMediaRecorder::pause() is not supported by camerabin2. - camerabin2 は QMediaRecorder::pause() をサポートしていません。 - - - Recording permissions are not available - 録画の権限がありません - - - Service has not been started - サービスが開始されていません - - - - Object - - Method names cannot begin with an upper case letter - メソッドの名前を大文字から始めることはできません - - - Duplicate property name - プロパティの名前が重複しています - - - Duplicate method name - メソッドの名前が重複しています - - - Duplicate default property - デフォルトプロパティが重複しています - - - Duplicate signal name - シグナルの名前が重複しています - - - Property names cannot begin with an upper case letter - プロパティの名前を大文字から始めることはできません - - - Property value set multiple times - 複数回プロパティに値を割り当てています - - - Illegal method name - メソッドの名前が無効です - - - - QNetworkSessionPrivateImpl - - The session was aborted by the user or system. - このセッションはユーザもしくはシステムによって停止されました。 - - - The requested operation is not supported by the system. - 要求された操作はこのシステムではサポートされていません。 - - - Roaming was aborted or is not possible. - ローミングは停止されたか利用できません。 - - - The specified configuration cannot be used. - この設定は利用できません。 - - - Unknown session error. - 未知のセッションエラーです。 - - - - AVFMediaRecorderControlIOS - - Non-writeable file location - 書き込み不可能なファイルのパスです - - - Invalid output file URL - 出力ファイルのURLが無効です - - - File already exists - ファイルは既に存在します - - - Failed to start recording - 録画の開始に失敗しました - - - Recording pause not supported - 録画時の一時停止はサポートされていません - - - - QQmlObjectCreator - - Cannot assign object type %1 with no default method - デフォルトメソッドの無い型 %1 のオブジェクトは割り当てできません - - - Cannot connect mismatched signal/slot %1 %vs. %2 - 型の合わないシグナルとスロット(%1 %vs %2)を接続することはできません - - - Cannot assign value %1 to property %2 - プロパティ %2 へ値 %1 を割り当てできません - - - Cannot set properties on %1 as it is null - %1 のプロパティが空のため値を代入できません - - - Cannot assign an object to signal property %1 - オブジェクトをシグナルプロパティ %1 に割り当てることはできません - - - Composite Singleton Type %1 is not creatable - Composite Singleton な型 %1 が作成できません - - - Cannot assign object to read only list - オブジェクトを読込専用リストに割り当てることはできません - - - Cannot assign primitives to lists - プリミティブをリストに割り当てできません - - - Unable to create object of type %1 - %1 型のオブジェクトは作成できません - - - Cannot assign object to interface property - オブジェクトをインターフェースプロパティに割り当てることはできません - - - - QQmlRewrite - - Signal uses unnamed parameter followed by named parameter. - シグナルは名前付きの引数の後に無名の引数を使用しています。 - - - Signal parameter "%1" hides global variable. - シグナルの引数 "%1" がグローバル変数を隠しています。 - - - - QPlaylistFileParser - - %1 does not exist - %1 が存在しません - - - Empty file provided - ファイルが空です - - - invalid line in playlist file - プレイリストに無効な行があります - - - %1 playlist type is unknown - プレイリスト %1 の形式が不明です - - - - QQuickPropertyChanges - - Cannot assign to read-only property "%1" - 読込専用のプロパティ "%1" へは割り当てできません - - - PropertyChanges does not support creating state-specific objects. - PropertyChanges は状態特有のオブジェクトの作成をサポートしていません。 - - - Cannot assign to non-existent property "%1" - 存在しないプロパティ "%1" へは割り当てできません - - - - QWindowsDirect2DIntegration - - 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.%2.%3.%4. The Direct2D version on this system is %5.%6.%7.%8. - システムの Direct2D のバージョンが古すぎるため、direct2d プラットフォームプラグインを読み込めません。このプラットフォームプラグインにはプラットフォーム更新プログラムを適用した Windows 7 SP1 以降が必要です。 - -最低動作環境となる Direct2D のバージョン: %1.%2.%3.%4、システムの Direct2D のバージョン: %5.%6.%7.%8。 - - - Cannot load direct2d platform plugin - direct2d プラットフォームプラグインをロードできません - - - - QLocalServer - - %1: Name error - %1: 名前の解決に失敗 - - - %1: Unknown error %2 - %1: 未知のエラー %2 - - - %1: Permission denied - %1: 許可されていません - - - %1: Address in use - %1: アドレスは既に使用されています - - - - QQuickItemView - - Delegate must be of Item type - デリゲートは Item の派生クラスである必要があります - - - ItemView is an abstract base class - ItemView は抽象クラスです - - - - QQuickPathView - - Delegate must be of Item type - デリゲートは Item の派生クラスである必要があります - - - - QQuickRepeater - - Delegate must be of Item type - デリゲートは Item の派生クラスである必要があります - - - - AudioContainerControl - - RAW (headerless) file format - RAW(ヘッダなし)ファイル形式 - - - WAV file format - WAV ファイル形式 - - - - QAndroidMediaContainerControl - - MPEG4 media file format - MPEG4 メディアファイル形式 - - - AMR WB file format - AMR WB ファイル形式 - - - AMR NB file format - AMR NB ファイル形式 - - - 3GPP media file format - 3GPP メディアファイル形式 - - - - QNetworkReply - - Network session error. - ネットワークセッションエラー。 - - - Protocol "%1" is unknown - プロトコル "%1" はサポートされていません - - - backend start error. - バックエンド開始時のエラー。 - - - Background request not allowed. - バックグランドでの要求は許可されていません。 - - - Error transferring %1 - server replied: %2 - %1 転送中のエラー。サーバーの応答: %2 - - - Temporary network failure. - 一時的なネットワークの失敗。 - - - - QMediaPlayer - - Attempting to play invalid Qt resource - 無効な Qt リソースを再生しようとしています - - - The QMediaPlayer object does not have a valid service - QMediaPlayer には有効なサービスがありません - - - - QQuickFlipable - - front is a write-once property - front は一度のみ書き込み可能なプロパティです - - - back is a write-once property - back は一度のみ書き込み可能なプロパティです - - - - QGstreamerImageCaptureControl - - Not ready to capture - キャプチャの準備ができていません - - - - QQuickParentAnimation - - Unable to preserve appearance under non-uniform scale - 不均等な拡大/縮小を伴う外観は保持できません - - - Unable to preserve appearance under complex transform - 複雑な変換を伴う外観は保持できません - - - Unable to preserve appearance under scale of 0 - scale が 0 となる変換を伴う外観は保持できません - - - - QQuickParentChange - - Unable to preserve appearance under non-uniform scale - 不均等な拡大/縮小を伴う外観は保持できません - - - Unable to preserve appearance under complex transform - 複雑な変換を伴う外観は保持できません - - - Unable to preserve appearance under scale of 0 - サイズが0に縮小される変換を伴う外観は保持できません - - - - QGuiApplication - - QT_LAYOUT_DIRECTION - LTR - - - - QProgressDialog - - Cancel - キャンセル - - - - QQmlTypeCompiler - - Element is not creatable. - 作成可能な要素ではありません。 - - - Composite Singleton Type %1 is not creatable. - Composite Singleton な型 %1 が作成できません。 - - - - QImageWriter - - Unsupported image format - サポートされていない画像形式です - - - Device not writable - デバイスに書き込めません - - - Unknown error - 未知のエラー - - - Device is not set - デバイスがセットされていません - - - - QQuickTextUtil - - Could not load cursor delegate - カーソルデリゲートが読み込みできません - - - %1 does not support loading non-visual cursor delegates. - %1 は可視化できないカーソルデリゲートの読み込みをサポートしていません。 - - - - QInputMethod - - InputMethod is an abstract class - InputMethod は抽象クラスです - - - - MAC_APPLICATION_MENU - - Hide Others - ほかを隠す - - - Quit %1 - %1 を終了 - - - About %1 - %1 について - - - Preferences... - 設定... - - - Services - サービス - - - Hide %1 - %1 を隠す - - - Show All - すべて表示 - - - - QTDSDriver - - Unable to open connection - 接続を開けません - - - Unable to use database - データベースを使用できません - - - - QQuickAccessibleAttached - - Accessible is only available via attached properties - Accessible はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - AVFMediaPlayerSession - - Failed to load media - メディアの読み込みに失敗しました - - - - QMediaPlaylist - - The file could not be accessed. - ファイルにアクセスできませんでした。 - - - Playlist format is not supported. - サポートされていないプレイリストの形式です。 - - - Could not add items to read only playlist. - 読み込み専用のプレイリストにはアイテムを追加できません。 - - - Playlist format is not supported - サポートされていないプレイリストの形式です - - - - QQmlConnections - - Connections: script expected - Connections: スクリプトを指定してください - - - Connections: nested objects not allowed - Connections: オブジェクトのネストは許可されていません - - - Cannot assign to non-existent property "%1" - 存在しないプロパティ "%1" へは割り当てできません - - - Connections: syntax error - Connections: 構文エラー - - - - QCamera - - The camera service is missing - カメラサービスがありません - - - - QPrintPropertiesDialog - - Job Options - ジョブオプション - - - Printer Properties - プリンタのプロパティ - - - - QGstreamerRecorderControl - - Not compatible codecs and container format. - 互換性のないコーデックおよびコンテナ形式です。 - - - Service has not been started - サービスが開始されていません - - - - QAndroidAudioEncoderSettingsControl - - Adaptive Multi-Rate Wideband (AMR-WB) audio codec - 広帯域用適応多重レート(AMR-WB)音声コーデック - - - AAC Low Complexity (AAC-LC) audio codec - AAL-LC 音声コーデック - - - Adaptive Multi-Rate Narrowband (AMR-NB) audio codec - 狭帯域用適応多重レート(AMR-NB)音声コーデック - - - - QPluginLoader - - The plugin was not loaded. - そのプラグインはロードされていません。 - - - Unknown error - 未知のエラー - - - - QQnxFilePicker - - Pick a file - ファイルの選択 - - - - QCameraImageCapture - - Device does not support images capture. - デバイスが画像のキャプチャをサポートしていません。 - - - - CloseButton - - Close Tab - タブを閉じる - - - - QQuickApplication - - Application is an abstract class - Application は抽象クラスです - - - - QPSQLResult - - Unable to prepare statement - プリペアドステートメントを作成できません - - - Unable to create query - クエリーを作成できません - - - - QWinRTCameraImageCaptureControl - - Invalid photo data length. - 画像のデータ長が無効です。 - - - Camera not ready - カメラが準備できていません - - - Image saving failed - 画像の保存に失敗しました - - - - QGstreamerCaptureSession - - Could not create an audio source element - オーディオソースエレメントを作成できませんでした - - - Failed to build media capture pipeline. - メディアキャプチャパイプラインの構築に失敗しました。 - - - - QFileDevice - - No file engine available or engine does not support UnMapExtension - ファイルエンジンが見つからないか、UnMapExtension をサポートしていません - - - - QNetworkSession - - Invalid configuration. - 無効な設定です。 - - - - QNetworkAccessDataBackend - - Invalid URI: %1 - 無効なURIです: %1 - - - - QQuickAnimatedImage - - Qt was built without support for QMovie - Qt は QMovie のサポートを外してビルドされています - - - - QQuickXmlListModel - - "%1" duplicates a previous role name and will be disabled. - ロール名 "%1" が重複しているため、既存の同名のロールが無視されます。 - - - invalid query: "%1" - 無効なクエリー: "%1" - - - - QKeySequenceEdit - - Press shortcut - ショートカットを押してください - - - %1, ... - %1, ... - - - - QQuickKeysAttached - - Keys is only available via attached properties - Keys はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QGstreamerAudioInputSelector - - System default device - システムのデフォルトデバイス - - - - QGstreamerAudioEncode - - Raw PCM audio - PCM オーディオ - - - - BbCameraMediaRecorderControl - - Unable to retrieve audio input volume - オーディオ入力のボリュームを取得できません - - - Unable to set audio input volume - オーディオ入力のボリュームを設定できません - - - Unable to set mute status - ミュートの状態を設定できません - - - Unable to retrieve mute status - ミュートの状態を取得できません - - - - CameraBinSession - - Camera error - カメラでエラーが発生しました - - - - DSCameraSession - - Camera not ready for capture - カメラはキャプチャする準備ができていません - - - Could not save image to file. - 画像をファイルに保存できませんでした。 - - - - QNetworkAccessDebugPipeBackend - - Socket error on %1: %2 - %1 のソケットにおいてエラーが発生しました: %2 - - - Remote host closed the connection prematurely on %1 - リモートホスト %1 との接続が通信の終了前に切断されました - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - QNetworkAccessFileBackend - - Request for opening non-local file %1 - 非ローカルファイル %1 をオープンするよう要求されましたが、ローカルファイルのみオープンできます - - - Read error reading from %1: %2 - %1 の読み込み時にエラーが発生しました: %2 - - - Cannot open %1: Path is a directory - %1 を開けません。指定されたパスはディレクトリです - - - Error opening %1: %2 - %1 のオープン時にエラーが発生しました: %2 - - - Write error writing to %1: %2 - %1 への書き込み時にエラーが発生しました: %2 - - - - AVFImageCaptureControl - - Could not open destination file: -%1 - 保存先のファイルを開けませんでした: -%1 - - - Camera not ready - カメラが準備できていません - - - - QHostInfo - - No host name given - ホストネームが与えられていません - - - Unknown error - 未知のエラー - - - - QGstreamerImageEncode - - JPEG image encoder - JPEG 画像エンコーダ - - - - QQmlEnumTypeResolver - - Invalid property assignment: "%1" is a read-only property - 無効なプロパティの値: "%1" は読込専用のプロパティです - - - - AVFImageEncoderControl - - JPEG image - JPEG 画像 - - - - BbImageEncoderControl - - JPEG image - JPEG 画像 - - - - CameraBinImageEncoder - - JPEG image - JPEG 画像 - - - - QAndroidImageEncoderControl - - JPEG image - JPEG 画像 - - - - QWinRTImageEncoderControl - - JPEG image - JPEG 画像 - - - - BbCameraVideoEncoderSettingsControl - - No compression - 非圧縮 - - - AVC1 compression - AVC1 圧縮 - - - H264 compression - H264 圧縮 - - - - AVFCameraSession - - Runtime camera error - 実行時のカメラエラー - - - - QQmlDelegateModel - - The maximum number of supported DelegateModelGroups is 8 - DeleGateModelGroups がサポートする最大数は 8 です - - - The group of a DelegateModel cannot be changed within onChanged - DelegateModel のグループを onChanged の中で変更することはできません - - - The delegate of a DelegateModel cannot be changed within onUpdated. - DelegateModel の delegate を onUpdated の中で変更することはできません。 - - - - QNetworkReplyImpl - - Operation canceled - 操作がキャンセルされました - - - - QQuickEnterKeyAttached - - EnterKey attached property only works with Items - アタッチされたプロパティ EnterKey は Item およびその派生クラスでのみ利用できます - - - EnterKey is only available via attached properties - EnterKey はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QQuickLoader - - setSource: value is not an object - setSource: オブジェクト以外の値は挿入できません - - - - qmlRegisterType - - Cannot install %1 '%2' into unregistered namespace '%3' - %1 '%2' を未登録の名前空間 '%3' にはインストールできません - - - Invalid QML %1 name "%2" - QML %1 の名前 "%2" が無効です - - - Cannot install %1 '%2' into protected namespace '%3' - %1 '%2' を保護された名前空間 '%3' にはインストールできません - - - Cannot install %1 '%2' into protected module '%3' version '%4' - %1 '%2' を保護されたモジュール '%3' バージョン '%4' へインストールできません - - - - AVFCameraControl - - Requested capture mode is not supported - 要求されたキャプチャモードはサポートされていません - - - - QQuickWindowQmlImpl - - Conflicting properties 'visible' and 'visibility' for Window '%1' - ウィンドウ '%1' で 'visible' と 'visibility' プロパティが衝突しています - - - Conflicting properties 'visible' and 'visibility' - 'visible' と 'visibility' プロパティが衝突しています - - - - QQuickViewTransitionAttached - - ViewTransition is only available via attached properties - ViewTransition はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QStateMachine - - Missing default state in history state '%1' - ヒストリーステート '%1' にデフォルトステートが見つかりません - - - Unknown error - 未知のエラー - - - Missing initial state in compound state '%1' - 複合ステート '%1' に初期ステートが見つかりません - - - No common ancestor for targets and source of transition from state '%1' - ステート '%1' からの遷移のソースおよびターゲットに共通した祖先がありません - - - - CameraBinImageCapture - - Camera not ready - カメラが準備できていません - - - - QMdiArea - - (Untitled) - (タイトルなし) - - - - QApplication - - Executable '%1' requires Qt %2, found Qt %3. - 実行可能ファイル '%1' には Qt %2 が必要ですが Qt %3 が見つかりました。 - - - Incompatible Qt Library Error - 互換性のない Qt ライブラリエラー - - - - QQnxFileDialogHelper - - All files (*.*) - すべてのファイル(*.*) - - - - QGstreamerCameraControl - - State not supported. - サポートされていない状態です。 - - - - QQuickDragAttached - - Drag is only available via attached properties - Drag はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QQuickXmlListModelRole - - An XmlRole query must not start with '/' - XmlRole のクエリーを '/' で始めてはいけません - - - - QQuickPaintedItem - - Cannot create instance of abstract class PaintedItem - 抽象クラス PaintedItem のインスタンスは作成できません - - - - QQuickBehavior - - Cannot change the animation assigned to a Behavior. - Behavior へ割り当てられたアニメーションは変更できません。 - - - - AudioEncoderControl - - Linear PCM audio data - リニアPCM音声データ - - - - QQuickOpenGLInfo - - OpenGLInfo is only available via attached properties - OpenGLInfo はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QQuickKeyNavigationAttached - - KeyNavigation is only available via attached properties - KeyNavigation はアタッチされたプロパティ(Attached Property: 型名.プロパティ名)の形式でのみ利用できます - - - - QCocoaTheme - - Don't Save - 保存しない - - - - QDeclarativeAudio - - volume should be between 0.0 and 1.0 - ボリュームは 0.0 から 1.0 の間の値で指定してください - - - - QQuickAnchorAnimation - - Cannot set a duration of < 0 - 負の値はアニメーション時間として設定できません - - - - QQuickPathAnimation - - Cannot set a duration of < 0 - 負の値はアニメーション時間として設定できません - - - - QQuickPauseAnimation - - Cannot set a duration of < 0 - 負の値はアニメーション時間として設定できません - - - - QQuickPropertyAnimation - - Cannot set a duration of < 0 - 負の値はアニメーション時間として設定できません - - - - QDnsLookup - - Operation cancelled - 操作がキャンセルされました - - - - QGstreamerPlayerControl - - Attempting to play invalid user stream - 無効なユーザストリームを再生しようとしています - - - - QAudioDecoder - - The QAudioDecoder object does not have a valid service - QAudioDecoder には有効なサービスがありません - - - - QTcpServer - - Operation on socket is not supported - このソケットへのこの操作はサポートされていません - - - diff --git a/LedOK/translations/qt_ko.qm b/LedOK/translations/qt_ko.qm new file mode 100644 index 0000000..d3ed0dd Binary files /dev/null and b/LedOK/translations/qt_ko.qm differ diff --git a/LedOK/translations/qt_lv.qm b/LedOK/translations/qt_lv.qm new file mode 100644 index 0000000..cecea3e Binary files /dev/null and b/LedOK/translations/qt_lv.qm differ diff --git a/LedOK/translations/qt_pl.qm b/LedOK/translations/qt_pl.qm new file mode 100644 index 0000000..b219a7f Binary files /dev/null and b/LedOK/translations/qt_pl.qm differ diff --git a/LedOK/translations/qt_pt.qm b/LedOK/translations/qt_pt.qm new file mode 100644 index 0000000..6fabd0e Binary files /dev/null and b/LedOK/translations/qt_pt.qm differ diff --git a/LedOK/translations/qt_ru.qm b/LedOK/translations/qt_ru.qm new file mode 100644 index 0000000..16f45b4 Binary files /dev/null and b/LedOK/translations/qt_ru.qm differ diff --git a/LedOK/translations/qt_sk.qm b/LedOK/translations/qt_sk.qm new file mode 100644 index 0000000..893c55d Binary files /dev/null and b/LedOK/translations/qt_sk.qm differ diff --git a/LedOK/translations/qt_tr.qm b/LedOK/translations/qt_tr.qm new file mode 100644 index 0000000..9120adf Binary files /dev/null and b/LedOK/translations/qt_tr.qm differ diff --git a/LedOK/translations/qt_uk.qm b/LedOK/translations/qt_uk.qm new file mode 100644 index 0000000..e091f5b Binary files /dev/null and b/LedOK/translations/qt_uk.qm differ diff --git a/LedOK/translations/qt_zh_CN.qm b/LedOK/translations/qt_zh_CN.qm new file mode 100644 index 0000000..796ebdd Binary files /dev/null and b/LedOK/translations/qt_zh_CN.qm differ diff --git a/LedOK/translations/qt_zh_TW.qm b/LedOK/translations/qt_zh_TW.qm new file mode 100644 index 0000000..be15851 Binary files /dev/null and b/LedOK/translations/qt_zh_TW.qm differ diff --git a/LedOK/translations/app_en.ts b/LedOK/ts/app_en.ts similarity index 87% rename from LedOK/translations/app_en.ts rename to LedOK/ts/app_en.ts index 7ec4d1a..09b4ac3 100644 --- a/LedOK/translations/app_en.ts +++ b/LedOK/ts/app_en.ts @@ -56,997 +56,997 @@ CtrlAdvancedPanel - + Advanced Advanced - + Screen Width(pixel) Screen Width(pixel) - + Width Width - - + + Height Height - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + Set Set - + Alias Alias - + Web Server Address: Web Server Address: - - www.m2mled.net - - - - - www.ledaips.com - - - - - https://www.taxihub.cn:2340 - - - - - https://www.ledaips.com:2340 - - - - - https://www.36taxi.com:2340 - - - - - www.tlzxled.com - - - - + MCU Uploading - + + Setting + + + + Traffic screen settings - + Setting protocol ... - + Set protocol - + Getting protocol ... - + Get protocol - - + + Port - + Realtimer Server Address: Realtimer Server Address: - + Firmware Management - + update or uninstall - + Clear Clear - + Check Apk Check Apk - + Uninstall Uninstall - + Running check Running check - + Restart Restart - + Check Log Check Log - + Start LedSet4 Start LedSet4.0 (Apk Display2.0 and higher) - + Open ADB Open ADB debugging function - + Post Custom JSON Post Custom JSON - - - - - - - - + + + + + + Clear Program Clear Program - + www.ledokcloud.com/realtime - + Config Config - + Refresh Refresh - + Restore to default Restore to default - + Taxi top screen configuration Taxi top screen configuration - - + + Service:High Out of service:Low Service:High Out of service:Low - - + + Service:Low Out of service:High Service:Low Out of service:High - + Binding *.ic account indentity voucher Binding *.ic account indentity voucher - + Rotate Rotate - + Min brightness Min brightness - - - + + + Readback Readback - + Send Send - + Max brightness Max brightness - - + + SetScreenSize Set Screen Size - - - - - + + + + + Success Success - + Compant ID: Company ID - + Compant ID Company ID - + InputWebServerAddressTip Please enter web server address - + InputCompanyIdTip Please enter company ID - - Do you want to modify webserveraddress and companyId? - Are you sure you want to configure the server address and company ID? - - - - + + SetOnlineAddr Set Web server address - - + + ClearRealtimeServer Clear - - + + SetRealtimeServer Set realtimer address - + Tip Info Tip Info - - + + RestartAndroid Restart - - + + running running - - + + no running no running - + Check Apk Version Check Apk Version - - + + UninstallSoftware Uninstall - - + + Check apk running status - - + + OpenAdb Open ADB debugging function - + indentity voucher (*.ic) indentity voucher (*.ic) - - - - - + + + + + InvokeTaxiAppFunction Binding certificate - - + + AliIotSetting - + Software Version Info - + Package - + Version - - + + Package name is null - + Clearing Program - - - - + + Timeout Timeout - - - - + + + + Failed - + Getting Log - - - - - - - - - - - - - + + + + + + + + + + + + + Error Error - + Setting Timing Reboot - + Set Timing Reboot - + Getting Timing Reboot - + Get Timing Reboot - + totalResolution FPGA total resoltuion - + strCurDisplayResolution Cur display resolution - - + + File not exist - + Getting Player State - - - + + + Get Player State - - + + Player State - - + + This operation will clear current program. + + + + + Do you want to continue? + + + + + Cannot Open File - + Uploading - + Update Update - - + + Set Display Mode - - + + Get Display Mode - - + + Set Screen Offset - - + + Get Screen Offset - + Open file Failed Open file Failed - + Setting Wallpaper - - + + Set Wallpaper - + System Updating - - + + System Update - + Getting MCU Version - - + + MCU Version - + Select File Select File - + Setting player background - - + + Set player background - + Clearing player background - - - - - - - - + + + + + + + + Clear player background - - + + GetScreenRotation Get Screen Rotation - + + + + Charging Station + + + + Setting Baud Rate - + Set Baud Rate - + Getting Baud Rate - + Get Baud Rate - + + Text is empty - + + Json Parse Error - + + Json isn't an Object - + + Info + + + + Setting card work mode ... - + Set card work mode - + Getting card work mode ... - + Get card work mode - + Input password Input password - + Change Password Change Password - + Resolution Config - + Full screen - + Part - + Display Mode - + Screen Position - + Offset - + Hidden Settings - + Click right button to hide - - + + Update MCU - + Get MCU Version - + Baud Config - + Model - + Uart - + Baud - - - - - - - + + + + + + + + Get - + Timing Reboot - + Protocol - + Server - + Client - - + + SetScreenRotation Set screen rotation - - + + SetMinBrightness Set min brightness value - - + + SetMaxBrightness Set maximum brightness value - - + + GetMinBrightness Get min brightness - - + + GetMaxBrightness Get maximum brightness - - + + Card work mode - - + + SetSpecialResolution Set Special Resolution - - + + GetSpecialResolution Get Special Resolution - - + + CleanDisplayScreenSize Restore to default relolution - - + + SetHighForBusy Set level for busy - - + + GetStateForBusy Get level of busy - - + + SetCardAlias Set alias - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - + + + + + - - - - - + + + + + + + + + + + Tip Tip - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - + + + + + + + + + + NoSelectedController Please select screen first - + InputWidthTip Please enter the correct width pixel value - + InputHeightTip Please enter the correct height pixel value - + Password is error Password is error @@ -1054,138 +1054,138 @@ CtrlBrightPanel - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + Tip Tip - - - - - - - - - + + + + + + + + + NoSelectedController Please select screen first - - + + SetBrightnessSensitivity Set brightness sensitivity - - + + GetBrightnessSensitivity Get brightness sensitivity - - + + SetMinBrightness Set min brightness value - - + + GetMinBrightness Get min brightness - - + + NeedSelectSensorTypeTip Please select sensor type first - + Open file dialog - + Not found current worksheet - - + + SensorBrightnessTable Set sensor brightness table - + GetSensorBrightnessTable Get sensor bright table - + no sensorBrightnessTable no sensor brightnessTable in controller - + Save file Save file - - + + GetCurrentSensorBrightness Get Current Brightness - - + + SetBrightness Set brightness - + GetBrightness Get brightness - + Brightness Screen Brightness - - + + BrightnessSchedule (*.bjs) - + Import File - + Save File Save file @@ -1216,15 +1216,15 @@ Get brightness schedule - - + + Error Error - Brightness Configuration - Brightness configuration + Brightness Config + @@ -1350,33 +1350,33 @@ CtrlHdmiPanel - + HDMI Configuration Video source configuration - + Manual Manual - + Schedule Schedule - - + + Tip Tip - - + + NoSelectedController Please select screen first @@ -1398,127 +1398,127 @@ Readback video source - + Import File - + Save File Save file - - + + Sync Schedule - - + + SetTimingHdmiInTask Set video source form HDMI-IN schedule task - + GetTimingHdmiInTask Get video source form HDMI-IN schedule task - + Async Async - + Set Set - - + + Readback Readback - + Start Time Start Time - + End Time End Time - + SUN SUN - + MON MON - + TUE TUE - + WED WED - + THU THU - + FRI FRI - + SAT SAT - + Add Add - - + + Apply Apply - + Clear Clear - + Delete Delete - + Import Import - + Export Export - + By default, the asynchronous content is played, and the synchronous signal content is played in the fixed time period By default, asynchronous content is played, and synchronous hdmi-in port input content is played in a fixed time period @@ -2088,206 +2088,206 @@ CtrlPowerPanel - - - + + + Off - - - + + + On On - - - - - + + + + + Tip Tip - - - - - + + + + + NoSelectedController Please select screen first - - + + SetScreenOn Set Screen On - - + + SetScreenOff Set Screen Off - - + + IsScreenOn Read power status - + Import File - - + + PowerSchedule (*.pjs) PowerSchedule (*.pjs) - + Save File Save file - - + + SetTimingScreenTask Set schedule task of screen power - + GetTimingScreenTask Get schedule task of screen power - + Power Configuration Power configuration - + Manual Manual - + Schedule Schedule - + Power Power - - + + Readback Readback - + Start Time Start Time - + End Time End Time - + SUN SUN - + MON MON - + TUE TUE - + WED WED - + THU THU - + FRI FRI - + SAT SAT - + Add Add - + Apply Apply - + Clear Clear - + Delete Delete - + Import Import - + Export Export - + It is power off state outside the schedule time period It is power off state outside the schedule time period - + Clear Schedule Cancel Schedule - + Tip Info Tip Info - + Clear schedule task? Clear schedule task? - - + + CleanTimingScreenTask Clear schedule task @@ -2295,131 +2295,131 @@ CtrlPwdPanel - + Set Password Set Password - + Original password Original password - + original password original password - - + + New password New password - + Repeat new password Repeat new password - - - - + + + + Set encryption Set encryption - + Cancel encryption Cancel encryption - + Enter again Enter again - - - - - - - - - + + + + + + + + + Tip Tip - - + + NoSelectedController Please select screen first - - + + InputOriginalPasswordTip Please input original password - + InputNewPasswordTip Please input new password - + InputRepeatPasswordTip Please input repeat password - + InputRepeatPasswordNotSameTip The two passwords are inconsistent - + Tip Info Tip Info - + After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? - - - - + + + + SetControllerPassword Set password - - + + Error Error - - + + Success Success - - - + + + Modify password Modify password - - - - + + + + OriginalPasswordErrorTip The original password is wrong @@ -2918,178 +2918,178 @@ CtrlVolumePanel - - - - + + + + Tip Tip - - - - + + + + NoSelectedController Please select screen first - - + + SetVolume Set Volume - - + + GetVolume Get Volume - + Import File - - + + Volume Schedule (*.vols) - + Save File Save file - - + + SetAutoVolumeTask Set volume schedule - + GetAutoVolumeTask Get volume schedule - + Volume Control Volume Control - + Manual Manual - + Schedule Schedule - + Volume Volume - + Set Set - - + + Readback Readback - + Default volume Default volume - + Add Add - + Clear Clear - + Delete Delete - + Import Import - + Export Export - + Volume value Volume value - + Start Time Start Time - + End Time End Time - + SUN SUN - + MON MON - + TUE TUE - + WED WED - + THU THU - + FRI FRI - + SAT SAT - + Apply Apply - + Default volume tip Reminder: the display screen is the default brightness outside the fixed time period @@ -3097,326 +3097,301 @@ Def - - - - - - - + + + + + + + Device replied - - + + - + Success Success - - + + Fail Fail - - DeviceItem - - - GetScreenDetailInfo - Get more detail info - - - - ReadbackPic - Screenshot - - - - - Error - Error - - - - Input password - Input password - - - - VerifyPassword - Verify Password - - - - GetScreenshotFull - readback screenshot - - - - Tip Info - Tip Info - - - - password is wrong - password is wrong - - - - On - ON - - - - Off - OFF - - DevicePanel - - + + All ALL ALL - + Online Online Online - + Refresh Refresh Refresh - - + + Specify IP Specify IP Specify IP - - - - + + + + Current Screen Current screen - - + + none none - + Current Brightness - + Android Version - + FPGA Version FPGA Version - + Brightness Level Brightness Level - + Android OS Resolution Android OS Resolution - + Firmware Version Firmware Version - - - - + + + + Player Version - + Detail Info Detail Info - + Getting - + Specify IP list - + Search Search - - + + Attention Attention - - + + Please input IP address! Please input IP address! - + Cancel Cancel - + Screen ID Screen ID - - Screen IP - Screen IP - - - + Screen Size Screen Size - + Alias + - readback pic + Screenshot Screenshot - + + On ON - + + Off OFF - + Brightness Adj. Brightness Adj. - + Power Control Power Control - + Net Config Network Config - + Time Sync Time Sync - + Video source Video Source - + Password Password - + Advanced Advanced - + Volume Adj. Volume - + Test Test - - + + Multi screen operation Multi screen operation - - + + selected num Selected number - - + + Clear Clear - + More Info More Info - + Screen Brightness Screen Brightness - + Power Status Power Status - + Security encryption + + + Getting + + + + + + Error + Error + + + + Input password + Input password + + + + VerifyPassword + Verify Password + + + + Tip Info + Tip Info + + + + password is wrong + password is wrong + EAClock @@ -3531,73 +3506,73 @@ EBase - + Area Area(px) - + X X - + Y Y - + W W - + H H - + Border Border - - + + None None - + Effect Effect - + Rotate Rotate - + Blink Blink - + Speed Speed - + Slow Slow - + Moderate Moderate - + Fast Fast @@ -3745,159 +3720,164 @@ EEnviron - - - - - - - + + + + + + + + + + + + + + north north - - - - - - - + + + + + + + + + + + + + + east east - - - - - - - + + + + + + + + + + + + + + south south - - - - - - - + + + + + + + + + + + + + + west west - - + Temperature Temperature - - + Humidity Humidity - - + Noise Noise - + Wind Speed Wind Speed - + Wind Direction Wind Direction - + Basic Properties Basic properties - + Title Title - + Compensation Compensation - - Wind speed - Wind speed - - - - Wind direction - Wind direction - - - + Left Left - + Center Center - + Right Right - + Single scroll Single scroll - + Speed Speed - + ms/pixel ms/pixel - + Back Color Back Color - + Play Properties - - Refresh Cycle - Refresh cycle - - - - min. - min. - - - + Play Duration Play Duration - + s s @@ -3905,37 +3885,37 @@ EGif - + Basic Properties Basic properties - + File File - + Select File Select File - + Play Properties - + Play Duration Play Duration - + s s - + Play Times Play Times @@ -3943,73 +3923,73 @@ EMultiWin - + Please add media on the right Please add media on the right. You can add multiple different media. The LED display will play in the order of the list - + Media List Media List - - - + + + Text Text - - - + + + Photo Photo - - - + + + Video Video - - - + + + Gif Gif - - - + + + DClock Clock - - - + + + AClock Analog Clock - - - + + + Select File Select File - - + + Environment Environmental Monitoring - - + + Timer Timer @@ -4017,113 +3997,113 @@ EPhoto - + Basic Properties Basic properties - + File File - + Select File Select File - + Image Read Error Image Read Error - + Play Properties - + Play Duration Play Duration - - + + s s - + Enter Style Entrance Effect - + None None - + Alpha_In ALPHA_IN - + Moving to left MOVING_TO_LEFT - + Moving to right MOVE_TO_RIGHT - + Moving to top MOVING_TO_TOP - + Move to bottom MOVE_TO_BOTTOM - + Zoom in ZOOM_IN - + Zoom in to left_bottom ZOOM_IN_LEFT_BOTTOM - + Zoom in to left_top ZOOM_IN_LEFT_TOP - + Zoom in to right_top ZOOM_IN_RIGHT_TOP - + Zoom in to right bottom ZOOM_IN_RIGHT_BOTTOM - + Rotate to right ROTATE_TO_RIGHT - + Rotate to left ROTATE_TO_LEFT - + Enter Duration Effect Duration @@ -4141,186 +4121,186 @@ Enter your text - + Basic Properties Basic properties - + Back Color Back Color - + Kerning Kerning - + Line Spacing Line Spacing - + PageCount: PageCount: - + page Page - + Import txt File - + Select File Select File - + Fail Fail - + Cannot Open File - + Play Properties - + Flip Flip - + Scroll Scroll - + Static Static - - - + + + Play Duration Play Duration - + Duration/Page Duration/Page - + Effect time effect duration - - + + Tip Info Tip Info - - + + Effect time cannot be longer than duration time Effect time cannot be longer than duration time - + s s - + Text Color - + Colorful Text - + Entrance Effect Entrance Effect - + no no - + random random - + right to left right to left - + bottom to top bottom to top - + left to right left to right - + top to bottom top to bottom - + Head-Tail Spacing Spacing - + Scroll Style Direction - + Right -> Left From right to left - + Bottom -> Top From bottom to top - + Left -> Right From left to right - + Top -> Bottom Frome top to bottom - + Scroll Speed Scrolling speed @@ -4328,87 +4308,87 @@ ETimer - + day Days - + hour Hours - + min Mins - + sec Secs - + Basic Properties Basic properties - + Count Down Count Down - + Count Up Count Up - + Time Target Time - + Day Day - + Hour Hour - + Min Min - + Sec Sec - + Multiline Multiline - + Text Text - + Play Properties - + Play Duration Play Duration - + s s @@ -4416,54 +4396,54 @@ EVideo - + Basic Properties Basic properties - + File File - + Play Properties - + Play Duration Play Duration - + Select File Select File - + s s - + Play Times Play Times - + Video Transcoding - - + + Video Transcoding Progress - - + + Error Error @@ -4481,17 +4461,17 @@ EWeb - + Basic Properties Basic properties - + Play Duration Play Duration - + s s @@ -4522,67 +4502,67 @@ GenTmpThread - + MON MON - + TUE TUE - + WED WED - + THU THU - + FRI FRI - + SAT SAT - + SUN SUN - + AM AM - + PM PM - + day Days - + hour Hours - + min Mins - + sec Secs @@ -4590,7 +4570,7 @@ ImgDlg - + Screenshot @@ -4641,172 +4621,177 @@ MainWindow - + Language Language - + Help Help - - + + Check for updates Check for updates - - + + firmware manager Firmware management - - - + + + Preferences - - + + Info - - - + + + About About - - + + Setting Setting - + Software Update Software Update - + CurVersion CurVersion - + Latest Version - + Update Log - + The current version is already the latest version The current version is already the latest version - + Video compress to - + Video transcoding to - + Text antialiasing - + TextAntilaTip (Note: this option is suitable for screens with small spacing and large size. If this option is selected, the shadow on the edge of the text will be smooth; it is not recommended for small size screens and single and double color screens.) - + Width Split - + + Program Send Batch + + + + Hide Detect Button - + Show Lora Screen - + Download - + Fail Fail - + Cannot Save File - - - + + + Downloading updates Downloading updates - + Error Error - + Device Terminals - + Program Solutions - + Control Terminal Control - + Lora Screen - + Check card Detect - + Tip Info Tip Info - + RestoreLedCardIpByUdpTip This operation will fix all the control cards in the LAN that are not in the same network segment as the computer IP. Please be careful! @@ -4930,88 +4915,126 @@ PageListItem - + times Times - + Page name Program name - + New New - + Play times Play times - + Sources Repeat - + Audios - + Total Dur - - + + s s - + Select File Select File - + Duration - + Vol - + Valid Date Valid date - - + + Warning Warning - + Start Time can't be later than End Time - + End Time can't be earlier than Start Time - + Plan Plan + + PlanItemWgt + + + M + M + + + + Tu + Tu + + + + W + W + + + + Th + Th + + + + F + F + + + + Sa + Sa + + + + Su + Su + + PlayWin @@ -5033,12 +5056,12 @@ PlayerBackSendThread - + Open file failed Open file failed - + Read file failed Read file failed @@ -5059,37 +5082,37 @@ ProgCreateDlg - + Resolution Resolution - + Solution Information Solution Information - + Solution Name Solution Name - + Width Width - + Height Height - + Remarks Remarks - + 每段打折宽度 (用空格分隔) Each part width (split with space) @@ -5097,109 +5120,109 @@ ProgEditorWin - + Save Save - + Setting Setting - + Text Text - + Photo Photo - + Video Video - + Gif Gif - + Clock Clock - + Analog Clock Analog Clock - + Environment Environmental Monitoring - + Web Web page - + MuliContentWindow Multi material window - + In this window, a plurality of different program materials can be added and played according to the order of joining the list; In this window, a plurality of different program materials can be added and played according to the order of joining the list - + Timer Timer - + Demo Video - + Play - + Stop Stop - + Publish Publish - - - + + + Select File Select File - + program Program - + Add page Add page - + Copy page Copy page @@ -5210,7 +5233,7 @@ - + Tip Info Tip Info @@ -5220,127 +5243,120 @@ Are you sure you want to delete this program page? - + Move up Move up - + Move down Move down - + widget properties Widget properties - + Page properties Program properties - + Do you want to save the modifications? Do you want to save the modifications? - + Create Dir failed - + Saving... Saving... - + Success Success - + Convertering Convertering - + Generate preview data Generate preview data - - - + + + Error Error - + Rename fail when saving - + Remove Recursively fail when saving - - - Warning - Warning - ProgPanel - + New New - + Edit Edit - + Delete Delete - + Import Import - + Export Export - + Send Send - - + Publish Publish - - + Name Name @@ -5367,58 +5383,54 @@ - + Play - + Stop Stop - - + Resolution Resolution - - + File Size File Size - - + Last Modify Last Modified - - + USB Update - + Program name conflicted Program name conflicted - + Warning Warning - + You will delete the selected solution(s),are you sure? You will delete the selected solution(s),are you sure? - + Tip Info Tip Info @@ -5426,84 +5438,75 @@ ProgPortDlg - + Solution Name Solution Name - + Progress Progress - + Done Done + + QAbstractSocket + + + Socket operation timed out + + + QObject - + Setting up the LedOK Express... Setting up the LedOK Express... - - + Input password Input password - - VerifyPassword - Verify Password - - - - + Error Error - - Tip Info - Tip Info - - - - password is wrong - password is wrong - - - + USB Update Program - + Password Password - - + + Convertering Convertering - - + + Tip Tip - + No checked USB device No checked USB device - + please select usb device in list please select usb device in list @@ -5530,68 +5533,83 @@ SendProgramDialog - - + + Publish Publish - + success info - + Refresh Refresh - - Screen ID - Screen ID - - - + Alias - + Online Online - - Screen IP - Screen IP - - - + Screen Size Screen Size - + Security encryption - + Progress Progress - + Remarks Remarks - + This screen is encrypted This screen is encrypted - + + Waiting + + + + + Input password + Input password + + + + VerifyPassword + Verify Password + + + + Tip Info + Tip Info + + + + password is wrong + password is wrong + + + All ALL @@ -5599,7 +5617,7 @@ UpgradeApkDialog - + Update APK Update APK @@ -5614,123 +5632,67 @@ Upgrade - + Uninstall Uninstall - + check running state check running state - + Select Fpga Select Fpga - + Installing - + Refresh Refresh - - Cancel - Cancel - - - - Screen ID - Screen ID - - - + Alias - + Online Online - - Screen IP - Screen IP - - - + Security encryption - + Progress Progress - - xixunplayer - - - - - cardsystem - - - - - taxiapp - - - - - starter - - - - - connection - - - - - displayer - - - - - FPGA - FPGA - - - - update - - - - + State State - - + All ALL - + This screen is encrypted This screen is encrypted - + Select Online APK @@ -5741,71 +5703,79 @@ - + Name Name - + Size - + Create Time - + Please select a file - - - + + + Tip Tip - - Is upgrading now. Please wait - - - - + NoSelectedController Please select screen first - - + + File Read Fail + + + + + Downloading Online File - - + + + + + Error Error - + Online file is empty - + + File is empty + + + + Uploading - + Upload error - + Don't power off during this process @@ -5815,62 +5785,93 @@ - - Install success + + + Install Success - + Reminder - + Reminder: Uninstalling this program may cause the device to offline, cannot be found, lost configs and have a black screen. Please uninstall with caution! - + Do you want to continue? - + Uninstalling Uninstalling - + Uninstall error - + Uninstall success - + Check apk running status - + Check error - + Running Running - + Not running - + + Input password + Input password + + + + VerifyPassword + Verify Password + + + + Tip Info + Tip Info + + + + password is wrong + password is wrong + + + + Same version, needn't update + + + + + Install Failed + + + + The encrypted control card can be upgraded directly The encrypted control card can be upgraded directly @@ -5878,7 +5879,7 @@ WaitingDlg - + Success Success @@ -6087,65 +6088,4 @@ OpenPort COM failed - - wPlanItem - - - M - M - - - - Tu - Tu - - - - W - W - - - - Th - Th - - - - F - F - - - - Sa - Sa - - - - Su - Su - - - - wProgramPublishItem - - - Input password - Input password - - - - VerifyPassword - Verify Password - - - - Tip Info - Tip Info - - - - password is wrong - password is wrong - - diff --git a/LedOK/translations/app_ja.ts b/LedOK/ts/app_ja.ts similarity index 87% rename from LedOK/translations/app_ja.ts rename to LedOK/ts/app_ja.ts index f3883d1..9396dd6 100644 --- a/LedOK/translations/app_ja.ts +++ b/LedOK/ts/app_ja.ts @@ -56,997 +56,997 @@ CtrlAdvancedPanel - + Advanced 上級パラメータ - + Screen Width(pixel) 画面幅(ピクセル) - + Width - - + + Height 高さ - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + Set セット - + Alias 別名 - + Web Server Address: Webサーバのアドレス: - - www.m2mled.net - - - - - www.ledaips.com - - - - - https://www.taxihub.cn:2340 - - - - - https://www.ledaips.com:2340 - - - - - https://www.36taxi.com:2340 - - - - - www.tlzxled.com - - - - + MCU Uploading - + + Setting + + + + Traffic screen settings - + Setting protocol ... - + Set protocol - + Getting protocol ... - + Get protocol - - + + Port ポート - + Realtimer Server Address: Realtimerアドレス: - + Firmware Management ファームウェア管理 - + update or uninstall 更新またはアンインストール - + Clear クリア - + Check Apk APKを検出 - + Uninstall アンマウント - + Running check 運転状態モニタ - + Restart 再起動 - + Check Log ログを見る - + Start LedSet4 - + Open ADB ADBデバッグ機能を開く - + Post Custom JSON Post Custom JSON - - - - - - - - + + + + + + Clear Program 番組をクリア - + www.ledokcloud.com/realtime - + Config の設定 - + Refresh 更新 - + Restore to default 標準の値を復元 - + Taxi top screen configuration タクシートップ画面の設定 - - + + Service:High Out of service:Low 客がいます:高 客がいません:低 - - + + Service:Low Out of service:High 客がいます:低 客がいません:高 - + Binding *.ic account indentity voucher テーピングtaxihubプラットフォームのユーザーID証明書 - + Rotate 回転 - + Min brightness 最低輝度 - - - + + + Readback 読み戻し - + Send 送信 - + Max brightness 最高輝度 - - + + SetScreenSize スクリーンのピクセルサイズを設定 - - - - - + + + + + Success 成功 - + Compant ID: 会社ID: - + Compant ID 会社ID - + InputWebServerAddressTip Webサーバのアドレスを入力してください - + InputCompanyIdTip 会社IDを入力してください - - Do you want to modify webserveraddress and companyId? - 設定サーバアドレスと会社IDを確認しますか? - - - - + + SetOnlineAddr ウェブサーバのアドレスを設定 - - + + ClearRealtimeServer クリア - - + + SetRealtimeServer RealTimerアドレスを設定 - + Tip Info ヒント - - + + RestartAndroid 再起動 - - + + running 実行中 - - + + no running 実行されていません - + Check Apk Version チェック APK バージョン - - + + UninstallSoftware アンマウント - - + + Check apk running status APK運転状態監視 - - + + OpenAdb ADBデバッグ機能を開く - + indentity voucher (*.ic) 身分証明書(*.ic) - - - - - + + + + + InvokeTaxiAppFunction 証明書をバインド - - + + AliIotSetting - + Software Version Info - + Package - + Version バージョン - - + + Package name is null パッケージ名は空です - + Clearing Program プログラムクリア - - - - + + Timeout タイムアウト - - - - + + + + Failed 失敗 - + Getting Log ログを取得中 - - - - - - - - - - - - - + + + + + + + + + + + + + Error エラー - + Setting Timing Reboot スケジュール再起動を設定中 - + Set Timing Reboot スケジュール再起動の設定 - + Getting Timing Reboot スケジュール再起動を取得中 - + Get Timing Reboot スケジュール再起動の取得 - + totalResolution トータル解像度 - + strCurDisplayResolution 表示解像度 - - + + File not exist ファイルが存在しません - + Getting Player State プレーヤーの状態を取得しています - - - + + + Get Player State プレーヤーの状態の取得 - - + + Player State プレーヤーの状態 - - + + This operation will clear current program. + これにより、現在のプログラムが消去されます + + + + Do you want to continue? + 続行しますか? + + + + Cannot Open File ファイルのオープンに失敗しました - + Uploading アップロード中 - + Update 更新 - - + + Set Display Mode - - + + Get Display Mode - - + + Set Screen Offset - - + + Get Screen Offset - + Open file Failed ファイルのオープンに失敗しました - + Setting Wallpaper - - + + Set Wallpaper - + System Updating - - + + System Update - + Getting MCU Version - - + + MCU Version - + Select File ファイルを選択 - + Setting player background - - + + Set player background - + Clearing player background - - - - - - - - + + + + + + + + Clear player background - - + + GetScreenRotation 画面回転の取得 - + + + + Charging Station + じゅうでんぐい + + + Setting Baud Rate - + Set Baud Rate - + Getting Baud Rate - + Get Baud Rate - + + Text is empty - + + Json Parse Error - + + Json isn't an Object - + + Info + 情報 + + + Setting card work mode ... - + Set card work mode - + Getting card work mode ... - + Get card work mode - + Input password パスワードを入力 - + Change Password パスワード変更 - + Resolution Config 解像度設定 - + Full screen フルスクリーン - + Part セクション - + Display Mode 表示モード - + Screen Position - + Offset - + Hidden Settings - + Click right button to hide - - + + Update MCU - + Get MCU Version - + Baud Config - + Model - + Uart - + Baud - - - - - - - + + + + + + + + Get 得る - + Timing Reboot スケジュール再起動 - + Protocol プロトコル - + Server サービス - + Client クライアント - - + + SetScreenRotation 画面の回転を設定する - - + + SetMinBrightness 最小輝度値を設定します - - + + SetMaxBrightness 輝度最大値を設定 - - + + GetMinBrightness 輝度最小値を取得 - - + + GetMaxBrightness 輝度最大値を取得 - - + + Card work mode - - + + SetSpecialResolution 解像度を設定 - - + + GetSpecialResolution 読み込み解像度 - - + + CleanDisplayScreenSize デフォルトの解像度を復元 - - + + SetHighForBusy 客レベルの設定 - - + + GetStateForBusy ゲストレベルを取得 - - + + SetCardAlias エイリアスの設定 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - + + + + + - - - - - + + + + + + + + + + + Tip 提示 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - + + + + + + + + + + NoSelectedController 先に大きいスクリーンを選んでください - + InputWidthTip 正しい幅のピクセル値を入力してください - + InputHeightTip 正しい高さのピクセル値を入力してください - + Password is error パスワード @@ -1054,138 +1054,138 @@ CtrlBrightPanel - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 先に大きいスクリーンを選んでください - - + + SetBrightnessSensitivity 輝度センサ感度を設定する - - + + GetBrightnessSensitivity 明るさ感を得る - - + + SetMinBrightness 最小輝度値を設定します - - + + GetMinBrightness 輝度最小値を取得 - - + + NeedSelectSensorTypeTip センサータイプを選択してください - + Open file dialog - + Not found current worksheet - - + + SensorBrightnessTable 輝度センサ設定テーブルの設定 - + GetSensorBrightnessTable センサーブライトテーブル - + no sensorBrightnessTable コントロールカードに輝度設定表が見つかりませんでした - + Save file 保存 - - + + GetCurrentSensorBrightness 現在の明るさを取得する - - + + SetBrightness 輝度を設定する - + GetBrightness 輝度値を取得 - + Brightness スクリーン輝度 - + Import File インポートファイル - - + + BrightnessSchedule (*.bjs) - + Save File 保存 @@ -1216,14 +1216,14 @@ 取得タイミング輝度表 - - + + Error エラー - Brightness Configuration + Brightness Config 輝度の設定 @@ -1350,33 +1350,33 @@ CtrlHdmiPanel - + HDMI Configuration ビデオソースの設定 - + Manual 手動 - + Schedule スケジュール - - + + Tip 提示 - - + + NoSelectedController 先に大きいスクリーンを選んでください @@ -1398,127 +1398,127 @@ 同じ非同期モードを読み返す - + Import File インポートファイル - + Save File 保存 - - + + Sync Schedule 同期モードタイミングタスク - - + + SetTimingHdmiInTask 同期モードタイミングタスクの設定 - + GetTimingHdmiInTask 同期モードタイミングタスクの取得 - + Async アシュリン - + Set セット - - + + Readback 読み戻し - + Start Time 開始時間 - + End Time 終了時間 - + SUN 日曜日 - + MON 月曜日 - + TUE 火曜日 - + WED 水曜日 - + THU 木曜日 - + FRI 金曜日 - + SAT 土曜日 - + Add 追加 - - + + Apply 適用 - + Clear クリア - + Delete 削除 - + Import インポート - + Export 出力 - + By default, the asynchronous content is played, and the synchronous signal content is played in the fixed time period 非同期のコンテンツをデフォルトで再生し、同期のHMI-INポートに入力します @@ -2088,206 +2088,206 @@ CtrlPowerPanel - - - + + + Off 閉じる - - - + + + On 開く - - - - - + + + + + Tip 提示 - - - - - + + + + + NoSelectedController 先に大きいスクリーンを選んでください - - + + SetScreenOn 画面の電源を入れる - - + + SetScreenOff 画面の電源を切る - - + + IsScreenOn スイッチ状態を読み出します - + Import File インポートファイル - - + + PowerSchedule (*.pjs) スイッチパネルタイミング(*.pjs) - + Save File 保存 - - + + SetTimingScreenTask 画面タイミングスイッチタスクの設定 - + GetTimingScreenTask 画面タイミングスイッチタスクの取得 - + Power Configuration スイッチパネル制御 - + Manual 手動 - + Schedule スケジュール - + Power 電源 - - + + Readback 読み戻し - + Start Time 開始時間 - + End Time 終了時間 - + SUN 日曜日 - + MON 月曜日 - + TUE 火曜日 - + WED 水曜日 - + THU 木曜日 - + FRI 金曜日 - + SAT 土曜日 - + Add 追加 - + Apply 適用 - + Clear クリア - + Delete 削除 - + Import インポート - + Export 出力 - + It is power off state outside the schedule time period 定時の時間帯にはモニターがオンになり、他の時間はオフになります - + Clear Schedule タイミング指令をクリア - + Tip Info ヒント - + Clear schedule task? スケジュールのタスクをキャンセル? - - + + CleanTimingScreenTask スケジュールのタスクをキャンセル @@ -2295,131 +2295,131 @@ CtrlPwdPanel - + Set Password パスワードの設定 - + Original password 元のパスワード - + original password 元のパスワード - - + + New password 新しいパスワード - + Repeat new password 繰り返し入力 - - - - + + + + Set encryption 暗号化 - + Cancel encryption 暗号化を解除 - + Enter again 再入力 - - - - - - - - - + + + + + + + + + Tip 提示 - - + + NoSelectedController 先に大きいスクリーンを選んでください - - + + InputOriginalPasswordTip オリジナルのパスワードを入力してください - + InputNewPasswordTip 新しいパスワードを入力してください - + InputRepeatPasswordTip 新しいパスワードを繰り返して入力してください - + InputRepeatPasswordNotSameTip 二回入力したパスワードが一致しません - + Tip Info ヒント - + After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? パスワードを設定した後、パスワードを覚えて、それを記録してください。パスワードを忘れた場合は、デバイスが動作することができなくなります。この操作を続行しますか? - - - - + + + + SetControllerPassword 暗号化の設定 - - + + Error エラー - - + + Success 成功 - - - + + + Modify password パスワードを変更 - - - - + + + + OriginalPasswordErrorTip 元のパスワードが間違っています @@ -2918,178 +2918,178 @@ CtrlVolumePanel - - - - + + + + Tip 提示 - - - - + + + + NoSelectedController 先に大きいスクリーンを選んでください - - + + SetVolume 音量調節 - - + + GetVolume 現在の音量を取得 - + Import File インポートファイル - - + + Volume Schedule (*.vols) - + Save File 保存 - - + + SetAutoVolumeTask 設定タイミング音量表 - + GetAutoVolumeTask タイミング音量表の取得 - + Volume Control 音量調節 - + Manual 手動 - + Schedule スケジュール - + Volume 音量 - + Set セット - - + + Readback 読み戻し - + Default volume デフォルトの音量値 - + Add 追加 - + Clear クリア - + Delete 削除 - + Import インポート - + Export 出力 - + Volume value 音量値 - + Start Time 開始時間 - + End Time 終了時間 - + SUN 日曜日 - + MON 月曜日 - + TUE 火曜日 - + WED 水曜日 - + THU 木曜日 - + FRI 金曜日 - + SAT 土曜日 - + Apply 適用 - + Default volume tip 注意:時間帯以外の時間表示はデフォルトの明るさです @@ -3097,325 +3097,300 @@ Def - - - - - - - + + + + + + + Device replied デバイス応答 - - + + - + Success 成功 - - + + Fail 失敗 - - DeviceItem - - - GetScreenDetailInfo - 詳細 - - - - ReadbackPic - 回読画面 - - - - - Error - エラー - - - - Input password - パスワードを入力 - - - - VerifyPassword - パスワードの検証 - - - - GetScreenshotFull - 回読画面 - - - - Tip Info - ヒント - - - - password is wrong - パスワードエラー - - - - On - オン - - - - Off - オフ - - DevicePanel - - + + All トータル トータル - + Online オンライン中 - + Refresh 更新 更新 - - + + Specify IP 指定IP 指定IP - - - - + + + + Current Screen 現在のスクリーン - - + + none なし - + Current Brightness 現在の明るさ - + Android Version Androidバージョン - + FPGA Version FPGAバージョン - + Brightness Level 輝度レベル - + Android OS Resolution Androidの解像度 - + Firmware Version ファームウェアバージョン - - - - + + + + Player Version プレーヤーファームウェアバージョン - + Detail Info 詳細 - + Getting - + 取得中 - + Specify IP list 指定 IP リスト - + Search 検索 - - + + Attention 注意 - - + + Please input IP address! IPアドレスを入力してください! - + Cancel キャンセル - + Screen ID ターミナルID - - Screen IP - ターミナルIP - - - + Screen Size スクリーンサイズ - + Alias 別名 + - readback pic - 読み戻し + Screenshot + スクリーンショット - + + On オン - + + Off オフ - + Brightness Adj. 輝度設定 - + Power Control 電源コントロール - + Net Config ネット配置 - + Time Sync タイマ配置 - + Video source ビデオソース - + Password ひそかに言う - + Advanced 上級パラメータ - + Volume Adj. 音量調節 - + Test テスト - - + + Multi screen operation マルチスクリーン操作 - - + + selected num 選択された数 - - + + Clear クリア - + More Info 詳細 - + Screen Brightness 画面の明るさ - + Power Status 画面切り替えステータス - + Security 暗号化 + + + Getting + 取得中 + + + + + Error + エラー + + + + Input password + パスワードを入力 + + + + VerifyPassword + パスワードの検証 + + + + Tip Info + ヒント + + + + password is wrong + パスワードエラー + EAClock @@ -3530,73 +3505,73 @@ EBase - + Area 領域(px) - + X X - + Y Y - + W W - + H H - + Border ボーダー - - + + None なし - + Effect 特効 - + Rotate 回転 - + Blink きらめき - + Speed スピード - + Slow 遅い - + Moderate - + Fast 速い @@ -3744,159 +3719,180 @@ EEnviron - - - - - - - + + + + + + + + + + + + + + north 北の方 - - - - - - - + + + + + + + + + + + + + + east - - - - - - - + + + + + + + + + + + + + + south 南の方 - - - - - - - + + + + + + + + + + + + + + west 西の方 - - + Temperature 温度 - - + Humidity 湿度 - - + Noise ノイズ - + Wind Speed 風速 - + Wind Direction 風向 - + Pressure + 気圧 + + + Rainfall + うりょう + + + Radiation + ふく射 + + + Beam + ひかりのつよさ + + + Basic Properties 基本的な属性 - + Title タイトル - + Compensation 補償 - - Wind speed - 風速 - - - - Wind direction - 風向 - - - + Left 左に寄る - + Center 中央にある - + Right 右に寄る - + Single scroll 1行スクロール - + Speed スピード - + ms/pixel ミリ秒/ピクセル - + Back Color 背景色 - + Play Properties 再生方法 - - Refresh Cycle - リフレッシュサイクル - - - - min. - - - - + Play Duration 再生時間 - + s @@ -3904,37 +3900,37 @@ EGif - + Basic Properties 基本的な属性 - + File ファイル - + Select File ファイルを選択 - + Play Properties 再生方法 - + Play Duration 再生時間 - + s - + Play Times 再生回数 @@ -3942,73 +3938,73 @@ EMultiWin - + Please add media on the right 右側にメディアを追加してください。複数のメディアに参加できます。LEDディスプレイはリスト順に再生されます - + Media List メディアリスト - - - + + + Text テキスト - - - + + + Photo 写真 - - - + + + Video 動画リスト - - - + + + Gif アニメーション - - - + + + DClock デジタル時計 - - - + + + AClock アナログ時計 - - - + + + Select File ファイルを選択 - - + + Environment 環境モニタリング - - + + Timer タイマー @@ -4016,113 +4012,113 @@ EPhoto - + Basic Properties 基本的な属性 - + File ファイル - + Select File ファイルを選択 - + Image Read Error 画像読み込みエラー - + Play Properties 再生方法 - + Play Duration 再生時間 - - + + s - + Enter Style 開始効果 - + None なし - + Alpha_In 淡入 - + Moving to left 連続する左シフト - + Moving to right 連続右シフト - + Moving to top 連続アップコンバート - + Move to bottom 連続的下向 - + Zoom in 拡大 - + Zoom in to left_bottom 左下の拡大 - + Zoom in to left_top 左上の角を大きく - + Zoom in to right_top 右上拡大 - + Zoom in to right bottom 右下隅を大きく - + Rotate to right 右回り - + Rotate to left 左回り - + Enter Duration 効果時間 @@ -4140,186 +4136,186 @@ 内容を入力してください - + Basic Properties 基本的な属性 - + Back Color 背景色 - + Kerning 字の間隔 - + Line Spacing 間隔 - + PageCount: 総ページ数: - + page ページ - + Import txt File インポート txt ファイル - + Select File ファイルを選択 - + Fail 失敗 - + Cannot Open File ファイルのオープンに失敗しました - + Play Properties 再生方法 - + Flip 次頁 - + Scroll スクロール - + Static スタティック - - - + + + Play Duration 再生時間 - + Duration/Page ページごとの再生時間 - + Effect time 効果時間 - - + + Tip Info ヒント - - + + Effect time cannot be longer than duration time 効果の長さはプレイ時間より長くできません - + s - + Text Color テキスト色 - + Colorful Text まばゆい文字 - + Entrance Effect 開始効果 - + no なし - + random ランダム - + right to left 左へ連続移動 - + bottom to top 連続して上に移動 - + left to right 右へ連続移動 - + top to bottom 連続して下に移動 - + Head-Tail Spacing 首尾間隔 - + Scroll Style スクロール方向 - + Right -> Left 左へ - + Bottom -> Top 上へ - + Left -> Right 右へ - + Top -> Bottom 下へ - + Scroll Speed スクロールスピード @@ -4327,87 +4323,87 @@ ETimer - + day - + hour - + min - + sec - + Basic Properties 基本的な属性 - + Count Down カウントダウン - + Count Up カウントアップ - + Time 目標時間 - + Day - + Hour - + Min - + Sec - + Multiline 複数行表示 - + Text テキスト - + Play Properties 再生方法 - + Play Duration 再生時間 - + s @@ -4415,54 +4411,54 @@ EVideo - + Basic Properties 基本的な属性 - + File ファイル - + Play Properties 再生方法 - + Play Duration 再生時間 - + Select File ファイルを選択 - + s - + Play Times 再生回数 - + Video Transcoding - - + + Video Transcoding Progress ビデオ変換の進歩 - - + + Error エラー @@ -4480,17 +4476,17 @@ EWeb - + Basic Properties 基本的な属性 - + Play Duration 再生時間 - + s @@ -4521,67 +4517,67 @@ GenTmpThread - + MON 月曜日 - + TUE 火曜日 - + WED 水曜日 - + THU 木曜日 - + FRI 金曜日 - + SAT 土曜日 - + SUN 日曜日 - + AM 午前 - + PM 午後 - + day - + hour - + min - + sec @@ -4589,7 +4585,7 @@ ImgDlg - + Screenshot スクリーンショット @@ -4640,172 +4636,177 @@ MainWindow - + Language 言語 - + Help ヘルプ - - + + Check for updates アップデートをチェック - - + + firmware manager ファームウェア管理 - - - + + + Preferences プリファレンス設定 - - + + Info 情報 - - - + + + About 当ソフトウェアについて - - + + Setting 設置 - + Software Update ソフトウェアの更新 - + CurVersion 現在のバージョン - + Latest Version 最新バージョン - + Update Log 更新ログ - + The current version is already the latest version すでに最新バージョンです。 - + Video compress to ビデオ圧縮 to - + Video transcoding to トランスコード to - + Text antialiasing 文字のアンチエイリアス - + TextAntilaTip (ヒント:小さい間隔の大きい画面に適しています。このオプションを有効にすると、文字の端に影がフォントのエッジの滑らかさに達します。小さいサイズのスクリーンと単色のスクリーンは使用を推奨しません) - + Width Split - + + Program Send Batch + + + + Hide Detect Button - + Show Lora Screen - + Download ダウンロード - + Fail 失敗 - + Cannot Save File ファイルの保存に失敗しました - - - + + + Downloading updates 更新をダウンロード - + Error エラー - + Device 端末管理 - + Program コンテンツ管理 - + Control ターミナルコントロール - + Lora Screen - + Check card ワンタッチ修復 - + Tip Info ヒント - + RestoreLedCardIpByUdpTip この操作はLAN内のすべてのコンピュータIPと同じセグメントにないコントロールカードを固定IPに修正します。慎重に操作してください。 @@ -4929,88 +4930,126 @@ PageListItem - + times - + Page name プログラム名 - + New 新規 - + Play times 再生回数 - + Sources Repeat ソースの繰り返し - + Audios オーディオ - + Total Dur 全期間 - - + + s - + Select File ファイルを選択 - + Duration 期間 - + Vol 音量 - + Valid Date 有効期間 - - + + Warning 警告 - + Start Time can't be later than End Time 開始時間は終了時間より後にようにしてください - + End Time can't be earlier than Start Time 終了時間は開始時間より遅いようにしてください - + Plan タイムスケジュール + + PlanItemWgt + + + M + + + + + Tu + + + + + W + + + + + Th + + + + + F + + + + + Sa + + + + + Su + + + PlayWin @@ -5032,12 +5071,12 @@ PlayerBackSendThread - + Open file failed ファイルのオープンに失敗しました - + Read file failed ファイルの読み込みに失敗しました @@ -5058,37 +5097,37 @@ ProgCreateDlg - + Resolution 解像度 - + Solution Information スケジュール情報 - + Solution Name リスト名 - + Width - + Height 高さ - + Remarks 備考 - + 每段打折宽度 (用空格分隔) @@ -5096,109 +5135,109 @@ ProgEditorWin - + Save 保存 - + Setting 設置 - + Text テキスト - + Photo 写真 - + Video ビデオ - + Gif アニメーション - + Clock デジタル時計 - + Analog Clock アナログ時計 - + Environment 環境モニタリング - + Web ウェブページ - + MuliContentWindow マルチ素材ウィンドウ - + In this window, a plurality of different program materials can be added and played according to the order of joining the list; このウィンドウには、複数の異なる番組素材を追加して、リストに追加した順に再生することができます - + Timer タイマー - + Demo Video テストビデオ - + Play 再生 - + Stop 停止 - + Publish 転送 - - - + + + Select File ファイルを選択 - + program 番組リスト - + Add page ページを追加 - + Copy page コピーページ @@ -5209,7 +5248,7 @@ - + Tip Info ヒント @@ -5219,127 +5258,120 @@ 本当にこの番組ページを削除しますか? - + Move up 前へ - + Move down 次頁 - + widget properties パッケージプロパティ - + Page properties プログラムのプロパティ - + Do you want to save the modifications? 変更された内容を保存してもよろしいですか? - + Create Dir failed ディレクトリの作成に失敗しました - + Saving... 保存中、少々お待ちください... - + Success 成功 - + Convertering データを整理する - + Generate preview data プレビューデータの生成 - - - + + + Error エラー - + Rename fail when saving - + Remove Recursively fail when saving - - - Warning - 警告 - ProgPanel - + New 新規 - + Edit 編集 - + Delete 削除 - + Import インポート - + Export 出力 - + Send 送信 - - + Publish 転送 - - + Name 名前 @@ -5366,58 +5398,54 @@ - + Play 再生 - + Stop 停止 - - + Resolution 解像度 - - + File Size サイズ - - + Last Modify 最終更新日 - - + USB Update USB更新 - + Program name conflicted 番組名が重なる - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否确认删除选中的节目? - + Tip Info ヒント @@ -5425,84 +5453,75 @@ ProgPortDlg - + Solution Name リスト名 - + Progress 程度 - + Done 完了 + + QAbstractSocket + + + Socket operation timed out + + + QObject - + Setting up the LedOK Express... 初期化LedOK Express… - - + Input password パスワードを入力 - - VerifyPassword - パスワードの検証 - - - - + Error エラー - - Tip Info - ヒント - - - - password is wrong - パスワードエラー - - - + USB Update Program USB更新プログラム - + Password パスワード - - + + Convertering データを整理する - - + + Tip 提示 - + No checked USB device チェックUSBデバイス - + please select usb device in list リスト内のUSBデバイスを選択してください @@ -5529,68 +5548,83 @@ SendProgramDialog - - + + Publish 転送 - + success info - + Refresh 更新 - - Screen ID - ターミナルID - - - + Alias 別名 - + Online オンライン中 - - Screen IP - ターミナルIP - - - + Screen Size スクリーンサイズ - + Security 暗号化 - + Progress 程度 - + Remarks 備考 - + This screen is encrypted スクリーンは暗号化されています - + + Waiting + 待機中 + + + + Input password + パスワードを入力 + + + + VerifyPassword + パスワードの検証 + + + + Tip Info + ヒント + + + + password is wrong + パスワードエラー + + + All トータル @@ -5598,7 +5632,7 @@ UpgradeApkDialog - + Update APK 更新APK @@ -5613,123 +5647,67 @@ アップグレード - + Uninstall アンマウント - + check running state 運転状態を検出 - + Select Fpga FPGAファイルを選択 - + Installing インストール中 - + Refresh 更新 - - Cancel - キャンセル - - - - Screen ID - ターミナルID - - - + Alias 別名 - + Online オンライン中 - - Screen IP - ターミナルIP - - - + Security 暗号化 - + Progress 程度 - - xixunplayer - - - - - cardsystem - - - - - taxiapp - - - - - starter - - - - - connection - - - - - displayer - - - - - FPGA - FPGA - - - - update - - - - + State 状態 - - + All トータル - + This screen is encrypted スクリーンは暗号化されています - + Select Online APK オンラインAPKを選択 @@ -5740,71 +5718,79 @@ ファイルがありません - + Name 名前 - + Size サイズ - + Create Time 作成時間 - + Please select a file ファイルを選択してください - - - + + + Tip 提示 - - Is upgrading now. Please wait - 更新中です、しばらくお待ちください - - - + NoSelectedController 先に大きいスクリーンを選んでください - - + + File Read Fail + + + + + Downloading Online File オンラインファイルをダウンロード中 - - + + + + + Error エラー - + Online file is empty オンラインファイルが空です - + + File is empty + + + + Uploading アップロード中 - + Upload error アップロード エラー - + Don't power off during this process アップグレード中は電源を切らないでください @@ -5814,62 +5800,93 @@ インストール エラー - - Install success + + + Install Success インストールに成功しました - + Reminder ヒント - + Reminder: Uninstalling this program may cause the device to offline, cannot be found, lost configs and have a black screen. Please uninstall with caution! ヒント:このプログラムをアンインストールすると、プラットフォームがオフラインになり、デバイスが見つかりません。構成パラメータが失われ、黒画面の問題が発生します。慎重にアンインストールしてください。 - + Do you want to continue? 続行しますか? - + Uninstalling アンマウント中 - + Uninstall error アンインストール エラー - + Uninstall success アンインストールに成功しました - + Check apk running status APK運転状態監視 - + Check error チェック エラー - + Running 実行中 - + Not running 実行されていません - + + Input password + パスワードを入力 + + + + VerifyPassword + パスワードの検証 + + + + Tip Info + ヒント + + + + password is wrong + パスワードエラー + + + + Same version, needn't update + 同じバージョン、更新不要 + + + + Install Failed + インストールに失敗しました + + + The encrypted control card can be upgraded directly 暗号化されたコントロールカードを直接アップグレードすることができます @@ -5877,7 +5894,7 @@ WaitingDlg - + Success 成功 @@ -6086,65 +6103,4 @@ シリアルのオープンに失敗しました - - wPlanItem - - - M - - - - - Tu - - - - - W - - - - - Th - - - - - F - - - - - Sa - - - - - Su - - - - - wProgramPublishItem - - - Input password - パスワードを入力 - - - - VerifyPassword - パスワードの検証 - - - - Tip Info - ヒント - - - - password is wrong - パスワードエラー - - diff --git a/LedOK/ts/app_pt.ts b/LedOK/ts/app_pt.ts new file mode 100644 index 0000000..9d8c074 --- /dev/null +++ b/LedOK/ts/app_pt.ts @@ -0,0 +1,6107 @@ + + + + + ChangePasswordForm + + + Old password + Senha anterior + + + + New password + Nova Senha + + + + Repeat again + Repetir + + + + + + + + Tip + Dica + + + + Please input old password + Entre com a senha anterior + + + + Old password is wrong + Senha anterior esta errada + + + + Please enter a password with more than 6 characters + Entre com senha de mais de 6 caracteres + + + + The new password is not consistent in two times + + + + + Password changed successfully + Senha alterada com sucesso + + + + CtrlAdvancedPanel + + + Advanced + Avançado + + + + Screen Width(pixel) + Largura do display(pixel) + + + + Width + Largura + + + + + Height + Altura + + + + + + + + + + + + + + + + + + + + + Set + Config + + + + Alias + Apelido + + + + Web Server Address: + Endereço do Web Server: + + + + MCU Uploading + + + + + Setting + + + + + Getting Baud Rate + + + + + Traffic screen settings + + + + + Setting protocol ... + + + + + Set protocol + + + + + Getting protocol ... + + + + + Get protocol + + + + + + Port + + + + + Model + + + + + Realtimer Server Address: + Servidor de horário: + + + + update or uninstall + + + + + Clear + Limpar + + + + Check Apk + Conferi Apk + + + + Uninstall + Desinstalar + + + + Running check + Conferir + + + + Restart + Reiniciar + + + + Check Log + Conferir Log + + + + Start LedSet4 + Iniciar LedSet4.0 (Apk Display2.0 and higher) + + + + Open ADB + Abri ADB debug + + + + Post Custom JSON + Publicar JSON + + + + + + + + + Clear Program + Limpar Programa + + + + www.ledokcloud.com/realtime + + + + + Config + Config + + + + Refresh + Atualizar + + + + Restore to default + Restaurar padrão + + + + Taxi top screen configuration + Taxi top screen configuration + + + + + Service:High Out of service:Low + Service:Altura fora do pardão:Diminuir + + + + + Service:Low Out of service:High + Service:Altura fora do padrão:Aumentar + + + + Binding *.ic account indentity voucher + Vincular *.identificação da conta + + + + Rotate + Rotacionar + + + + Min brightness + Brilho minimo + + + + + + Readback + Ler + + + + Send + Enviar + + + + Max brightness + Brilho Maximo + + + + + SetScreenSize + Conf. tamanho do painel + + + + + + + + Success + Successo + + + + Compant ID: + ID da empresa + + + + Compant ID + ID da empresa + + + + InputWebServerAddressTip + Entre com endereço WebServer + + + + InputCompanyIdTip + Entre com a ID da empresa + + + + + SetOnlineAddr + Config o webserver + + + + + ClearRealtimeServer + Limpar + + + + + SetRealtimeServer + Config o server de realtimer + + + + Tip Info + Dica + + + + + RestartAndroid + Reiniciar + + + + + running + Rodar + + + + + no running + não rodar + + + + Check Apk Version + Checar a versão da APK + + + + + UninstallSoftware + Desistalar + + + + + Check apk running status + Checar status do APK + + + + + OpenAdb + Abrir o debug + + + + indentity voucher (*.ic) + Comprovante de ID (*.ic) + + + + + + + + InvokeTaxiAppFunction + Vincular certificado + + + + + AliIotSetting + + + + + Software Version Info + + + + + Package + + + + + Version + + + + + + Package name is null + + + + + Clearing Program + + + + + + Timeout + Tempo esgotado + + + + + + + Failed + Falhou + + + + Getting Log + Obtendo log + + + + + + + + + + + + + + + + Error + Erro + + + + Getting Player State + + + + + + Player State + + + + + + + Get Player State + + + + + Setting Timing Reboot + Config tempo de reiniciar + + + + Set Timing Reboot + Config tempo de reiniciar + + + + Getting Timing Reboot + Config tempo de reiniciar + + + + Get Timing Reboot + Obtendo tempo de reinicialização + + + + + Get Display Mode + + + + + + Set Screen Offset + + + + + totalResolution + Resolução total de FPGA + + + + strCurDisplayResolution + Resolução do display + + + + + File not exist + Arquivo não encontrado + + + + This operation will clear current program. + + + + + Do you want to continue? + Continuar? + + + + + Cannot Open File + Não pode abrir arquivo + + + + Uploading + Atualizando + + + + Update + Atualizar + + + + + Set Display Mode + Config Display + + + + + Get Screen Offset + Obter display Offset + + + + Open file Failed + Falaha em abrir + + + + Setting Wallpaper + Config plano fundo + + + + + Set Wallpaper + Config plano fundo + + + + System Updating + Atualizando + + + + + System Update + Sistema atualizado + + + + Getting MCU Version + Obtendo versão + + + + + MCU Version + Verão de MCU + + + + Select File + Arquivo selecionado + + + + Setting player background + Config plano de fundo + + + + + Set player background + Config plano de fundo + + + + Clearing player background + Apagar plano de fundo + + + + + + + + + + + Clear player background + Apagar plano de fundo + + + + + GetScreenRotation + Rotação do display + + + + + + Charging Station + + + + + Setting Baud Rate + Config Baud Rate + + + + Set Baud Rate + Config Baud Rate + + + + Get Baud Rate + Config Baud Rate + + + + + Text is empty + Testo em branco + + + + + Json Parse Error + Erro Json + + + + + Json isn't an Object + + + + + Info + Info + + + + Setting card work mode ... + + + + + Set card work mode + + + + + Getting card work mode ... + + + + + Get card work mode + + + + + Input password + Entre com a senha + + + + Change Password + Troque a senha + + + + Resolution Config + Config de resolução + + + + Full screen + Full screen + + + + Part + Parte + + + + Display Mode + Modo do display + + + + Screen Position + Posição da tela + + + + Offset + Offset + + + + Hidden Settings + Esconder Config + + + + Click right button to hide + Clique com o botão direito para esconder + + + + + Update MCU + + + + + Get MCU Version + Versão de MCU + + + + Baud Config + Config Baudrate + + + + Uart + Uart + + + + Baud + Baud + + + + + + + + + + + Get + Obter + + + + Firmware Management + + + + + Timing Reboot + Reiniciando + + + + Protocol + Protocolo + + + + Server + Servidor + + + + Client + Cliente + + + + + SetScreenRotation + Config a rotação do display + + + + + SetMinBrightness + Config brilho minimo + + + + + SetMaxBrightness + Config brilho maximo + + + + + GetMinBrightness + Obter bilho + + + + + GetMaxBrightness + Obter brilho + + + + + Card work mode + + + + + + SetSpecialResolution + Config resolução especial + + + + + GetSpecialResolution + Ler resolução especial + + + + + CleanDisplayScreenSize + Restaurar resolução + + + + + SetHighForBusy + Set level for busy + + + + + GetStateForBusy + Get level of busy + + + + + SetCardAlias + Config apelido + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tip + Dica + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NoSelectedController + Selecionar o display + + + + InputWidthTip + Entre com a correta largura + + + + InputHeightTip + Entre com a correta altura + + + + Password is error + Senha esta errada + + + + CtrlBrightPanel + + + + + + + + + + + + + + + + + + + + Tip + Dica + + + + + + + + + + + + + + NoSelectedController + Selecione o display + + + + + SetBrightnessSensitivity + Selecione a sensibilidade do sensor + + + + + GetBrightnessSensitivity + Obter a sensibilidade do sensor + + + + + SetMinBrightness + Config brilho minimo + + + + + GetMinBrightness + Obter brilho minimo + + + + + NeedSelectSensorTypeTip + Selecione o tipo de sensor + + + + Open file dialog + Abrir arquivo + + + + Not found current worksheet + + + + + + SensorBrightnessTable + Config tabela do sensor + + + + GetSensorBrightnessTable + Obter tabela do sensor + + + + no sensorBrightnessTable + Não existe tabela + + + + Save file + Salvar arquivo + + + + + GetCurrentSensorBrightness + Obter brilho atual + + + + + SetBrightness + Config brilho + + + + GetBrightness + Obter brilho + + + + Brightness + Brilho do display + + + + + BrightnessSchedule (*.bjs) + Agendamento brilho + + + + Import File + + + + + Save File + Salvar arquivo + + + + BrightnessValue + Valor do brilho + + + + Start Time + Hora de Inicio + + + + End Time + Hora final + + + + + SetAutoBrightnessTask + Enviar tabela de brilho + + + + GetAutoBrightnessTask + Obter tabela de brilho + + + + + Error + Erro + + + + Brightness Config + Config de brilho + + + + Auto + Auto + + + + Manual + Manual + + + + Schedule + Agendado + + + + Adapt to Old Devices + + + + + BrightTip1 + Se o brilho maximo for 64, o brilho minimo pode ser config em 1% ou valor desejado; se o maximo for 255, o brilho minimo deve se 36%, abaixo disso será muito fraco. + + + + BrightTip2 + Quando atualizar veja se escolheu o tipo correto , caso contrario será invalido! + + + + Sensitivity + Sensibilidade + + + + Minbrightness + Brilho minimo + + + + + + Set + Config + + + + Upload + Atualizar arquivo + + + + + + + Readback + Ler + + + + ReadbackTable + Ler + + + + Refresh + Atualizar + + + + Cur Brigntness + Brilho atual + + + + Brightness value + Valor do brilho + + + + Default brightness + Brilho padrão + + + + Add + Add + + + + Clear + Limpar + + + + Delete + Deletar + + + + Import + Importar + + + + Export + Exportar + + + + Apply + Aplicar + + + + Default brightness tip + Tip: + + + + CtrlHdmiPanel + + + HDMI Configuration + Config de video + + + + Manual + Manual + + + + Schedule + Agendado + + + + + + + Tip + Dica + + + + + + + NoSelectedController + Selecione o display + + + + + SyncSwitch + Altere a entrada para porta HDMI-IN + + + + + AnSyncSwitch + Altere a entrada para Async + + + + IsSync + Ler tipo de entrada + + + + Save File + Salvar arquivo + + + + + Sync Schedule + Sinc agendamento + + + + + SetTimingHdmiInTask + Config entrada HDMI-IN + + + + GetTimingHdmiInTask + Obter agendamento de entrada de video + + + + + Async + Async + + + + Import File + + + + + Set + Config + + + + + Readback + Ler + + + + Start Time + Hora de inicio + + + + End Time + Hora final + + + + SUN + Dom + + + + MON + Seg + + + + TUE + Ter + + + + WED + Qua + + + + THU + Qui + + + + FRI + Sex + + + + SAT + Sab + + + + Add + Adicionar + + + + + Apply + Aplicar + + + + Clear + Limpar + + + + Delete + Deletar + + + + Import + Importar + + + + Export + Exportar + + + + By default, the asynchronous content is played, and the synchronous signal content is played in the fixed time period + Por padrão, o conteudo asynchronous é aplicadop, e o conteudo synchronous pela porta hdmi-in é aplicado quando fixado o periodo + + + + CtrlNetworkPanel + + + Wire Enther(RJ45) Configuration + Wire Enther(RJ45) Configuração + + + + DHCP + DHCP + + + + Specify IP + IP + + + + IP Address + Endereço IP + + + + Gateway + Gateway + + + + + + Set + Config + + + + + + + Readback + Ler + + + + WIFI Configuration + Config WiFi + + + + WiFi Mode + Modo WiFi + + + + Cellular Config + Config Celular + + + + Enable Cellular Data + Habilitar celular + + + + Get cellular network status information + Obter informação da rede + + + + Through the check status button + Atraves do botão de status, voce pode escolher automaticamente o codigo MCC do pais;selecione para obtera correta informação de APN . + + + + Country ID(mcc): + ID do país(mcc): + + + + + Carrier Name + Operadora + + + + APN(Required) + APN(requerida) + + + + Flight Mode + Modo avião + + + + WiFi name + Nome WiFi + + + + + + Password + Senha + + + + + Input password + Entre com a senha + + + + Scan + Escanear + + + + Ap Mode + AP + + + + OFF + Desligar + + + + ON + Ligar + + + + AP name + Nome do AP + + + + Subnet mask + Mascara subnet + + + + Input ap name + Entre com nome do AP + + + + + + + + + + + + + + + Tip + Dica + + + + + + + + + + + + + + NoSelectedController + Selecione o display + + + + + SetEthernet + Config rede + + + + + + + Attention + Atenção + + + + Please input IP address! + Entre com o endereço de IP + + + + Please input Mask address! + Endereço da mascara + + + + Please input Gateway address! + Endereço de Gateway + + + + Please input DNS address! + Endereço DNS + + + + + GetEthernet + Obter Ethernet + + + + DHCP IP + IP DHCP + + + + STATIC IP + IP estático + + + + + + ConfigurationWiFi + Configuração WiFi + + + + + IsPortableHotSpot + Obter AP ou WiFi + + + + GetWifiList + Escanear lista WiFi + + + + + ConfigurationHotSpot + Configuração do AP + + + + success + successo + + + + WifiName + Nome Wifi + + + + ApName + Nome Ap + + + + + GetCurrentAPN + Obter APN atual + + + + GetSIMStatus + Obter estatus do SIM + + + + + SetAPN + Config APN + + + + 状态: + Estatus: + + + + Error + Erro + + + + 未知 + Desconhecido + + + + 锁定状态,需要用户的PIN码解锁 + Travar; necessita de pin para alterar + + + + 锁定状态,需要用户的PUK码解锁 + Travado, necessário PUK para destravar + + + + 锁定状态,需要网络的PIN码解锁 + Travado, necessário PUK para destravar + + + + 就绪 + Lendo + + + + no checked sim card + SIM card não checado + + + + 国家码: + MCC: + + + + 号码: + numero: + + + + 用户: + Nome de usuário: + + + + 信号: + Sinal: + + + + 信号正常 + Sinal OK + + + + 不在服务区 + Fora da area de serviço + + + + 仅限紧急呼叫 + Apenas chamadas de emergencia + + + + 射频已经关闭 + RF desligado + + + + 网络: + Tipo de network: + + + + 网络类型未知 + desconhecido + + + + GPRS网络 + GPRS + + + + EDGE网络 + EDGE + + + + UMTS网络 + UMTS + + + + CDMA网络,IS95A 或 IS95B. + CDM + + + + EVDO网络, revision 0. + EVDO,revision 0. + + + + EVDO网络, revision A. + EVDO,revision A. + + + + 1xRTT网络 + 1xRTT + + + + HSDPA网络 + HSDPA + + + + HSUPA网络 + HSUPA + + + + HSPA网络 + HSPA + + + + 漫游: + roam: + + + + Yes + Sim + + + + No + Não + + + + 数据连接状态: + Status: + + + + 断开 + Desligado + + + + 正在连接 + conectando + + + + 已连接 + Conectado + + + + 暂停 + Suspenso + + + + 数据活动休眠状态: + Dados ativo, estado suspenso : + + + + 活动,但无数据发送和接收 + Ativo, mas sen enviar / receber dados + + + + 活动,正在接收数据 + Ativo, recebendo dados + + + + 活动,正在发送数据 + Ativo enviando ddos + + + + 活动,正在接收和发送数据 + Ativo, enviando e recebendo dados + + + + 休眠状态 + Modo suspenso + + + + 信号强度: + Nível de sinal: + + + + DNS Address + Endereço DNS + + + + Set APN Info + Config APN + + + + User + Usuario + + + + Type + Tipo + + + + Server + Server + + + + Port + Porta + + + + Proxy + Proxy + + + + MMS Port + Porta + + + + MMS Proxy + Proxy + + + + + SetSwitchSimData + Selec SIM + + + + + ContrFlightMode + Selec modo avião + + + + + GetFlightModeState + Ler estado modo avião + + + + CtrlPowerPanel + + + + + Off + Desligado + + + + + + On + Ligado + + + + + + + + Tip + Dica + + + + + + + + NoSelectedController + Selecione o display + + + + + SetScreenOn + Ligue o display + + + + + SetScreenOff + Desligue o display + + + + + IsScreenOn + Ler estado do display + + + + Import File + Importar arquivo + + + + + PowerSchedule (*.pjs) + Agenda de funcionamento(*.pjs) + + + + Save File + Salvar arquivo + + + + + SetTimingScreenTask + Selecione a agenda de funcionamento + + + + GetTimingScreenTask + Obter agenda de funcionamento + + + + Power Configuration + Config funcionamento + + + + Manual + Manual + + + + Schedule + Agendado + + + + Power + Funcioando + + + + + Readback + Ler + + + + Start Time + Hora inicio + + + + End Time + Hora final + + + + SUN + Dom + + + + MON + Seg + + + + TUE + Ter + + + + WED + Qua + + + + THU + Qui + + + + FRI + Sex + + + + SAT + Sab + + + + Add + Adicionar + + + + Apply + Aplicar + + + + Clear + Limpar + + + + Delete + Deletar + + + + Import + Importar + + + + Export + Exportar + + + + It is power off state outside the schedule time period + O desligamento esta fora do periodo agendado + + + + Clear Schedule + Cancelar agendamento + + + + Tip Info + Dica Info + + + + Clear schedule task? + Limpar agendamento? + + + + + CleanTimingScreenTask + Limpar agendamento + + + + CtrlPwdPanel + + + Set Password + Config senha + + + + Original password + Senha original + + + + original password + Senha original + + + + + New password + Nova senha + + + + Repeat new password + Repetir nova senha + + + + + + + Set encryption + Config encriptação + + + + Cancel encryption + Cancelar encriptação + + + + Enter again + Entre novamente + + + + + + + + + + + + Tip + Dica + + + + + NoSelectedController + Selecione o display + + + + + InputOriginalPasswordTip + Entre com a senha original + + + + InputNewPasswordTip + Entre com nova senha + + + + InputRepeatPasswordTip + Repetitir a nova senha + + + + InputRepeatPasswordNotSameTip + As senhas são diferentes + + + + Tip Info + Dica Info + + + + After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? + Apos configurar a senha, relembre e guarde. Caso não recordar, o equipamento não funcionará. Você quer continuar? + + + + + + + SetControllerPassword + Config a senha + + + + + Error + Erro + + + + + Success + Successo + + + + + + Modify password + Modifique a senha + + + + + + + OriginalPasswordErrorTip + A senha atual esta errada + + + + CtrlTestPanel + + + Test Screen + Teste o display + + + + Line test + Teste de linha + + + + + + + Red + Vermelho + + + + + + + Green + Verde + + + + + + + Blue + Azul + + + + + + + White + Branco + + + + Vertical + Vertical + + + + Slash + Linha diagonal + + + + + Horizontal + Horizontal + + + + + Speed + Velocidade + + + + ms(>10) + + + + + Line Distance + Distancia entre linhas + + + + + + Test + Teste + + + + Gradation test + Teste de graduação + + + + Only the gray value is displayed + Apenas graduação de cinza + + + + GrayValue + Valor de cinza + + + + Color test + Teste de cores + + + + Gradient + Gradiente + + + + Clear + Limpar + + + + Reset + Loop + + + + + + + Anycast + Anycast + + + + Stop + Parar + + + + + + + + + + + Tip + TDicas + + + + + + + + + NoSelectedController + Selecione o display + + + + + + + + + StartTest + Inicie teste + + + + + StopTest + Parar teste + + + + loopback mode + Mode loop + + + + Connect timeout + Esgotado tempo de conexão + + + + + receive + Recebido + + + + Connect + Conectado + + + + timeout + Tempo esgotado + + + + Reset loop mode + Mode de loop reset + + + + + success + successo + + + + CtrlVerifyClockPanel + + + Verify Clock Configuration + Verificar config de hora + + + + + Verify to Computer time + Verificar hora do PC + + + + Cur time of controller + Hora atual do display + + + + + LAN + LAN + + + + + + + + + + + + + + Tip + Dica + + + + + + + + + + + + + + NoSelectedController + Selecione o display + + + + screenSwitch + Switch Screen + + + + + + YES + Ligado + + + + + + NO + Fechado + + + + volume + Volume + + + + brightness + Brilho + + + + + identificationCode + Codigo ID + + + + + delaySync + Hora + + + + + msec + miliseg + + + + + + + OtherSyncItem + Outro sinc itens + + + + + + + lastSynchronousTime + Ultima atualização de hora + + + + checkNtpTime + Intervalo de atualização + + + + Lora identity + Lora ID + + + + (min/time) + (min/hora) + + + + identification code + Codigo ID + + + + Time offset(msec) + Hora (miliseg) + + + + Brightness + Brilho do display + + + + Volume + Volume + + + + Screen on/off + Liga/Desliga + + + + + Slave + Escravo + + + + NTP Server + Servidor NTP + + + + + NTP Server address + Endereço server NTP + + + + TimeZone + Fuso horário + + + + + + + + Set + Config + + + + Language: + Idioma: + + + + Enable Synchronous playing + Habilitar sincronização de video + + + + + Sync time interval + Sincronizar intervalo de tempo + + + + + + + + Readback + Ler + + + + + Master + Master + + + + Identification Code + Codigo ID + + + + + SetNtpServer + Config server NTP + + + + + MasterSwitch + Selecionar como prioritario + + + + + SlaveSwitch + Selecionar como escravo + + + + IsMasterSlave + Ler identificação + + + + + GetControllerDate + Obter data hora + + + + + SetingSyncMethod + Selecionar modo Sinc + + + + + SyncTime + Sinc hora + + + + + GetNtpServer + Obter server NTP + + + + + GetingSyncMethod + Lendo metodo de Sinc + + + + + SetTimezone + Config fuso horario + + + + CtrlVolumePanel + + + + + + Tip + Dica + + + + + + + NoSelectedController + Selecione o display + + + + + SetVolume + Config Volume + + + + + GetVolume + Ler Volume + + + + Import File + Importar arquivos + + + + + Volume Schedule (*.vols) + Agenda de volume + + + + Save File + Salvar arquivo + + + + + SetAutoVolumeTask + Config agendameto de volume + + + + GetAutoVolumeTask + Obteragendamento de volume + + + + Volume Control + Controle de volume + + + + Manual + Manual + + + + Schedule + Agendado + + + + Volume + Volume + + + + Set + Config + + + + + Readback + Ler + + + + Default volume + Volume padrão + + + + Add + Adicionar + + + + Clear + Limpar + + + + Delete + Deletar + + + + Import + Importar + + + + Export + Exportar + + + + Volume value + Nivel Volume + + + + Start Time + Hora inicio + + + + End Time + Hora final + + + + SUN + Dom + + + + MON + Seg + + + + TUE + Ter + + + + WED + Qua + + + + THU + Qui + + + + FRI + Sex + + + + SAT + Sab + + + + Apply + Aplicar + + + + Default volume tip + Recordar: o display esta com o brilho padrão the display fora do periodo + + + + Def + + + + + + + + + + Device replied + Equipamento replicado + + + + + + + + Success + Successo + + + + + Fail + Falhou + + + + DevicePanel + + + + All + ALL + Todos + + + + Online + Online + Online + + + + + Refresh + Refresh + Atializar + + + + + + Specify IP + Specify IP + Definir IP + + + + + + + + Current Screen + Display atual + + + + + + none + none + + + + Current Brightness + Brilho atual + + + + Android Version + Android + + + + FPGA Version + Versão FPGA + + + + Brightness Level + Nivel brilho + + + + Android OS Resolution + Resolução Android + + + + Firmware Version + Versão de Firmware + + + + + + + Player Version + Versão do player + + + + Detail Info + Detalhe de informação + + + + Getting + Obtendo info + + + + Specify IP list + Definir IP + + + + Search + Procurar + + + + + Attention + Atenção + + + + + Please input IP address! + Entre com endereço IP! + + + + Cancel + Cancelar + + + + Screen ID + ID do display + + + + Screen Size + Tamanho do display + + + + + Screenshot + Capturar tela + + + + + On + Ligado + + + + + Off + Desligado + + + + Brightness Adj. + Brilho Adj. + + + + Power Control + Controle de energia + + + + Net Config + Config de rede + + + + Time Sync + Hora Sinc + + + + Video source + Entrada video + + + + Password + Senha + + + + Advanced + Avançado + + + + Volume Adj. + Volume + + + + Test + Teste + + + + + Multi screen operation + Operação de multi display + + + + + selected num + Selecionar numero + + + + + Clear + Limpar + + + + More Info + Mais Info + + + + Alias + Apelido + + + + Screen Brightness + Brilho do display + + + + Power Status + Estatus de funcionam + + + + Security + encriptação + + + + Getting + Obter + + + + + Error + Erro + + + + Input password + Introduzir a senha + + + + VerifyPassword + Verifique a senha + + + + Tip Info + Dica + + + + password is wrong + A senha esta errada + + + + EAClock + + + Basic Properties + Propriedade basica + + + + Time Zone + Fuso horário + + + + Custom Dial + Customizar + + + + Select + Selecionar + + + + Select Dail file + Selecionar dial + + + + Hour Mark + Escala de hora + + + + + Circular + Circulo + + + + + Rectangle + Retangulo + + + + Number + Numero + + + + Min Mark + Escala de minuto + + + + Color + Cores + + + + Length + Comprimento + + + + Width + Largura + + + + Hour Hand + Ponteiro hora + + + + Min Hand + Ponteiro min + + + + Sec Hand + Ponteiro seg + + + + Show + Apresentar + + + + Text + Texto + + + + Play Properties + Propriedades + + + + Play Duration + Duração + + + + s + s + + + + EBase + + + Area + Area(px) + + + + X + X + + + + Y + Y + + + + W + L + + + + H + A + + + + Border + Borda + + + + + None + None + + + + Effect + Efeito + + + + Rotate + Rotacionar + + + + Blink + Piscar + + + + Speed + Velocidade + + + + Slow + Devagar + + + + Moderate + Moderado + + + + Fast + Rapido + + + + EDClock + + + MON + Seg + + + + TUE + Ter + + + + WED + Qua + + + + THU + Qui + + + + FRI + Sex + + + + SAT + Sab + + + + SUN + Dom + + + + + AM + AM + + + + + PM + PM + + + + Basic Properties + Propiedades basicas + + + + Time Zone + Fuso + + + + Year + YAno + + + + Month + Mês + + + + Day + Dia + + + + Hour + Hora + + + + Min. + Min. + + + + Sec. + Seg. + + + + Weekly + Dia da semana + + + + Full Year + 4-Digitos Ano + + + + 12-Hour + 12-Houras + + + + Date Style + Formato data + + + + Time Style + Formato hora + + + + Display Style + Estilo display + + + + Multiline + Multilinha + + + + Play Properties + + + + + Play Duration + Duração + + + + s + s + + + + EEnviron + + + + + + + + + + + + + + + + north + north + + + + + + + + + + + + + + + + + east + leste + + + + + + + + + + + + + + + + + south + sul + + + + + + + + + + + + + + + + + west + west + + + + Temperature + Temperatura + + + + Humidity + Umidade + + + + Noise + Ruido + + + + Wind Speed + Velocidade vento + + + + Wind Direction + Direção do vento + + + Pressure + Pressão + + + Rainfall + Chuva + + + Radiation + Radiação + + + Beam + Luminosa + + + + Basic Properties + Basic properties + + + + Title + Titulo + + + + Compensation + Compensação + + + + Left + Esquerda + + + + Center + Centro + + + + Right + Direita + + + + Single scroll + Rolar simples + + + + Speed + Velocidade + + + + ms/pixel + ms/pixel + + + + Back Color + Cor fundo + + + + Play Properties + Propriedades + + + + Play Duration + Duração + + + + s + s + + + + EGif + + + Basic Properties + Propriedades + + + + File + Arquivo + + + + Select File + Selecionar arq. + + + + Play Properties + Propriedades + + + + Play Duration + Duração + + + + s + s + + + + Play Times + Repetições + + + + EMultiWin + + + Please add media on the right + Você pode adicionar varios tipos de midia. O display irá tocar de acordo com a playlist + + + + Media List + Lista de midias + + + + + + Text + Texto + + + + + + Photo + Foto + + + + + + Video + Video + + + + + + Gif + Gif + + + + + + DClock + Relogio + + + + + + AClock + Rel. analogico + + + + + + Select File + Selecionar arquivo + + + + + Environment + Environmental Monitoring + + + + + Timer + Timer + + + + EPhoto + + + Basic Properties + Propriedades + + + + File + Arquivo + + + + Select File + Selec Arquivo + + + + Image Read Error + Erro ao ler iamgem + + + + Play Properties + + + + + Play Duration + Duração + + + + + s + s + + + + Enter Style + Efeito de entrada + + + + None + None + + + + Alpha_In + ALPHA_IN + + + + Moving to left + Mover esuqerda + + + + Moving to right + Mover direita + + + + Moving to top + Mover para cima + + + + Move to bottom + Mover para baixo + + + + Zoom in + ZOOM_IN + + + + Zoom in to left_bottom + ZOOM_IN_esquerda_inferior + + + + Zoom in to left_top + ZOOM_IN_esquerda superior + + + + Zoom in to right_top + ZOOM_IN_direita superior + + + + Zoom in to right bottom + ZOOM_IN_direita inferior + + + + Rotate to right + Rotacionar_para_direita + + + + Rotate to left + Rotacionar_para_esquerda + + + + Enter Duration + Duração do efeito + + + + Images (*.png *.jpg *.jpeg *.bmp) + Imagens(*.png *.jpg *.jpeg *.bmp) + + + + EText + + + Enter your text + Entre com o texto + + + + Basic Properties + Propriedades + + + + Back Color + Cor de fundo + + + + Kerning + Kerning + + + + Line Spacing + Espaços + + + + PageCount: + Paginas: + + + + page + Pagina + + + + Import txt File + Importar arquivo + + + + Select File + Selecionar arquivo + + + + Fail + Falhou + + + + Cannot Open File + Não pode abrir + + + + Play Properties + Propriedades + + + + Flip + Virar + + + + Scroll + Rodar + + + + Static + Estático + + + + + + Play Duration + Duração + + + + Duration/Page + Duração/Pagina + + + + Effect time + Duração do efeito + + + + + Tip Info + Info + + + + + Effect time cannot be longer than duration time + O tempo de efeito não pode ser mais longo que a duração + + + + s + s + + + + Text Color + Cor do texto + + + + Colorful Text + Texto colorido + + + + Entrance Effect + Efeito de entrada + + + + no + Não + + + + random + Aleatório + + + + right to left + Da direita para esquerda + + + + bottom to top + De baixo para cima + + + + left to right + Da esquerda para direita + + + + top to bottom + De cima para baixo + + + + Head-Tail Spacing + Espaçado + + + + Scroll Style + Direção + + + + Right -> Left + Da direita para esquerda + + + + Bottom -> Top + de baixo para cima + + + + Left -> Right + Da esquerda para direita + + + + Top -> Bottom + De cima para baixo + + + + Scroll Speed + Velocidade de rotação + + + + ETimer + + + day + Dias + + + + hour + Horas + + + + min + Min + + + + sec + Seg + + + + Basic Properties + Propriedades + + + + Count Down + Contador regressivo + + + + Count Up + Contador progressivo + + + + Time + Target Time + + + + Day + Dia + + + + Hour + Hora + + + + Min + Min + + + + Sec + Seg + + + + Multiline + Multilinha + + + + Text + Texto + + + + Play Properties + + + + + Play Duration + Duração + + + + s + s + + + + EVideo + + + Basic Properties + Propriedades + + + + File + Arquivo + + + + Play Properties + + + + + Play Duration + Tempo duração + + + + Select File + Selecionar arquivo + + + + s + s + + + + Play Times + Repetições + + + + Video Transcoding + Transcodificação de video + + + + + Video Transcoding Progress + Processando + + + + + Error + Erro + + + + Video + Video + + + + Flash + Piscar + + + + EWeb + + + Basic Properties + Propriedades + + + + Play Duration + Duração + + + + s + s + + + + EleTimer + + + day + Dias + + + + hour + Horas + + + + min + Mins + + + + sec + Segs + + + + GenTmpThread + + + MON + Seg + + + + TUE + Ter + + + + WED + Qua + + + + THU + Qui + + + + FRI + Sex + + + + SAT + Sab + + + + SUN + Dom + + + + AM + AM + + + + PM + PM + + + + day + Dias + + + + hour + Horas + + + + min + Mins + + + + sec + Segs + + + + ImgDlg + + + Screenshot + Captura da tela + + + + LoColorSelector + + + Transparent + Transparente + + + + LoDateSelector + + + Date selector + Seletor de data + + + + LoQTitleBar + + + + Minimize + Minimizar + + + + + + Maximize + Maximizar + + + + + Close + Fechar + + + + Restore + Restaurar + + + + MainWindow + + + Language + Idioma + + + + Help + Ajuda + + + + + Check for updates + Checar atualizações + + + + + firmware manager + Gerenciador Firmware + + + + + + Preferences + Preferencias + + + + + Info + Info + + + + + + About + Sobre + + + + + Setting + Config + + + + Software Update + Atualização deSoftware + + + + CurVersion + Versão atual + + + + Latest Version + Ultima versão + + + + Update Log + Atualização de log + + + + The current version is already the latest version + The current version is already the latest version + + + + Video compress to + + + + + Video transcoding to + + + + + Text antialiasing + + + + + TextAntilaTip + (Info:Não indicado para pequenos displays + + + + Width Split + + + + + Program Send Batch + + + + + Hide Detect Button + + + + + Show Lora Screen + + + + + Download + + + + + Fail + Falhou + + + + Cannot Save File + Não pode salvar + + + + + + Downloading updates + Atualizando + + + + Error + Erro + + + + Device + Painéis + + + + Program + Editor + + + + Control + Config + + + + Lora Screen + Display LORA + + + + Check card + Detectar + + + + Tip Info + Info + + + + RestoreLedCardIpByUdpTip + Esta operação irá fixar todos os painéis na LAN que não estão na mesma faixa de IP do seu PC. Atenção! + + + + Net + + + Connection Timeout + Tempo esgotado + + + + Error + Erro + + + + PageEditor + + + Zoom In + Zoom In + + + + Zoom Out + Zoom Out + + + + Original size + Tamanho original + + + + Delete the secect media + Deletar a midia selecionada + + + + Clear all media + Apagar todos + + + + Move layer up + Mover layout para cima + + + + Send backward + Mover layout para baixo + + + + Bring to front + Mover para frente + + + + Move to the bottom layer + Move para tras + + + + Fill the entire screen + Preencher a tela + + + + Fill the screen horizontally + Preencher horizontamente + + + + Fill the screen vertically + Preencher verticalmente + + + + Align top + Alinhar + + + + Center vertically + Centralizar + + + + Bottom align + De tras para frente + + + + Align left + Alinhar a esquerda + + + + Center horizontally + Centralizar horizonta + + + + Align right + Alinhar pela direita + + + + Tip Info + Info + + + + Clear all medias? + Apagar todas as midias? + + + + PageListItem + + + times + Repetições + + + + Page name + Nome programa + + + + New + Novo + + + + Play times + Repetições + + + + Sources Repeat + + + + + Audios + Audios + + + + Total Dur + Duração total + + + + + s + s + + + + Select File + Selecionar arquivos + + + + Duration + Duração + + + + Vol + Vol + + + + Valid Date + Data de validade + + + + + Warning + Aviso + + + + Start Time can't be later than End Time + Tempo de inicio não pode ser maior que o tempo final + + + + End Time can't be earlier than Start Time + Tempo final não pode ser anter do tempo inicial + + + + Plan + Plan + + + + PlanItemWgt + + + M + Seg + + + + Tu + Ter + + + + W + Qua + + + + Th + Qui + + + + F + Sex + + + + Sa + Sab + + + + Su + Dom + + + + PlayWin + + + Move to Top Left + Mover superior esquerdo + + + + Set Position + Config posição + + + + Close + Fechar + + + + PlayerBackSendThread + + + Open file failed + Abrir aqrquivo + + + + Read file failed + Ler arquivo + + + + PosDlg + + + Set Position + Config posição + + + + OK + Ok + + + + ProgCreateDlg + + + Resolution + Resolução + + + + Solution Information + ID + + + + Solution Name + Nome + + + + Width + Largura + + + + Height + Altura + + + + Remarks + Observações + + + + 每段打折宽度 (用空格分隔) + Largura de cada parte + + + + ProgEditorWin + + + Save + Salvar + + + + Setting + Configuração + + + + Text + Texto + + + + Photo + Foto + + + + Video + Video + + + + Gif + Gif + + + + Clock + Relógio + + + + Analog Clock + Relógio analogico + + + + Environment + Monitoramento ambiente + + + + Web + Web page + + + + MuliContentWindow + Janela para varias midias + + + + In this window, a plurality of different program materials can be added and played according to the order of joining the list; + Nesta janela, podem ser adicionados varios tipos de midia, sendo apresentados de acordo com a ordem da lista + + + + Timer + Timer + + + + Demo Video + Demo + + + + Play + Tocar + + + + Stop + Parar + + + + Publish + Publicar + + + + + + Select File + Selecionar arquivo + + + + program + Programa + + + + Add page + Adicionar pag + + + + Copy page + Copiar pag + + + + Delete page + Deletar pag + + + + + Tip Info + Info + + + + Are you sure you want to delete this program page? + Você quer deletar esta pagina? + + + + Move up + Mover para cima + + + + Move down + Mover para baixo + + + + widget properties + Propriedade + + + + Page properties + Propriedades do programa + + + + Do you want to save the modifications? + Você quer salvar esta modificação? + + + + Create Dir failed + Criação falhou + + + + Saving... + Salvando... + + + + Success + Successo + + + + Convertering + Convertendo + + + + Generate preview data + Gerar dados de visualização + + + + + + Error + Erro + + + + Rename fail when saving + Falha em renomear + + + + Remove Recursively fail when saving + Falha ao remover + + + + ProgPanel + + + + New + Novo + + + + + Edit + Editar + + + + + Delete + Deletar + + + + + + Import + Importar + + + + + + Export + Exportar + + + + + Send + Enviar + + + + USB Update + + + + + Publish + Publicar + + + + Name + Nome + + + + + Choose Directory + Escolha o diretorio + + + + Tip + Dica + + + + The imported directory is already in the working directory, so there is no need to import it again! + Este aquivo ja foi importado, não precisa realizar novamente! + + + + :solution(s) already exist.are you sure you want to overwrite the existing solution(s)? + :Arquivo ja criado.Você quer sobrescrever? + + + + + Play + Tocar + + + + + Stop + Parar + + + + Resolution + Resolução + + + + File Size + Tamanho do arquivo + + + + Last Modify + Ultima modificação + + + + Program name conflicted + Conflito de nome + + + + Warning + Aviso + + + + You will delete the selected solution(s),are you sure? + Você quer deletar este arquivo? + + + + + Tip Info + Info + + + + ProgPortDlg + + + Solution Name + Nome + + + + Progress + Progresso + + + + Done + Concluido + + + + QAbstractSocket + + + Socket operation timed out + + + + + QObject + + + Setting up the LedOK Express... + Configurando... + + + + Input password + Digite a senha + + + + Error + Erro + + + + USB Update Program + Actualizar do programa por USB + + + + Password + Senha + + + + + Convertering + Convertendo + + + + + Tip + Dica + + + + No checked USB device + USB não checado + + + + please select usb device in list + Selecione o USB na lista + + + + SendProgThread + + + + Program is empty + Programa em branco + + + + Open file failed + Falaha ao abrir + + + + Read file failed + Ler arquivo com falha + + + + SendProgramDialog + + + + Publish + Publicar + + + + success info + Sucesso + + + + Refresh + Atualizar + + + + Online + Online + + + + Screen Size + Tamanho do display + + + + Alias + Apelido + + + + Security + Encriptado + + + + Progress + Progresso + + + + Remarks + Observações + + + + This screen is encrypted + Este display esta encriptado + + + + Waiting + À espera + + + + Input password + Digite a senha + + + + VerifyPassword + Verifique a senha + + + + Tip Info + Info + + + + password is wrong + A senha esta errada + + + + All + Todos + + + + UpgradeApkDialog + + + Update APK + Atualizar APK + + + + Select apk + Selecionar APK + + + + Upgrade + Atualizar + + + + Uninstall + Desinstalar + + + + check running state + Checando estatus + + + + Select Fpga + Selecionar FPGA + + + + Installing + Instalando + + + + Refresh + Atualizar + + + + Online + Online + + + + Security + Encriptação + + + + Progress + Progresso + + + + State + Estado + + + + All + Todos + + + + This screen is encrypted + Este display esta encriptado + + + + + Select Online APK + Selecione a APK online + + + + No Files + Sem arquivo + + + + Name + Nome + + + + Size + Tamamho + + + + Create Time + Criar + + + + Please select a file + Selecione um arquivo + + + + + + Tip + Dica + + + + NoSelectedController + Selecione o display + + + + File Read Fail + + + + + + Downloading Online File + Atualizando arquivo + + + + + + + + Error + Erro + + + + Online file is empty + Arquivo em branco + + + + File is empty + + + + + Uploading + Baixando + + + + Upload error + Erro ao atualizar + + + + Don't power off during this process + Desligou durante o processo + + + + Install error + Erro de instalação + + + + + Install Success + Sucesso + + + + Reminder + Lembrete + + + + Reminder: Uninstalling this program may cause the device to offline, cannot be found, lost configs and have a black screen. Please uninstall with caution! + Desinstalar o programa pode deixar o painel offline, perder as configurações e ficar com tela preta. Cuidado! + + + + Do you want to continue? + Continuar? + + + + Uninstalling + Desinstalando... + + + + Uninstall error + Erro ao desinstalar + + + + Uninstall success + Sucesso + + + + Check apk running status + Checar APK estatus + + + + Check error + Erro ao checar + + + + Running + Funcionando + + + + Not running + Parado + + + + Input password + Introduzir a senha + + + + VerifyPassword + Verifique a senha + + + + Tip Info + Dica + + + + password is wrong + A senha esta errada + + + + Alias + Apelido + + + + Same version, needn't update + A mesma versão, não é necessária actualização + + + + Install Failed + A instalação falhou + + + + The encrypted control card can be upgraded directly + O upograde pode ser realizado automaticamente + + + + WaitingDlg + + + Success + Successo + + + + mGuangYingPinWidget + + + Com + Com + + + + Main + Display principal + + + + + PortName + Nome da porta + + + + + BaudRate + BaudRate + + + + + DataBit + DataBit + + + + + OEBit + OEBit + + + + + No + No + + + + + Even + + + + + + Odd + + + + + + Space + + + + + + Mark + + + + + + StopBit + StopBit + + + + + + + + + + Open + Abrir + + + + Auxiliary + Auxiliar + + + + Refresh + Atualizar + + + + Param configuration + Parametro de config + + + + Resend times + Reenvio + + + + Delay millsecond + Atraso de milisegundos + + + + Clear + Limpar + + + + Debug + Debug + + + + Network + Network + + + + Program number + Numero do programa + + + + Send + Enviar + + + + Brightness + Brilho do display + + + + Set + Config + + + + Screen Off + Desligar + + + + + + + + + + + State:Off + Estado: Desligado + + + + Screen On + Ligar + + + + + + + + + + + + + + + + + + + Close + Fechar + + + + + State:On + Estado:Ligado + + + + + Tip + Dica + + + + + OpenPort COM failed + Falha ao abrir a porta + + + diff --git a/LedOK/translations/app_zh_CN.ts b/LedOK/ts/app_zh_CN.ts similarity index 87% rename from LedOK/translations/app_zh_CN.ts rename to LedOK/ts/app_zh_CN.ts index ff7d310..7b2f481 100644 --- a/LedOK/translations/app_zh_CN.ts +++ b/LedOK/ts/app_zh_CN.ts @@ -56,997 +56,997 @@ CtrlAdvancedPanel - + Advanced 高级设置 - + Screen Width(pixel) 屏幕宽(像素) - + Width - - + + Height - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + Set 设置 - + Alias 别名 - + Web Server Address: Web服务器地址: - - www.m2mled.net - - - - - www.ledaips.com - - - - - https://www.taxihub.cn:2340 - - - - - https://www.ledaips.com:2340 - - - - - https://www.36taxi.com:2340 - - - - - www.tlzxled.com - - - - + MCU Uploading 正在上传单片机 - + + Setting + 正在设置 + + + Traffic screen settings 交通屏设置 - + Setting protocol ... 正在设置协议 ... - + Set protocol 设置协议 - + Getting protocol ... 正在回读协议 ... - + Get protocol 回读协议 - - + + Port 端口 - + Realtimer Server Address: Realtimer地址: - + Firmware Management 固件管理 - + update or uninstall 更新或卸载 - + Clear 清空 - + Check Apk 检查Apk - + Uninstall 卸载 - + Running check 运行状态监测 - + Restart 重启 - + Check Log 查看日志 - + Start LedSet4 使用 LedSet4.0 配置LED模组(Apk Display2.0以上版本) - + Open ADB 打开ADB调试功能 - + Post Custom JSON Post Custom JSON - - - - - - - - + + + + + + Clear Program 清除节目 - + www.ledokcloud.com/realtime - + Config 配置 - + Refresh 刷新 - + Restore to default 恢复默认值 - + Taxi top screen configuration 车顶有无客电平配置 - - + + Service:High Out of service:Low 有客:高电平 无客:低电平 - - + + Service:Low Out of service:High 有客:低电平 无客:高电平 - + Binding *.ic account indentity voucher 绑定taxihub平台用户身份凭证 - + Rotate 旋转 - + Min brightness 最低亮度 - - - + + + Readback 回读 - + Send 发送 - + Max brightness 最高亮度 - - + + SetScreenSize 设置屏幕像素尺寸 - - - - - + + + + + Success 成功 - + Compant ID: 公司ID: - + Compant ID 公司ID - + InputWebServerAddressTip 请输入Web服务器地址 - + InputCompanyIdTip 请输入公司ID - - Do you want to modify webserveraddress and companyId? - 是否确认配置服务器地址和公司ID? - - - - + + SetOnlineAddr 设置web服务器地址 - - + + ClearRealtimeServer 清除 - - + + SetRealtimeServer 设置RealTimer地址 - + Tip Info 提示 - - + + RestartAndroid 重启 - - + + running 正在运行 - - + + no running 没有运行 - + Check Apk Version 查询已安装apk版本 - - + + UninstallSoftware 卸载 - - + + Check apk running status 监测APK运行状态 - - + + OpenAdb 打开ADB调试功能 - + indentity voucher (*.ic) 身份凭证(*.ic) - - - - - + + + + + InvokeTaxiAppFunction 绑定证书 - - + + AliIotSetting - + Software Version Info 软件版本信息 - + Package 包名 - + Version 版本 - - + + Package name is null 包名为空 - + Clearing Program 正在清除节目 - - - - + + Timeout 超时 - - - - + + + + Failed 失败 - + Getting Log 正在获取日志 - - - - - - - - - - - - - + + + + + + + + + + + + + Error 错误 - + Setting Timing Reboot 正在设置定时重启 - + Set Timing Reboot 设置定时重启 - + Getting Timing Reboot 正在获取定时重启 - + Get Timing Reboot 获取定时重启 - + totalResolution 包括行场数的分辨率 - + strCurDisplayResolution 当前显示屏分辨率 - - + + File not exist 文件不存在 - + Getting Player State 正在获取播放器状态 - - - + + + Get Player State 获取播放器状态 - - + + Player State 播放器状态 - - + + This operation will clear current program. + 这个操作会清除当前节目。 + + + + Do you want to continue? + 是否继续? + + + + Cannot Open File 文件打开失败 - + Uploading 正在上传 - + Update 更新 - - + + Set Display Mode 设置显示模式 - - + + Get Display Mode 获取显示模式 - - + + Set Screen Offset 设置屏幕偏移 - - + + Get Screen Offset 获取屏幕偏移 - + Open file Failed 文件打开失败 - + Setting Wallpaper 正在设置系统桌面背景 - - + + Set Wallpaper 设置系统桌面背景 - + System Updating 系统升级中 - - + + System Update 系统升级 - + Getting MCU Version 正在获取单片机版本 - - + + MCU Version 单片机版本 - + Select File 选择文件 - + Setting player background 正在设置播放器背景 - - + + Set player background 设置播放器背景 - + Clearing player background 正在清除播放器背景 - - - - - - - - + + + + + + + + Clear player background 清除播放器背景 - - + + GetScreenRotation 获取屏幕旋转 - + + + + Charging Station + 充电桩 + + + Setting Baud Rate 正在设置波特率 - + Set Baud Rate 设置波特率 - + Getting Baud Rate 正在获取波特率 - + Get Baud Rate 获取波特率 - + + Text is empty 文本为空 - + + Json Parse Error - + + Json isn't an Object - + + Info + 信息 + + + Setting card work mode ... 正在设置控制卡工作模式 ... - + Set card work mode 设置控制卡工作模式 - + Getting card work mode ... 正在回读控制卡工作模式 ... - + Get card work mode 回读控制卡工作模式 - + Input password 输入密码 - + Change Password 修改密码 - + Resolution Config 分辨率配置 - + Full screen 全屏 - + Part 局部 - + Display Mode 显示模式 - + Screen Position 屏幕位置 - + Offset 偏移 - + Hidden Settings 隐藏的设置 - + Click right button to hide 点击右键隐藏 - - + + Update MCU 更新单片机 - + Get MCU Version 获取单片机版本 - + Baud Config 波特率配置 - + Model 设备型号 - + Uart 串口节点 - + Baud 波特率 - - - - - - - + + + + + + + + Get 获取 - + Timing Reboot 定时重启 - + Protocol 协议 - + Server 服务端 - + Client 客户端 - - + + SetScreenRotation 设置屏幕旋转 - - + + SetMinBrightness 设置最小的亮度值 - - + + SetMaxBrightness 设置亮度最大值 - - + + GetMinBrightness 获取亮度最小值 - - + + GetMaxBrightness 获取亮度最大值 - - + + Card work mode 控制卡工作模式 - - + + SetSpecialResolution 设置分辨率 - - + + GetSpecialResolution 读取分辨率 - - + + CleanDisplayScreenSize 恢复默认分辨率 - - + + SetHighForBusy 设置有无客电平 - - + + GetStateForBusy 获取有无客电平 - - + + SetCardAlias 设置别名 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - + + + + + - - - - - + + + + + + + + + + + Tip 提示 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - + + + + + + + + + + NoSelectedController 请先选择大屏幕 - + InputWidthTip 请输入正确的宽度像素值 - + InputHeightTip 请输入正确的高度像素值 - + Password is error 密码错误 @@ -1054,138 +1054,138 @@ CtrlBrightPanel - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 请先选择大屏幕 - - + + SetBrightnessSensitivity 设置亮度传感器灵敏度 - - + + GetBrightnessSensitivity 获取亮度传感器灵敏度 - - + + SetMinBrightness 设置最小的亮度值 - - + + GetMinBrightness 获取亮度最小值 - - + + NeedSelectSensorTypeTip 请先选择传感器类型 - + Open file dialog 打开文件 - + Not found current worksheet 没找到当前工作表 - - + + SensorBrightnessTable 设置亮度传感器配置表 - + GetSensorBrightnessTable 获取传感器亮度配置表 - + no sensorBrightnessTable 控制卡没有发现亮度配置表 - + Save file 保存 - - + + GetCurrentSensorBrightness 获取当前亮度 - - + + SetBrightness 设置亮度 - + GetBrightness 获取亮度值 - + Brightness 屏体亮度 - + Import File 导入文件 - - + + BrightnessSchedule (*.bjs) - + Save File 保存文件 @@ -1216,14 +1216,14 @@ 获取定时亮度表 - - + + Error 错误 - Brightness Configuration + Brightness Config 亮度配置 @@ -1350,33 +1350,33 @@ CtrlHdmiPanel - + HDMI Configuration 画面输入源配置 - + Manual 手动 - + Schedule 定时 - - + + Tip 提示 - - + + NoSelectedController 请先选择大屏幕 @@ -1398,127 +1398,127 @@ 回读同异步模式 - + Import File 导入文件 - + Save File 保存文件 - - + + Sync Schedule 同步定时任务 - - + + SetTimingHdmiInTask 设置同步模式定时任务 - + GetTimingHdmiInTask 获取同步模式定时任务 - + Async 异步 - + Set 设置 - - + + Readback 回读 - + Start Time 开始时间 - + End Time 结束时间 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Add 添加 - - + + Apply 应用 - + Clear 清空 - + Delete 删除 - + Import 导入 - + Export 导出 - + By default, the asynchronous content is played, and the synchronous signal content is played in the fixed time period 默认播放异步内容,定时时间段内播放同步HDMI-IN端口输入内容 @@ -2088,206 +2088,206 @@ CtrlPowerPanel - - - + + + Off - - - + + + On - - - - - + + + + + Tip 提示 - - - - - + + + + + NoSelectedController 请先选择大屏幕 - - + + SetScreenOn 打开屏幕电源 - - + + SetScreenOff 关闭屏幕电源 - - + + IsScreenOn 读取开关状态 - + Import File 导入文件 - - + + PowerSchedule (*.pjs) 开关屏定时(*.pjs) - + Save File 保存文件 - - + + SetTimingScreenTask 设置屏幕定时开关任务 - + GetTimingScreenTask 获取屏幕定时开关任务 - + Power Configuration 开关屏控制 - + Manual 手动 - + Schedule 定时 - + Power 电源 - - + + Readback 回读 - + Start Time 开始时间 - + End Time 结束时间 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Add 添加 - + Apply 应用 - + Clear 清空 - + Delete 删除 - + Import 导入 - + Export 导出 - + It is power off state outside the schedule time period 定时时间段内显示屏开启,其他时间段为关屏状态 - + Clear Schedule 清除定时 - + Tip Info 提示 - + Clear schedule task? 取消计划任务? - - + + CleanTimingScreenTask 取消计划任务 @@ -2295,131 +2295,131 @@ CtrlPwdPanel - + Set Password 安全配置 - + Original password 原始密码 - + original password 原始密码 - - + + New password 新密码 - + Repeat new password 重复输入 - - - - + + + + Set encryption 加密 - + Cancel encryption 取消加密 - + Enter again 再次输入 - - - - - - - - - + + + + + + + + + Tip 提示 - - + + NoSelectedController 请先选择大屏幕 - - + + InputOriginalPasswordTip 请输入原始密码 - + InputNewPasswordTip 请输入新密码 - + InputRepeatPasswordTip 请重复输入新密码 - + InputRepeatPasswordNotSameTip 两次输入的密码不一致 - + Tip Info 提示 - + After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? 设置密码后,请记住密码并记录。如果忘记密码,设备将无法运行。确实要继续此操作吗? - - - - + + + + SetControllerPassword 设置加密 - - + + Error 错误 - - + + Success 成功 - - - + + + Modify password 修改密码 - - - - + + + + OriginalPasswordErrorTip 原始密码错误 @@ -2918,178 +2918,178 @@ CtrlVolumePanel - - - - + + + + Tip 提示 - - - - + + + + NoSelectedController 请先选择大屏幕 - - + + SetVolume 音量调节 - - + + GetVolume 获取当前音量 - + Import File 导入文件 - - + + Volume Schedule (*.vols) - + Save File 保存文件 - - + + SetAutoVolumeTask 配置定时音量表 - + GetAutoVolumeTask 获取定时音量表 - + Volume Control 音量调节 - + Manual 手动 - + Schedule 定时 - + Volume 音量 - + Set 设置 - - + + Readback 回读 - + Default volume 默认音量值 - + Add 添加 - + Clear 清空 - + Delete 删除 - + Import 导入 - + Export 导出 - + Volume value 音量值 - + Start Time 开始时间 - + End Time 结束时间 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Apply 应用 - + Default volume tip 提醒:定时时间段以外的时间显示屏为默认亮度 @@ -3097,326 +3097,301 @@ Def - - - - - - - + + + + + + + Device replied 设备回复 - - + + - + Success 成功 - - + + Fail 失败 - - DeviceItem - - - GetScreenDetailInfo - 更多信息 - - - - ReadbackPic - 回读画面 - - - - - Error - 错误 - - - - Input password - 输入密码 - - - - VerifyPassword - 验证密码 - - - - GetScreenshotFull - 回读画面 - - - - Tip Info - 提示 - - - - password is wrong - 密码错误 - - - - On - - - - - Off - - - DevicePanel - - + + All 总数 总数 - + Online 在线 在线 - + Refresh 刷新 刷新 - - - - + + + + Current Screen 当前屏幕 - - + + none - - + + Specify IP 指定IP 指定IP - + Current Brightness 当前亮度 - + Android Version 安卓版本 - + FPGA Version FPGA版本 - + Brightness Level 亮度等级 - + Android OS Resolution 安卓分辨率 - + Firmware Version 固件版本 - - - - + + + + Player Version 播放器固件版本 - + Detail Info 详细信息 - + Getting 正在获取 - + Specify IP list 指定IP列表 - + Search 搜索 - - + + Attention 注意 - - + + Please input IP address! 请输入IP地址! - + Cancel 取消 - + Screen ID 屏幕ID - - Screen IP - 屏幕IP - - - + Screen Size 屏幕像素 - + Alias 别名 + - readback pic + Screenshot 回读画面 - + + On - + + Off - + Brightness Adj. 亮度调节 - + Power Control 电源控制 - + Net Config 网络配置 - + Time Sync 对时管理 - + Video source 同异步配置 - + Password 设置密码 - + Advanced 高级设置 - + Volume Adj. 音量调节 - + Test 测试 - - + + Multi screen operation 多屏操作 - - + + selected num 选中数目 - - + + Clear 清空 - + More Info - 详细信息 + 更多信息 - + Screen Brightness 屏幕亮度 - + Power Status 屏幕开关状态 - + Security 加密 + + + Getting + 正在获取 + + + + + Error + 错误 + + + + Input password + 输入密码 + + + + VerifyPassword + 验证密码 + + + + Tip Info + 提示 + + + + password is wrong + 密码错误 + EAClock @@ -3531,73 +3506,73 @@ EBase - + Area 区域(px) - + X - + Y - + W - + H - + Border 边框 - - + + None - + Effect 特效 - + Rotate 旋转 - + Blink 闪烁 - + Speed 速度 - + Slow - + Moderate - + Fast @@ -3745,159 +3720,180 @@ EEnviron - - - - - - - + + + + + + + + + + + + + + north - - - - - - - + + + + + + + + + + + + + + east - - - - - - - + + + + + + + + + + + + + + south - - - - - - - + + + + + + + + + + + + + + west 西 - - + Temperature 温度 - - + Humidity 湿度 - - + Noise 噪音 - + Wind Speed 风速 - + Wind Direction 风向 - + Pressure + 气压 + + + Rainfall + 雨量 + + + Radiation + 辐射 + + + Beam + 光照强度 + + + Basic Properties 基本属性 - + Title 标题 - + Compensation 补偿 - - Wind speed - 风速 - - - - Wind direction - 风向 - - - + Left 靠左 - + Center 居中 - + Right 靠右 - + Single scroll 单行滚动 - + Speed 速度 - + ms/pixel 毫秒/像素 - + Back Color 背景色 - + Play Properties 播放方式 - - Refresh Cycle - 刷新周期 - - - - min. - 分钟 - - - + Play Duration 播放时长 - + s @@ -3905,37 +3901,37 @@ EGif - + Basic Properties 基本属性 - + File 文件 - + Select File 选择文件 - + Play Properties 播放方式 - + Play Duration 播放时长 - + s - + Play Times 播放次数 @@ -3943,73 +3939,73 @@ EMultiWin - + Please add media on the right 请在右边添加媒体,可以加入多个不同媒体,LED显示屏将按列表先后顺序播放 - + Media List 媒体列表 - - - + + + Text 文本 - - - + + + Photo 图片 - - - + + + Video 视频 - - - + + + Gif 动画 - - - + + + DClock 数字时钟 - - - + + + AClock 模拟时钟 - - - + + + Select File 选择文件 - - + + Environment 环境监测 - - + + Timer 计时器 @@ -4017,113 +4013,113 @@ EPhoto - + Basic Properties 基本属性 - + File 文件 - + Select File 选择文件 - + Image Read Error 图片读取错误 - + Play Properties 播放方式 - + Play Duration 播放时长 - - + + s - + Enter Style 入场特效 - + None - + Alpha_In 淡入 - + Moving to left 连续左移 - + Moving to right 连续右移 - + Moving to top 连续上移 - + Move to bottom 连续下移 - + Zoom in 放大 - + Zoom in to left_bottom 左下角放大 - + Zoom in to left_top 左上角放大 - + Zoom in to right_top 右上角放大 - + Zoom in to right bottom 右下角放大 - + Rotate to right 向右旋转 - + Rotate to left 向左旋转 - + Enter Duration 特效时长 @@ -4141,186 +4137,186 @@ 请输入内容 - + Basic Properties 基本属性 - + Back Color 背景色 - + Kerning 字间距 - + Line Spacing 行距 - + PageCount: 总页数: - + page - + Import txt File 导入 txt 文件 - + Select File 选择文件 - + Fail 失败 - + Cannot Open File 文件打开失败 - + Play Properties 播放方式 - + Flip 翻页 - + Scroll 滚动 - + Static 静态 - - - + + + Play Duration 播放时长 - + Duration/Page 每页播放时长 - + Effect time 特效时长 - - + + Tip Info 提示 - - + + Effect time cannot be longer than duration time 特效时长不能大于播放时长 - + s - + Text Color 文字颜色 - + Colorful Text 炫彩文字 - + Entrance Effect 入场特效 - + no - + random 随机 - + right to left 连续左移 - + bottom to top 连续上移 - + left to right 连续右移 - + top to bottom 连续下移 - + Head-Tail Spacing 首尾间隔 - + Scroll Style 滚动方向 - + Right -> Left 向左 - + Bottom -> Top 向上 - + Left -> Right 向右 - + Top -> Bottom 向下 - + Scroll Speed 滚动速度 @@ -4328,87 +4324,87 @@ ETimer - + day - + hour - + min - + sec - + Basic Properties 基本属性 - + Count Down 倒计时 - + Count Up 正计时 - + Time 目标时间 - + Day - + Hour - + Min - + Sec - + Multiline 多行显示 - + Text 文本 - + Play Properties 播放方式 - + Play Duration 播放时长 - + s @@ -4416,54 +4412,54 @@ EVideo - + Basic Properties 基本属性 - + File 文件 - + Play Properties 播放方式 - + Play Duration 播放时长 - + Select File 选择文件 - + s - + Play Times 播放次数 - + Video Transcoding 视频转码 - - + + Video Transcoding Progress 视频转码进度 - - + + Error 错误 @@ -4481,17 +4477,17 @@ EWeb - + Basic Properties 基本属性 - + Play Duration 播放时长 - + s @@ -4522,67 +4518,67 @@ GenTmpThread - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + SUN 星期日 - + AM 上午 - + PM 下午 - + day - + hour - + min - + sec @@ -4590,7 +4586,7 @@ ImgDlg - + Screenshot 屏幕截图 @@ -4641,172 +4637,177 @@ MainWindow - + Language 语言 - + Help 帮助 - - + + Check for updates 检查更新 - - + + firmware manager 固件管理 - - - + + + Preferences 偏好设置 - - + + Info 信息 - - - + + + About 关于 - - + + Setting 设置 - + Software Update 软件更新 - + CurVersion 当前版本 - + Latest Version 最新版本 - + Update Log 更新日志 - + The current version is already the latest version 已经是最新的版本 - + Video compress to 视频压缩成 - + Video transcoding to 视频转码成 - + Text antialiasing 文字反锯齿 - + TextAntilaTip (提示:该选项适合小间距大尺寸的屏幕,选中此项,文字边缘会有暗影已达到字体边缘光滑的效果;小尺寸屏幕和单双色屏幕不建议使用) - + Width Split 超长屏打折 - + + Program Send Batch + 同时发送节目数量 + + + Hide Detect Button 隐藏一键找卡 - + Show Lora Screen 显示光影屏 - + Download 下载 - + Fail 失败 - + Cannot Save File 保存文件失败 - - - + + + Downloading updates 正在下载更新 - + Error 错误 - + Device 设备管理 - + Program 节目管理 - + Control 终端控制 - + Lora Screen 光影屏 - + Check card 一键找卡 - + Tip Info 提示 - + RestoreLedCardIpByUdpTip 该操作会把局域网内的所有与计算机IP不在同一网段的控制卡修复成固定IP,请谨慎操作! @@ -4930,88 +4931,126 @@ PageListItem - + times - + Page name 节目名称 - + New 新建 - + Play times 播放次数 - + Sources Repeat 素材循环 - + Audios 音频 - + Total Dur 总时长 - - + + s - + Select File 选择文件 - + Duration 时长 - + Vol 音量 - + Valid Date 有效日期 - - + + Warning 警告 - + Start Time can't be later than End Time 开始时间不能晚于结束时间 - + End Time can't be earlier than Start Time 结束时间不能早于开始时间 - + Plan 时间计划表 + + PlanItemWgt + + + M + + + + + Tu + + + + + W + + + + + Th + + + + + F + + + + + Sa + + + + + Su + + + PlayWin @@ -5033,12 +5072,12 @@ PlayerBackSendThread - + Open file failed 文件读取失败 - + Read file failed 文件读取失败 @@ -5059,37 +5098,37 @@ ProgCreateDlg - + Resolution 分辨率 - + Solution Information 节目信息 - + Solution Name 节目名称 - + Width - + Height - + Remarks 备注 - + 每段打折宽度 (用空格分隔) @@ -5097,109 +5136,109 @@ ProgEditorWin - + Save 保存 - + Setting 设置 - + Text 文本 - + Photo 图片 - + Video 视频 - + Gif 动画 - + Clock 数字时钟 - + Analog Clock 模拟时钟 - + Environment 环境监测 - + Web 网页 - + MuliContentWindow 多素材窗口 - + In this window, a plurality of different program materials can be added and played according to the order of joining the list; 该窗口中可以加入多个不同是节目素材,并按照加入列表的先后顺序播放 - + Timer 计时器 - + Demo Video 测试视频 - + Play 播放 - + Stop 停止 - + Publish 发布 - - - + + + Select File 选择文件 - + program 节目列表 - + Add page 添加页面 - + Copy page 复制页面 @@ -5210,7 +5249,7 @@ - + Tip Info 提示 @@ -5220,127 +5259,120 @@ 确定要删除该节目页吗? - + Move up 向上移动一个页面 - + Move down 向下移动一个页面 - + widget properties 组件属性 - + Page properties 节目属性 - + Do you want to save the modifications? 是否保存修改? - + Create Dir failed 创建目录失败 - + Saving... 正在保存... - + Success 成功 - + Convertering 整理数据中 - + Generate preview data 生成预览数据 - - - + + + Error 错误 - + Rename fail when saving 重命名文件夹失败 - + Remove Recursively fail when saving - - - Warning - 警告 - ProgPanel - + New 新建 - + Edit 编辑 - + Delete 删除 - + Import 导入 - + Export 导出 - + Send 发送 - - + Publish 发布 - - + Name 名称 @@ -5367,58 +5399,54 @@ - + Play 播放 - + Stop 停止 - - + Resolution 分辨率 - - + File Size 文件大小 - - + Last Modify 最后修改时间 - - + USB Update USB更新 - + Program name conflicted 节目名称重复 - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否确认删除选中的节目? - + Tip Info 提示 @@ -5426,84 +5454,75 @@ ProgPortDlg - + Solution Name 节目名称 - + Progress 进度 - + Done 完成 + + QAbstractSocket + + + Socket operation timed out + + + QObject - + Setting up the LedOK Express... 初始化LedOK Express... - - + Input password 输入密码 - - VerifyPassword - 验证密码 - - - - + Error 错误 - - Tip Info - 提示 - - - - password is wrong - 密码错误 - - - + USB Update Program USB更新节目 - + Password 密码 - - + + Convertering 整理数据中 - - + + Tip 提示 - + No checked USB device 未检查USB设备 - + please select usb device in list 请在列表中选择usb设备 @@ -5530,68 +5549,83 @@ SendProgramDialog - - + + Publish 发布 - + success info - + Refresh 刷新 - - Screen ID - 屏幕ID - - - + Alias 别名 - + Online 在线 - - Screen IP - 屏幕IP - - - + Screen Size 屏幕像素 - + Security 加密 - + Progress 进度 - + Remarks 备注 - + This screen is encrypted 屏幕已加密 - + + Waiting + 等待中 + + + + Input password + 输入密码 + + + + VerifyPassword + 验证密码 + + + + Tip Info + 提示 + + + + password is wrong + 密码错误 + + + All 总数 @@ -5599,7 +5633,7 @@ UpgradeApkDialog - + Update APK 更新APK @@ -5614,123 +5648,67 @@ 升级 - + Uninstall 卸载 - + check running state 检测运行状态 - + Select Fpga 选择FPGA文件 - + Installing 正在安装 - + Refresh 刷新 - - Cancel - 取消 - - - - Screen ID - 屏幕ID - - - + Alias 别名 - + Online 在线 - - Screen IP - 屏幕IP - - - + Security 加密 - + Progress 进度 - - xixunplayer - - - - - cardsystem - - - - - taxiapp - - - - - starter - - - - - connection - - - - - displayer - - - - - FPGA - FPGA - - - - update - 更新 - - - + State 状态 - - + All 总数 - + This screen is encrypted 屏幕已加密 - + Select Online APK 选择在线APK @@ -5741,73 +5719,81 @@ 没有文件 - + Name 名称 - + Size 大小 - + Create Time 创建时间 - + Please select a file 请选择一个文件 - - - + + + Tip 提示 - - Is upgrading now. Please wait - 正在更新,请稍后 - - - + NoSelectedController 请先选择大屏幕 - - + + File Read Fail + 文件读取失败 + + + + Downloading Online File 正在下载在线文件 - - + + + + + Error 错误 - + Online file is empty 在线文件为空 - + + File is empty + 文件为空 + + + Uploading 正在上传 - + Upload error 上传错误 - + Don't power off during this process - 升级过程中请勿断电 + 这个过程请勿断电 @@ -5815,62 +5801,93 @@ 安装错误 - - Install success + + + Install Success 安装成功 - + Reminder 提示 - + Reminder: Uninstalling this program may cause the device to offline, cannot be found, lost configs and have a black screen. Please uninstall with caution! 提示:卸载此程序会导致平台掉线,找不到设备,配置参数丢失和黑屏问题,请谨慎卸载! - + Do you want to continue? 是否继续? - + Uninstalling 正在卸载 - + Uninstall error 卸载错误 - + Uninstall success 卸载成功 - + Check apk running status 监测APK运行状态 - + Check error 检查错误 - + Running 正在运行 - + Not running 没有运行 - + + Input password + 输入密码 + + + + VerifyPassword + 验证密码 + + + + Tip Info + 提示 + + + + password is wrong + 密码错误 + + + + Same version, needn't update + 相同版本, 不需要更新 + + + + Install Failed + 安装失败 + + + The encrypted control card can be upgraded directly 加密控制卡可以直接升级 @@ -5878,7 +5895,7 @@ WaitingDlg - + Success 成功 @@ -6087,65 +6104,4 @@ 串口打开失败 - - wPlanItem - - - M - - - - - Tu - - - - - W - - - - - Th - - - - - F - - - - - Sa - - - - - Su - - - - - wProgramPublishItem - - - Input password - 输入密码 - - - - VerifyPassword - 验证密码 - - - - Tip Info - 提示 - - - - password is wrong - 密码错误 - - diff --git a/LedOK/translations/app_zh_TW.ts b/LedOK/ts/app_zh_TW.ts similarity index 87% rename from LedOK/translations/app_zh_TW.ts rename to LedOK/ts/app_zh_TW.ts index 95c18c5..d42507b 100644 --- a/LedOK/translations/app_zh_TW.ts +++ b/LedOK/ts/app_zh_TW.ts @@ -56,997 +56,997 @@ CtrlAdvancedPanel - + Advanced 高級設定 - + Screen Width(pixel) 螢幕寬(點數) - + Width - - + + Height - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + Set 設定 - + Alias 別名 - + Web Server Address: Web伺服器地址: - - www.m2mled.net - - - - - www.ledaips.com - - - - - https://www.taxihub.cn:2340 - - - - - https://www.ledaips.com:2340 - - - - - https://www.36taxi.com:2340 - - - - - www.tlzxled.com - - - - + MCU Uploading 正在上傳單片機 - + + Setting + 正在設定 + + + Traffic screen settings 交通屏設定 - + Setting protocol ... 正在設定協定 - + Set protocol 設定協定 - + Getting protocol ... 正在回讀協定 ... - + Get protocol 回讀協定 - - + + Port - + Realtimer Server Address: Realtimer地址: - + Firmware Management 固件管理 - + update or uninstall 更新或卸載 - + Clear 清空 - + Check Apk 檢查Apk - + Uninstall 卸載 - + Running check 運行狀態監測 - + Restart 重啓 - + Check Log 查看日誌 - + Start LedSet4 - + Open ADB 打開ADB調試功能 - + Post Custom JSON Post Custom JSON - - - - - - - - + + + + + + Clear Program 清除節目 - + www.ledokcloud.com/realtime - + Config 配寘 - + Refresh 檢測 - + Restore to default 恢復預設值 - + Taxi top screen configuration 車頂有無客電平配寘 - - + + Service:High Out of service:Low 有客:高電平無客:低電平 - - + + Service:Low Out of service:High 有客:低電平 無客:高電平 - + Binding *.ic account indentity voucher 綁定taxihub平臺用戶身份憑證 - + Rotate 旋轉 - + Min brightness 最低亮度 - - - + + + Readback 回讀 - + Send 發送 - + Max brightness 最高亮度 - - + + SetScreenSize 設定螢幕點數尺寸 - - - - - + + + + + Success 成功 - + Compant ID: 公司ID: - + Compant ID 公司ID - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - + + + + + + + + + + NoSelectedController 請先選擇大螢幕 - + InputWebServerAddressTip 請輸入Web伺服器地址 - + InputCompanyIdTip 請輸入公司ID - - Do you want to modify webserveraddress and companyId? - 是否確認配寘伺服器地址和公司ID? - - - - + + SetOnlineAddr 設定web伺服器地址 - - + + ClearRealtimeServer 清除 - - + + SetRealtimeServer 設定RealTimer地址 - + Tip Info 提示 - - + + RestartAndroid 重啓 - - + + running 正在運行 - - + + no running 沒有運行 - + Check Apk Version 査詢已安裝apk版本 - - + + UninstallSoftware 卸載 - - + + Check apk running status 監測APK運行狀態 - - + + OpenAdb 打開ADB調試功能 - + indentity voucher (*.ic) 身份憑證(*.ic) - - - - - + + + + + InvokeTaxiAppFunction 綁定證書 - - + + AliIotSetting - + Software Version Info 軟體版本資訊 - + Package 包名 - + Version 版本 - - + + Package name is null 包名為空 - + Clearing Program 正在清除節目 - - - - + + Timeout 超時 - - - - + + + + Failed 失敗 - + Getting Log 讀取日誌 - - - - - - - - - - - - - + + + + + + + + + + + + + Error 錯誤 - + Setting Timing Reboot 正在設定定時重啓 - + Set Timing Reboot 設定定時重啓 - + Getting Timing Reboot 正在獲取定時重啓 - + Get Timing Reboot 獲取定時重啓 - + totalResolution 行数を含む解像度 - + strCurDisplayResolution 當前顯示分辯率 - - + + File not exist 檔案不存在 - + Getting Player State 正在獲取播放機狀態 - - - + + + Get Player State 獲取播放機狀態 - - + + Player State 播放機狀態 - - + + This operation will clear current program. + 這個操作會清除當前節目 + + + + Do you want to continue? + 是否繼續? + + + + Cannot Open File 檔案打開失敗 - + Uploading 正在上傳 - + Update 更新 - - + + Set Display Mode 設定顯示模式 - - + + Get Display Mode 獲取顯示模式 - - + + Set Screen Offset 設定螢幕偏移 - - + + Get Screen Offset 獲取螢幕偏移 - + Open file Failed 檔案打開失敗 - + Setting Wallpaper 正在設定系統桌面背景 - - + + Set Wallpaper 設定系統桌面背景 - + System Updating 系統升級中 - - + + System Update 系統升級 - + Getting MCU Version 正在獲取單片機版本 - - + + MCU Version 單片機版本 - + Select File 選擇檔案 - + Setting player background 正在設定播放機背景 - - + + Set player background 設定播放機背景 - + Clearing player background 正在清除播放機背景 - - - - - - - - + + + + + + + + Clear player background 清除播放機背景 - - + + GetScreenRotation 獲取荧幕旋轉 - + + + + Charging Station + 充電樁 + + + Setting Baud Rate 正在設定串列傳輸速率 - + Set Baud Rate 設定串列傳輸速率 - + Getting Baud Rate 正在讀取串列傳輸速率 - + Get Baud Rate 讀取串列傳輸速率 - + + Text is empty - + + Json Parse Error - + + Json isn't an Object - + + Info + 資訊 + + + Setting card work mode ... 正在設定控制卡工作模式 ... - + Set card work mode 設定控制卡工作模式 - + Getting card work mode ... 正在回讀控制卡工作模式 ... - + Get card work mode 回讀控制卡工作模式 - + Input password 輸入密碼 - + Change Password 修改密碼 - + Resolution Config 分辯率配寘 - + Full screen 全屏 - + Part 局部 - + Display Mode 顯示模式 - + Screen Position 螢幕位置 - + Offset 偏移 - + Hidden Settings 隱藏的設定 - + Click right button to hide 點擊右鍵隱藏 - - + + Update MCU 更新單片機 - + Get MCU Version 獲取單片機版本 - + Baud Config 串列傳輸速率配寘 - + Model 設備型號 - + Uart 串口節點 - + Baud 串列傳輸速率 - - - - - - - + + + + + + + + Get 讀取 - + Timing Reboot 定時重啓 - + Protocol 協定 - + Server 服務端 - + Client 用戶端 - - + + SetScreenRotation 設定螢幕旋轉 - - + + SetMinBrightness 設定最小的亮度值 - - + + SetMaxBrightness 設定亮度最大值 - - + + GetMinBrightness 獲取亮度最小值 - - + + GetMaxBrightness 獲取亮度最大值 - - + + Card work mode 控制卡工作模式 - - + + SetSpecialResolution 設定分辯率 - - + + GetSpecialResolution 讀取分辯率 - - + + CleanDisplayScreenSize 恢復默認分辯率 - - + + SetHighForBusy 設定有無客電平 - - + + GetStateForBusy 獲取有無客電平 - - + + SetCardAlias 設定別名 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - + + + + + - - - - - + + + + + + + + + + + Tip 提示 - + InputWidthTip 請輸入正確的寬度點數值 - + InputHeightTip 請輸入正確的高度點數值 - + Password is error 密碼錯誤 @@ -1054,138 +1054,138 @@ CtrlBrightPanel - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + Tip 提示 - - - - - - - - - + + + + + + + + + NoSelectedController 請先選擇大螢幕 - - + + SetBrightnessSensitivity 設定亮度感測器靈敏度 - - + + GetBrightnessSensitivity 獲取亮度感測器靈敏度 - - + + SetMinBrightness 設定最小的亮度值 - - + + GetMinBrightness 獲取亮度最小值 - - + + NeedSelectSensorTypeTip 請先選擇感測器類型 - + Open file dialog 打開文件 - + Not found current worksheet 沒找到當前工作表 - - + + SensorBrightnessTable 設定亮度感測器配寘錶 - + GetSensorBrightnessTable 獲取感測器亮度配寘錶 - + no sensorBrightnessTable 控制卡沒有發現亮度配寘錶 - + Save file 保存 - - + + GetCurrentSensorBrightness 獲取當前亮度 - - + + SetBrightness 設定亮度 - + GetBrightness 獲取亮度值 - + Brightness 屏体亮度 - + Import File 導入檔案 - - + + BrightnessSchedule (*.bjs) - + Save File 保存 @@ -1221,14 +1221,14 @@ 獲取定時亮度錶 - - + + Error 錯誤 - Brightness Configuration + Brightness Config 亮度配寘 @@ -1355,33 +1355,33 @@ CtrlHdmiPanel - + HDMI Configuration 畫面輸入源配寘 - + Manual 手動 - + Schedule 定時 - - + + Tip 提示 - - + + NoSelectedController 請先選擇大螢幕 @@ -1403,127 +1403,127 @@ 回讀同非同步模式 - + Import File 導入檔案 - + Save File 保存 - - + + Sync Schedule 同步定時任務 - - + + SetTimingHdmiInTask 設定同步模式定時任務 - + GetTimingHdmiInTask 獲取同步模式定時任務 - + Async BOX - + Set 設定 - - + + Readback 回讀 - + Start Time 開始時間 - + End Time 結束時間 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Add 添加 - - + + Apply 應用 - + Clear 清空 - + Delete 删除 - + Import 導入 - + Export 匯出 - + By default, the asynchronous content is played, and the synchronous signal content is played in the fixed time period 默認播放非同步內容,定時時間段內播放同步HDMI-IN埠輸入內容 @@ -2093,206 +2093,206 @@ CtrlPowerPanel - - - + + + Off - - - + + + On - - - - - + + + + + Tip 提示 - - - - - + + + + + NoSelectedController 請先選擇大螢幕 - - + + SetScreenOn 打開螢幕電源 - - + + SetScreenOff 關閉螢幕電源 - - + + IsScreenOn 讀取開關狀態 - + Import File 導入檔案 - - + + PowerSchedule (*.pjs) 開關屏定時(*.pjs) - + Save File 保存 - - + + SetTimingScreenTask 設定螢幕定時開關任務 - + GetTimingScreenTask 獲取螢幕定時開關任務 - + Power Configuration 開關屏控制 - + Manual 手動 - + Schedule 定時 - + Power 電源 - - + + Readback 回讀 - + Start Time 開始時間 - + End Time 結束時間 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Add 添加 - + Apply 應用 - + Clear 清空 - + Delete 删除 - + Import 導入 - + Export 匯出 - + It is power off state outside the schedule time period 定時時間段內顯示幕開啟,其他時間段為關屏狀態 - + Clear Schedule 清除定時 - + Tip Info 提示 - + Clear schedule task? 取消計畫任務? - - + + CleanTimingScreenTask 取消計畫任務 @@ -2300,131 +2300,131 @@ CtrlPwdPanel - + Set Password 安全配寘 - + Original password 原始密碼 - + original password 原始密碼 - - + + New password 新密碼 - + Repeat new password 重複輸入 - - - - + + + + Set encryption 加密 - + Cancel encryption 取消加密 - + Enter again 再次輸入 - - - - - - - - - + + + + + + + + + Tip 提示 - - + + NoSelectedController 請先選擇大螢幕 - - + + InputOriginalPasswordTip 請輸入原始密碼 - + InputNewPasswordTip 請輸入新密碼 - + InputRepeatPasswordTip 請重複輸入新密碼 - + InputRepeatPasswordNotSameTip 兩次輸入的密碼不一致 - + Tip Info 提示 - + After setting the password, please remember the password and record it. If you forget the password, the device will be unable to operate. Are you sure you want to continue with this operation? 設定密碼後,請記住密碼並記錄。如果忘記密碼,設備將無法運行。確實要繼續此操作嗎? - - - - + + + + SetControllerPassword 設定加密 - - + + Error 錯誤 - - + + Success 成功 - - - + + + Modify password 修改密碼 - - - - + + + + OriginalPasswordErrorTip 原始密碼錯誤 @@ -2923,178 +2923,178 @@ CtrlVolumePanel - - - - + + + + Tip 提示 - - - - + + + + NoSelectedController 請先選擇大螢幕 - - + + SetVolume 音量調節 - - + + GetVolume 獲取當前音量 - + Import File 導入檔案 - - + + Volume Schedule (*.vols) - + Save File 保存 - - + + SetAutoVolumeTask 配寘定時音量表 - + GetAutoVolumeTask 獲取定時音量表 - + Volume Control 音量調節 - + Manual 手動 - + Schedule 定時 - + Volume 音量 - + Set 設定 - - + + Readback 回讀 - + Default volume 默認音量值 - + Add 添加 - + Clear 清空 - + Delete 删除 - + Import 導入 - + Export 匯出 - + Volume value 音量值 - + Start Time 開始時間 - + End Time 結束時間 - + SUN 星期日 - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + Apply 應用 - + Default volume tip 提醒:定時時間段以外的時間顯示幕為默認亮度 @@ -3102,324 +3102,299 @@ Def - - - - - - - + + + + + + + Device replied 設備回復 - - + + - + Success 成功 - - + + Fail 失敗 - - DeviceItem - - - GetScreenDetailInfo - 更多資訊 - - - - ReadbackPic - 回讀畫面 - - - - - Error - 錯誤 - - - - Input password - 輸入密碼 - - - - VerifyPassword - 驗證密碼 - - - - GetScreenshotFull - 回讀畫面 - - - - Tip Info - 提示 - - - - password is wrong - 密碼錯誤 - - - - On - - - - - Off - - - DevicePanel - - + + All 總數 - + Online 在线 線上 - + Refresh 檢測 - - + + Specify IP 指定IP 指定IP - - - - + + + + Current Screen 当前屏幕 - - + + none - + Current Brightness 當前亮度 - + Android Version 安卓版本 - + FPGA Version FPGA版本 - + Brightness Level 亮度等級 - + Android OS Resolution 安卓分辯率 - + Firmware Version 固件版本 - - - - + + + + Player Version 播放機固件版本 - + Detail Info 詳細資訊 - + Getting 正在獲取 - + Specify IP list 指定IP清單 - + Search 蒐索 - - + + Attention 注意 - - + + Please input IP address! 請輸入IP地址! - + Cancel 取消 - + Screen ID 螢幕ID - - Screen IP - 螢幕IP - - - + Screen Size 螢幕點數 - + Alias 別名 + - readback pic + Screenshot 回讀畫面 - + + On - + + Off - + Brightness Adj. 亮度調節 - + Power Control 電源控制 - + Net Config 網絡配寘 - + Time Sync 對時管理 - + Video source 同異步配寘 - + Password 設寘密碼 - + Advanced 高級設定 - + Volume Adj. 音量調節 - + Test 測試 - - + + Multi screen operation 多屏操作 - - + + selected num 選中數目 - - + + Clear 清空 - + More Info - 詳細資訊 + 更多資訊 - + Screen Brightness 螢幕亮度 - + Power Status 螢幕開關狀態 - + Security 加密 + + + Getting + 正在獲取 + + + + + Error + 錯誤 + + + + Input password + 輸入密碼 + + + + VerifyPassword + 驗證密碼 + + + + Tip Info + 提示 + + + + password is wrong + 密碼錯誤 + EAClock @@ -3534,73 +3509,73 @@ EBase - + Area 區域(px) - + X - + Y - + W - + H - + Border 邊框 - - + + None - + Effect 特效 - + Rotate 旋轉 - + Blink 閃爍 - + Speed 速度 - + Slow - + Moderate - + Fast @@ -3748,159 +3723,180 @@ EEnviron - - - - - - - + + + + + + + + + + + + + + north - - - - - - - + + + + + + + + + + + + + + east - - - - - - - + + + + + + + + + + + + + + south - - - - - - - + + + + + + + + + + + + + + west 西 - - + Temperature 溫度 - - + Humidity 濕度 - - + Noise 譟音 - + Wind Speed 風速 - + Wind Direction 風向 - + Pressure + 氣壓 + + + Rainfall + 雨量 + + + Radiation + 輻射 + + + Beam + 光照強度 + + + Basic Properties 基本屬性 - + Title 標題 - + Compensation 補償 - - Wind speed - 風速 - - - - Wind direction - 風向 - - - + Left 靠左 - + Center 居中 - + Right 靠右 - + Single scroll 單行滾動 - + Speed 速度 - + ms/pixel 毫秒/點數 - + Back Color 背景色 - + Play Properties 播放管道 - - Refresh Cycle - 重繪週期 - - - - min. - 分鐘 - - - + Play Duration 播放時長 - + s @@ -3908,37 +3904,37 @@ EGif - + Basic Properties 基本屬性 - + File 檔案 - + Select File 選擇檔案 - + Play Properties 播放管道 - + Play Duration 播放時長 - + s - + Play Times 播放次數 @@ -3946,73 +3942,73 @@ EMultiWin - + Please add media on the right 請在右邊添加媒體,可以加入多個不同媒體,LED顯示幕將按清單先後順序播放 - + Media List 媒體清單 - - - + + + Text 文字 - - - + + + Photo 圖片 - - - + + + Video 視頻 - - - + + + Gif 動畫 - - - + + + DClock 數位時鐘 - - - + + + AClock 圓形時鐘 - - - + + + Select File 選擇檔案 - - + + Environment 環境監測 - - + + Timer 計時器 @@ -4020,113 +4016,113 @@ EPhoto - + Basic Properties 基本屬性 - + File 檔案 - + Select File 選擇檔案 - + Image Read Error 圖片讀取錯誤 - + Play Properties 播放管道 - + Play Duration 播放時長 - - + + s - + Enter Style 入場特效 - + None - + Alpha_In 淡入 - + Moving to left 連續左移 - + Moving to right 連續右移 - + Moving to top 連續上移 - + Move to bottom 連續下移 - + Zoom in 放大 - + Zoom in to left_bottom 左下角放大 - + Zoom in to left_top 左上角放大 - + Zoom in to right_top 右上角放大 - + Zoom in to right bottom 右下角放大 - + Rotate to right 向右旋轉 - + Rotate to left 向左旋轉 - + Enter Duration 特效時長 @@ -4144,186 +4140,186 @@ 請輸入內容 - + Basic Properties 基本屬性 - + Back Color 背景色 - + Kerning 字間距 - + Line Spacing 行距 - + PageCount: 總頁數: - + page - + Import txt File 導入 txt 檔案 - + Select File 選擇檔案 - + Fail 失敗 - + Cannot Open File 檔案打開失敗 - + Play Properties 播放管道 - + Flip 翻頁 - + Scroll 滾動 - + Static 靜態 - - - + + + Play Duration 播放時長 - + Duration/Page 每頁播放時長 - + Effect time 特效時長 - - + + Tip Info 提示 - - + + Effect time cannot be longer than duration time 特效時長不能大於播放時長 - + s - + Text Color 文字顏色 - + Colorful Text 炫彩文字 - + Entrance Effect 入場特效 - + no - + random 隨機 - + right to left 連續左移 - + bottom to top 連續上移 - + left to right 連續右移 - + top to bottom 連續下移 - + Head-Tail Spacing 首尾間隔 - + Scroll Style 滾動方向 - + Right -> Left 向左 - + Bottom -> Top 向上 - + Left -> Right 向右 - + Top -> Bottom 向下 - + Scroll Speed 滾動速度 @@ -4331,87 +4327,87 @@ ETimer - + day - + hour - + min - + sec - + Basic Properties 基本屬性 - + Count Down 倒數計時 - + Count Up 正計時 - + Time 目標時間 - + Day - + Hour - + Min - + Sec - + Multiline 多行顯示 - + Text 文字 - + Play Properties 播放管道 - + Play Duration 播放時長 - + s @@ -4419,54 +4415,54 @@ EVideo - + Basic Properties 基本屬性 - + File 檔案 - + Play Properties 播放管道 - + Play Duration 播放時長 - + Select File 選擇檔案 - + s - + Play Times 播放次數 - + Video Transcoding - - + + Video Transcoding Progress 視頻轉碼進度 - - + + Error 錯誤 @@ -4484,17 +4480,17 @@ EWeb - + Basic Properties 基本屬性 - + Play Duration 播放時長 - + s @@ -4525,67 +4521,67 @@ GenTmpThread - + MON 星期一 - + TUE 星期二 - + WED 星期三 - + THU 星期四 - + FRI 星期五 - + SAT 星期六 - + SUN 星期日 - + AM 上午 - + PM 下午 - + day - + hour - + min - + sec @@ -4593,7 +4589,7 @@ ImgDlg - + Screenshot 螢幕截圖 @@ -4644,172 +4640,177 @@ MainWindow - + Language 語言 - + Help 幫助 - - + + Check for updates 檢查更新 - - + + firmware manager 固件管理 - - - + + + Preferences 偏好設定 - - + + Info 資訊 - - - + + + About 關於 - - + + Setting 設定 - + Software Update 軟體更新 - + CurVersion 當前版本 - + Latest Version 最新版本 - + Update Log 更新日誌 - + The current version is already the latest version 已經是最新的版本 - + Video compress to 視頻壓縮成 - + Video transcoding to 視頻轉碼成 - + Text antialiasing 文字反鋸齒 - + TextAntilaTip (提示:該選項適合小間距大尺寸的螢幕,選中此項,文字邊緣會有暗影已達到字體邊緣光滑的效果;小尺寸螢幕和單雙色螢幕不建議使用) - + Width Split 超長屏打折 - + + Program Send Batch + 同時發送節目數量 + + + Hide Detect Button 隱藏一鍵找卡 - + Show Lora Screen 顯示光影屏 - + Download 下載 - + Fail 失敗 - + Cannot Save File 保存檔案失敗 - - - + + + Downloading updates 下載更新 - + Error 錯誤 - + Device 設備管理 - + Program 節目管理 - + Control 終端控制 - + Lora Screen 光影屏 - + Check card 一鍵找卡 - + Tip Info 提示 - + RestoreLedCardIpByUdpTip 該操作會把局域網內的所有與電腦IP不在同一網段的控制卡修復成固定IP,請謹慎操作! @@ -4933,88 +4934,126 @@ PageListItem - + times - + Page name 節目名稱 - + New 新建 - + Play times 播放次數 - + Sources Repeat 素材迴圈 - + Audios 音訊 - + Total Dur 總時長 - - + + s - + Select File 選擇檔案 - + Duration 時長 - + Vol 音量 - + Valid Date 有效日期 - - + + Warning 警告 - + Start Time can't be later than End Time 開始時間不能晚於結束時間 - + End Time can't be earlier than Start Time 結束時間不能早於開始時間 - + Plan 時間計畫表 + + PlanItemWgt + + + M + + + + + Tu + + + + + W + + + + + Th + + + + + F + + + + + Sa + + + + + Su + + + PlayWin @@ -5036,12 +5075,12 @@ PlayerBackSendThread - + Open file failed 檔案打開失敗 - + Read file failed 檔案讀取失敗 @@ -5062,37 +5101,37 @@ ProgCreateDlg - + Resolution 分辯率 - + Solution Information 節目資訊 - + Solution Name 節目名稱 - + Width - + Height - + Remarks 備註 - + 每段打折宽度 (用空格分隔) 每段讓利寬度(用空格分隔) @@ -5100,109 +5139,109 @@ ProgEditorWin - + Save 保存 - + Setting 設定 - + Text 文字 - + Photo 圖片 - + Video 視頻 - + Gif 動畫 - + Clock 數位時鐘 - + Analog Clock 圓形時鐘 - + Environment 環境監測 - + Web 網頁 - + MuliContentWindow 多素材視窗 - + In this window, a plurality of different program materials can be added and played according to the order of joining the list; 該視窗中可以加入多個不同是節目素材,並按照加入列表的先後順序播放 - + Timer 計時器 - + Demo Video 測試視頻 - + Play 播放 - + Stop 停止 - + Publish 發佈 - - - + + + Select File 選擇檔案 - + program 節目清單 - + Add page 添加頁面 - + Copy page 複製頁面 @@ -5213,7 +5252,7 @@ - + Tip Info 提示 @@ -5223,127 +5262,120 @@ 確定要删除該節目頁嗎? - + Move up 向上移動一個頁面 - + Move down 向下移動一個頁面 - + widget properties 組件内容 - + Page properties 節目内容 - + Do you want to save the modifications? 是否保存修改? - + Create Dir failed 創建目錄失敗 - + Saving... 正在保存… - + Success 成功 - + Convertering 整理數據中 - + Generate preview data 生成預覽數據 - - - + + + Error 錯誤 - + Rename fail when saving - + Remove Recursively fail when saving - - - Warning - 警告 - ProgPanel - + New 新建 - + Edit 編輯 - + Delete 删除 - + Import 導入 - + Export 匯出 - + Send 發送 - - + Publish 發佈 - - + Name 名稱 @@ -5370,58 +5402,54 @@ - + Play 播放 - + Stop 停止 - - + Resolution 分辯率 - - + File Size 文件大小 - - + Last Modify 最後修改時間 - - + USB Update USB更新 - + Program name conflicted 節目名稱重複 - + Warning 警告 - + You will delete the selected solution(s),are you sure? 是否確認删除選中的節目? - + Tip Info 提示 @@ -5429,84 +5457,75 @@ ProgPortDlg - + Solution Name 節目名稱 - + Progress 進度 - + Done 完成 + + QAbstractSocket + + + Socket operation timed out + + + QObject - + Setting up the LedOK Express... 初始化LedOK Express… - - + Input password 輸入密碼 - - VerifyPassword - 驗證密碼 - - - - + Error 錯誤 - - Tip Info - 提示 - - - - password is wrong - 密碼錯誤 - - - + USB Update Program USB更新節目 - + Password 密碼 - - + + Convertering 整理數據中 - - + + Tip 提示 - + No checked USB device 未檢查USB設備 - + please select usb device in list 請在清單中選擇usb設備 @@ -5533,68 +5552,83 @@ SendProgramDialog - - + + Publish 發佈 - + success info - + Refresh 檢測 - - Screen ID - 螢幕ID - - - + Alias 別名 - + Online 線上 - - Screen IP - 螢幕IP - - - + Screen Size 螢幕點數 - + Security 加密 - + Progress 進度 - + Remarks 備註 - + This screen is encrypted 螢幕已加密 - + + Waiting + 等待中 + + + + Input password + 輸入密碼 + + + + VerifyPassword + 驗證密碼 + + + + Tip Info + 提示 + + + + password is wrong + 密碼錯誤 + + + All 總數 @@ -5602,7 +5636,7 @@ UpgradeApkDialog - + Update APK 更新APK @@ -5617,123 +5651,67 @@ 陞級 - + Uninstall 卸載 - + check running state 檢測運行狀態 - + Select Fpga 選擇FPGA檔案 - + Installing 正在安裝 - + Refresh 檢測 - - Cancel - 取消 - - - - Screen ID - 螢幕ID - - - + Alias 別名 - + Online 線上 - - Screen IP - 螢幕IP - - - + Security 加密 - + Progress 進度 - - xixunplayer - - - - - cardsystem - - - - - taxiapp - - - - - starter - - - - - connection - - - - - displayer - - - - - FPGA - FPGA - - - - update - 更新 - - - + State 陳述 - - + All 總數 - + This screen is encrypted 螢幕已加密 - + Select Online APK 選擇線上APK @@ -5744,73 +5722,81 @@ 沒有檔案 - + Name 名稱 - + Size 大小 - + Create Time 創建時間 - + Please select a file 請選擇一個檔案 - - - + + + Tip 提示 - - Is upgrading now. Please wait - 正在更新,請稍後 - - - + NoSelectedController 請先選擇大螢幕 - - + + File Read Fail + 檔案讀取失敗 + + + + Downloading Online File 正在下載線上檔案 - - + + + + + Error 錯誤 - + Online file is empty 線上檔案為空 - + + File is empty + 檔案為空 + + + Uploading - + Upload error 上傳錯誤 - + Don't power off during this process - 陞級過程中請勿斷電 + 這個過程請勿斷電 @@ -5818,62 +5804,93 @@ 安裝錯誤 - - Install success + + + Install Success 安裝成功 - + Reminder 提示 - + Reminder: Uninstalling this program may cause the device to offline, cannot be found, lost configs and have a black screen. Please uninstall with caution! 提示:卸載此程式會導致平臺掉線,找不到設備,配寘參數遺失和黑屏問題,請謹慎卸載! - + Do you want to continue? 是否繼續? - + Uninstalling 正在卸載 - + Uninstall error 卸載錯誤 - + Uninstall success 卸載成功 - + Check apk running status 監測APK運行狀態 - + Check error 檢查錯誤 - + Running 正在運行 - + Not running 沒有運行 - + + Input password + 輸入密碼 + + + + VerifyPassword + 驗證密碼 + + + + Tip Info + 提示 + + + + password is wrong + 密碼錯誤 + + + + Same version, needn't update + 相同版本,不需要更新 + + + + Install Failed + 安裝失敗 + + + The encrypted control card can be upgraded directly 加密控制卡可以直接陞級 @@ -5881,7 +5898,7 @@ WaitingDlg - + Success 成功 @@ -6090,65 +6107,4 @@ 串口打開失敗 - - wPlanItem - - - M - - - - - Tu - - - - - W - - - - - Th - - - - - F - - - - - Sa - - - - - Su - - - - - wProgramPublishItem - - - Input password - 輸入密碼 - - - - VerifyPassword - 驗證密碼 - - - - Tip Info - 提示 - - - - password is wrong - 密碼錯誤 - - diff --git a/LedOK/translations/qt_zh_CN raw.ts b/LedOK/ts/qt_zh_CN raw.ts similarity index 100% rename from LedOK/translations/qt_zh_CN raw.ts rename to LedOK/ts/qt_zh_CN raw.ts diff --git a/LedOK/translations/qt_zh_CN.ts b/LedOK/ts/qt_zh_CN.ts similarity index 100% rename from LedOK/translations/qt_zh_CN.ts rename to LedOK/ts/qt_zh_CN.ts diff --git a/LedOK/translations/qt_zh_TW.ts b/LedOK/ts/qt_zh_TW.ts similarity index 100% rename from LedOK/translations/qt_zh_TW.ts rename to LedOK/ts/qt_zh_TW.ts