(m_list_defaultOptions.at(ii).first);
+ if(strcmp(opt->name, name.c_str()) == 0)
+ {
+ title = QString::fromStdString(opt->title);
+ type = opt->type;
+ if(type == SANE_TYPE_STRING)
+ val = from_default_language(val.c_str(), nullptr);
+ break;
+ }
+ }
+
+ if(title.length())
+ {
+ info += tr("") + title + tr(":
");
+ info += tr(" ") + QString::fromStdString(sane_val_to_string(val.c_str(), type)) + tr("
");
+ }
+ else {
+ if(val.length() == sizeof(SANE_Gamma))
+ memcpy(&m_gammaData, val.c_str(), sizeof(SANE_Gamma));
+ }
+ }while(schm->next_config(name, val));
+ }
+ if(schm)
+ schm->release();
+
+ sketch_->setHtml(info);
+}
+void hg_settingdialog::slot_pushButton_scheme_management(void)
+{
+ QPushButton* btn = qobject_cast(sender());
+
+ if(btn == rename_)
+ {
+ int id = 0;
+ QString text(find_current_scheme_menu(&id));
+ if(!text.isEmpty() && id >= 0)
+ {
+ Dialog_Input dlg;
+
+ dlg.init_value(text);
+ dlg.setWindowTitle(tr("configuration scheme name change"));
+ if(dlg.exec() && text != dlg.get_inputting_value())
+ {
+ std::vector now;
+ std::string str = dlg.get_inputting_value().toStdString();
+
+ cur_cfg_->get_all_schemes(now);
+ for(auto& v: now)
+ {
+ if(v == str)
+ {
+ QMessageBox::information(this, tr("tips"), tr("scheme name: ") + QString::fromStdString(str) + tr(" already exists"));
+ return;
+ }
+ }
+ disconnect(comb_, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_current_scheme_changed()));
+ comb_->removeItem(id);
+ comb_->insertItem(id, QString::fromStdString(str));
+ comb_->setCurrentIndex(id);
+ connect(comb_, SIGNAL(currentTextChanged(const QString)), this, SLOT(on_current_scheme_changed()));
+
+ cur_cfg_->rename_scheme(text.toStdString().c_str(), str.c_str());
+ cur_cfg_->save();
+ changed_count_++;
+ }
+ }
+ }
+ else if(btn == apply_)
+ {
+ QString text(find_current_scheme_menu());
+ gb::sane_config_schm *cur = nullptr;
+
+ cur_cfg_->select_scheme(text.toStdString().c_str());
+ cur = cur_cfg_->get_scheme();
+ if(!cur)
+ cur = new gb::sane_config_schm();
+ cur->copy_default_value(cur_scheme_);
+ cur_scheme_->end_setting(true);
+ cur_scheme_->release();
+ cur_scheme_ = cur;
+ cur_scheme_->begin_setting();
+
+ apply_current_scheme();
+ updateUIStatus();
+ changed_count_++;
+ }
+ else if(btn == del_this_)
+ {
+ int id = -1;
+ QString text(find_current_scheme_menu(&id));
+
+ if(text.isEmpty())
+ return;
+
+ QMessageBox msg(QMessageBox::Question, tr("be sure to delete the configuration"),
+ tr("Are you sure you want to delete the configuration \"") + text + tr("\" ?"), QMessageBox::Yes | QMessageBox::No, this);
+ msg.exec();
+ if (msg.clickedButton() != msg.button(QMessageBox::Yes))
+ return;
+
+ gb::sane_config_schm *sch = cur_cfg_->get_scheme(text.toStdString().c_str());
+ cur_cfg_->remove_scheme(text.toStdString().c_str());
+ comb_->removeItem(id);
+ sch->release();
+ if(sch == cur_scheme_)
+ {
+ restore_2_default_settings();
+ updateUIStatus();
+ }
+
+ on_current_scheme_changed();
+ changed_count_++;
+ cur_cfg_->save();
+ }
+ else if(btn == del_all_)
+ {
+ QMessageBox msg(QMessageBox::Question, tr("be sure to delete the configuration"),
+ tr("Are you sure you want to delete the configuration?"), QMessageBox::Yes | QMessageBox::No, this);
+ msg.exec();
+ if (msg.clickedButton() != msg.button(QMessageBox::Yes))
+ return;
+
+ restore_2_default_settings();
+ updateUIStatus();
+ comb_->clear();
+ changed_count_++;
+ cur_cfg_->remove_all_schemes();
+ cur_cfg_->save();
+ }
+}
+void hg_settingdialog::restore_2_default_settings(void)
+{
+ cur_scheme_->end_setting(true);
+ cur_cfg_->select_scheme(nullptr);
+ dev_que_.apply_scheme(&m_saneAPI, nullptr);
+ cur_cfg_->save();
+
+ gb::sane_config_schm *s = new gb::sane_config_schm();
+ s->copy_default_value(cur_scheme_);
+ cur_scheme_->release();
+ cur_scheme_ = s;
+ cur_scheme_->begin_setting();
+
+ on_current_scheme_changed();
+}
diff --git a/modules/twainui/hg_settingdialog.h b/modules/twainui/hg_settingdialog.h
new file mode 100644
index 00000000..cfd7c318
--- /dev/null
+++ b/modules/twainui/hg_settingdialog.h
@@ -0,0 +1,152 @@
+#ifndef HG_SETTING_DIALOG_H
+#define HG_SETTING_DIALOG_H
+
+#include
+#include
+#include
+#include "HGSaneUI.h"
+#include "cfg/gb_json.h"
+#include "device_menu.h"
+
+class hg_settingdialog : public QDialog
+{
+ Q_OBJECT
+
+ int changed_count_;
+ bool save_;
+ bool clicked_gamma_;
+ dev_que dev_que_;
+ gb::scanner_cfg *cur_cfg_;
+ gb::sane_config_schm *cur_scheme_;
+
+ void refresh_control_value(int op_id);
+ void on_select_scheme(bool apply_to_dev = true);
+ QString gen_gamma_file_path(void);
+
+ QMenu *top_menu_;
+ QLineEdit *edit_name_;
+ QPushButton *rename_;
+ QPushButton *apply_;
+ QPushButton *del_this_;
+ QPushButton *del_all_;
+ QLabel *custom_area_lable_;
+ QPushButton *btn_cut_area_;
+ QPushButton *btn_gamma_;
+ QTextEdit *sketch_;
+ QLineEdit *m_lineEdit_name;
+ void create_scheme_management_ui(QVBoxLayout* layout);
+ QString find_current_scheme_menu(int *scheme_id = nullptr);
+
+ static std::string property_combox_data_type_;
+ enum _cbox_type
+ {
+ COMBO_VAL_STRING = 0,
+ COMBO_VAL_INT,
+ COMBO_VAL_FLOAT,
+ };
+
+public:
+ explicit hg_settingdialog(SANE_Handle handle, const SANEAPI* saneApi, bool showScan, QWidget *parent = nullptr);
+ ~hg_settingdialog();
+
+public:
+ void initUi();
+ void updateOpt();
+ void createUI();
+ void updateUIStatus();
+ QVector find_control(int opt_num);
+ void keyPressEvent(QKeyEvent *e);
+ int get_changed_items(void);
+ int getCloseButtonCliked();
+
+public:
+ enum closeButtonClicked
+ {
+ closeButtonOk = 0,
+ closeButtonCancel,
+ closeButtonScan,
+ };
+
+ int m_closeButton;
+
+private:
+ SANEAPI m_saneAPI;
+ SANE_Handle m_devHandle;
+ bool m_showScan;
+
+private:
+ QString m_qstrFileName;
+ QSettings *m_configIniWrite;
+ QSettings *m_configIniRead;
+
+private:
+ QString md5(QString key);
+ const void* find_option_description(int id); // return const SANE_Option_Descriptor* pointer
+ const void* find_option_description(const std::string& title, int* id); // return const SANE_Option_Descriptor* pointer
+
+ virtual void closeEvent(QCloseEvent* e);
+ bool createMsgBoxUi(bool add, std::string &name);
+ std::string getCurUiShemeName(std::string name);
+ void save_scheme(void);
+ void cancel_setting(void);
+ void getAppVersion();
+ void apply_current_scheme(void);
+
+private:
+ QVector, QString>> m_list_IdValueTitle;
+ QVector> m_list_defaultOptions; // default values of device
+ QVector> m_list_sliderSpinbox;
+ QVector> m_list_getOpt;
+ QVector m_list_deviceNames;
+ QVector m_list_widgets;
+
+private slots:
+ void slot_checkedClicked();
+ void slot_sliderClicked(int value);
+ void slot_spinBoxClicked(int value);
+ void slot_doubleSpinboxClicked(double value);
+ void slot_string_list_comboBoxClicked();
+ void slot_pushButtonClicked();
+ void slot_cutButtonClicked();
+ void slot_gammaButtonClicked();
+ void slot_word_list_comboBoxClicked(int value);
+ void slot_lineEditInput();
+ void slot_buttonScanClicked();
+ void slot_buttonOkClicked();
+ void slot_buttonCancelClicked();
+ void slot_pushButton_scheme_management(void);
+ void on_current_scheme_changed(void);
+ void restore_2_default_settings(void);
+
+private:
+ int m_dpiId;
+ int m_dpiValue;
+ int m_paperSizeId;
+ QString m_paperSizeValue;
+ int m_cutLeftId;
+ int m_cutTopId;
+ int m_cutRightId;
+ int m_cutBottomId;
+ double m_cutWidth; // 单位是毫米
+ double m_cutHeight; // 单位是毫米
+ double m_cutLeftValue; // 单位是毫米
+ double m_cutTopValue; // 单位是毫米
+ double m_cutRightValue; // 单位是毫米
+ double m_cutBottomValue; // 单位是毫米
+
+ int m_colorModeId;
+ QString m_colorModeValue;
+ SANE_Gamma m_gammaData;
+ QComboBox *comb_;
+};
+
+#endif // HG_SETTING_DIALOG_H
+
+
+
+
+
+
+
+
+
diff --git a/modules/twainui/qmfcapp.cpp b/modules/twainui/qmfcapp.cpp
new file mode 100644
index 00000000..68953d70
--- /dev/null
+++ b/modules/twainui/qmfcapp.cpp
@@ -0,0 +1,427 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+// Implementation of the QMfcApp classes
+
+#ifdef QT3_SUPPORT
+#undef QT3_SUPPORT
+#endif
+
+#ifdef UNICODE
+#undef UNICODE
+#endif
+
+#include "qmfcapp.hpp"
+
+#include
+#include
+#include
+
+#ifdef QTWINMIGRATE_WITHMFC
+#include
+#else
+#include
+#endif
+
+#ifdef QTWINMIGRATE_WITHMFC
+CWinApp *QMfcApp::mfc_app = 0;
+char **QMfcApp::mfc_argv = 0;
+int QMfcApp::mfc_argc = 0;
+#endif
+
+#if QT_VERSION >= 0x050000
+#define QT_WA(unicode, ansi) unicode
+
+QMfcAppEventFilter::QMfcAppEventFilter() : QAbstractNativeEventFilter()
+{
+}
+
+bool QMfcAppEventFilter::nativeEventFilter(const QByteArray &, void *message, long *result)
+{
+ return static_cast(qApp)->winEventFilter((MSG*)message, result);
+}
+#endif
+
+/*! \class QMfcApp qmfcapp.h
+ \brief The QMfcApp class provides merging of the MFC and Qt event loops.
+
+ QMfcApp is responsible for driving both the Qt and MFC event loop.
+ It replaces the standard MFC event loop provided by
+ CWinApp::Run(), and is used instead of the QApplication parent
+ class.
+
+ To replace the MFC event loop reimplement the CWinApp::Run()
+ function in the CWinApp subclass usually created by the MFC
+ Application Wizard, and use either the static run() function, or
+ an instance of QMfcApp created earlier through the static
+ instance() function or the constructor.
+
+ The QMfcApp class also provides a static API pluginInstance() that
+ drives the Qt event loop when loaded into an MFC or Win32 application.
+ This is useful for developing Qt based DLLs or plugins, or if the
+ MFC application's event handling can not be modified.
+*/
+
+static int modalLoopCount = 0;
+
+HHOOK hhook;
+LRESULT CALLBACK QtFilterProc(int nCode, WPARAM wParam, LPARAM lParam)
+{
+ if (qApp) {
+ // don't process deferred-deletes while in a modal loop
+ if (modalLoopCount)
+ qApp->sendPostedEvents();
+ else
+ qApp->sendPostedEvents(0, -1);
+ }
+
+ return CallNextHookEx(hhook, nCode, wParam, lParam);
+}
+
+/*!
+ Inform Qt that a modal loop is about to be entered, and that DeferredDelete
+ events should not be processed. Call this function before calling Win32
+ or MFC functions that enter a modal event loop (i.e. MessageBox).
+
+ This is only required if the Qt UI code hooks into an existing Win32
+ event loop using QMfcApp::pluginInstance.
+
+ \sa exitModalLoop()
+*/
+void QMfcApp::enterModalLoop()
+{
+ ++modalLoopCount;
+}
+
+/*!
+ Inform Qt that a modal loop has been exited, and that DeferredDelete
+ events should not be processed. Call this function after the blocking
+ Win32 or MFC function (i.e. MessageBox) returned.
+
+ This is only required if the Qt UI code hooks into an existing Win32
+ event loop using QMfcApp::pluginInstance.
+
+ \sa enterModalLoop()
+*/
+void QMfcApp::exitModalLoop()
+{
+ --modalLoopCount;
+ Q_ASSERT(modalLoopCount >= 0);
+}
+
+/*!
+ If there is no global QApplication object (i.e. qApp is null) this
+ function creates a QApplication instance and returns true;
+ otherwise it does nothing and returns false.
+
+ The application installs an event filter that drives the Qt event
+ loop while the MFC or Win32 application continues to own the event
+ loop.
+
+ Use this static function if the application event loop code can not be
+ easily modified, or when developing a plugin or DLL that will be loaded
+ into an existing Win32 or MFC application. If \a plugin is non-null then
+ the function loads the respective DLL explicitly to avoid unloading from
+ memory.
+
+ \code
+ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReserved)
+ {
+ if (dwReason == DLL_PROCESS_ATTACH)
+ QMfcApp::pluginInstance(hInstance);
+
+ return TRUE;
+ }
+ \endcode
+
+ Set \a plugin to 0 when calling this function from within the same executable
+ module.
+
+ If this function is used, call enterModalLoop and exitModalLoop whenever you
+ call a Win32 or MFC function that opens a local event loop.
+
+ \code
+ void Dialog::someSlot()
+ {
+ QMfcApp::enterModalLoop();
+ MessageBox(...);
+ QMfcApp::exitModalLoop();
+ }
+ \endcode
+*/
+bool QMfcApp::pluginInstance(Qt::HANDLE plugin)
+{
+ if (qApp)
+ return FALSE;
+
+ QT_WA({
+ hhook = SetWindowsHookExW(WH_GETMESSAGE, QtFilterProc, 0, GetCurrentThreadId());
+ }, {
+ hhook = SetWindowsHookExA(WH_GETMESSAGE, QtFilterProc, 0, GetCurrentThreadId());
+ });
+
+ int argc = 0;
+ (void)new QApplication(argc, 0);
+
+ if (plugin) {
+ char filename[256];
+ if (GetModuleFileNameA((HINSTANCE)plugin, filename, 255))
+ LoadLibraryA(filename);
+ }
+
+ return TRUE;
+}
+
+#if QT_VERSION >= 0x050000
+Q_GLOBAL_STATIC(QMfcAppEventFilter, qmfcEventFilter);
+#endif
+
+#ifdef QTWINMIGRATE_WITHMFC
+/*!
+ Runs the event loop for both Qt and the MFC application object \a
+ mfcApp, and returns the result. This function calls \c instance()
+ if no QApplication object exists and deletes the object it
+ created.
+
+ Calling this static function in a reimplementation of
+ CWinApp::Run() is the simpliest way to use the QMfcApp class:
+
+ \code
+ int MyMfcApp::Run()
+ {
+ return QMfcApp::run(this);
+ }
+ \endcode
+
+ Since a QApplication object must exist before Qt widgets can be
+ created you cannot use this function if you want to use Qt-based
+ user interface elements in, for example, the InitInstance()
+ function of CWinApp. In such cases, create an instance of
+ QApplication explicitly using instance() or the constructor.
+
+ \sa instance()
+*/
+int QMfcApp::run(CWinApp *mfcApp)
+{
+ bool ownInstance = !qApp;
+ if (ownInstance)
+ instance(mfcApp);
+ int result = qApp->exec();
+
+ if (mfcApp) {
+ int mfcRes = mfcApp->ExitInstance();
+ if (mfcRes && !result)
+ result = mfcRes;
+ }
+
+ if (ownInstance)
+ delete qApp;
+
+ return result;
+}
+
+/*!
+ Creates an instance of QApplication, passing the command line of
+ \a mfcApp to the QApplication constructor, and returns the new
+ object. The returned object must be destroyed by the caller.
+
+ Use this static function if you want to perform additional
+ initializations after creating the application object, or if you
+ want to create Qt GUI elements in the InitInstance()
+ reimplementation of CWinApp:
+
+ \code
+ BOOL MyMfcApp::InitInstance()
+ {
+ // standard MFC initialization
+ // ...
+
+ // This sets the global qApp pointer
+ QMfcApp::instance(this);
+
+ // Qt GUI initialization
+ }
+
+ BOOL MyMfcApp::Run()
+ {
+ int result = QMfcApp::run(this);
+ delete qApp;
+ return result;
+ }
+ \endcode
+
+ \sa run()
+*/
+QApplication *QMfcApp::instance(CWinApp *mfcApp)
+{
+ mfc_app = mfcApp;
+ if (mfc_app) {
+#if defined(UNICODE)
+ QString exeName((QChar*)mfc_app->m_pszExeName, wcslen(mfc_app->m_pszExeName));
+ QString cmdLine((QChar*)mfc_app->m_lpCmdLine, wcslen(mfc_app->m_lpCmdLine));
+#else
+ QString exeName = QString::fromLocal8Bit(mfc_app->m_pszExeName);
+ QString cmdLine = QString::fromLocal8Bit(mfc_app->m_lpCmdLine);
+#endif
+ QStringList arglist = QString(exeName + " " + cmdLine).split(' ');
+
+ mfc_argc = arglist.count();
+ mfc_argv = new char*[mfc_argc+1];
+ int a;
+ for (a = 0; a < mfc_argc; ++a) {
+ QString arg = arglist[a];
+ mfc_argv[a] = new char[arg.length()+1];
+ qstrcpy(mfc_argv[a], arg.toLocal8Bit().data());
+ }
+ mfc_argv[a] = 0;
+ }
+
+ return new QMfcApp(mfcApp, mfc_argc, mfc_argv);
+}
+
+
+static bool qmfc_eventFilter(void *message)
+{
+ long result = 0;
+ return static_cast(qApp)->winEventFilter((MSG*)message, &result);
+}
+
+/*!
+ Creates an instance of QMfcApp. \a mfcApp must point to the
+ existing instance of CWinApp. \a argc and \a argv are passed on
+ to the QApplication constructor.
+
+ Use the static function instance() to automatically use the
+ command line passed to the CWinApp.
+
+ \code
+ QMfcApp *qtApp;
+
+ BOOL MyMfcApp::InitInstance()
+ {
+ // standard MFC initialization
+
+ int argc = ...
+ char **argv = ...
+
+ qtApp = new QMfcApp(this, argc, argv);
+
+ // Qt GUI initialization
+ }
+
+ BOOL MyMfcApp::Run()
+ {
+ int result = qtApp->exec();
+ delete qtApp;
+ qtApp = 0;
+
+ return result;
+ }
+ \endcode
+
+ \sa instance() run()
+*/
+QMfcApp::QMfcApp(CWinApp *mfcApp, int &argc, char **argv)
+: QApplication(argc, argv), idleCount(0), doIdle(FALSE)
+{
+ mfc_app = mfcApp;
+#if QT_VERSION >= 0x050000
+ QAbstractEventDispatcher::instance()->installNativeEventFilter(qmfcEventFilter());
+#else
+ QAbstractEventDispatcher::instance()->setEventFilter(qmfc_eventFilter);
+#endif
+ setQuitOnLastWindowClosed(false);
+}
+#endif
+
+QMfcApp::QMfcApp(int &argc, char **argv) : QApplication(argc, argv)
+{
+#if QT_VERSION >= 0x050000
+ QAbstractEventDispatcher::instance()->installNativeEventFilter(qmfcEventFilter());
+#endif
+}
+/*!
+ Destroys the QMfcApp object, freeing all allocated resources.
+*/
+QMfcApp::~QMfcApp()
+{
+ if (hhook) {
+ UnhookWindowsHookEx(hhook);
+ hhook = 0;
+ }
+
+#ifdef QTWINMIGRATE_WITHMFC
+ for (int a = 0; a < mfc_argc; ++a) {
+ char *arg = mfc_argv[a];
+ delete[] arg;
+ }
+ delete []mfc_argv;
+
+ mfc_argc = 0;
+ mfc_argv = 0;
+ mfc_app = 0;
+#endif
+}
+
+/*!
+ \reimp
+*/
+bool QMfcApp::winEventFilter(MSG *msg, long *result)
+{
+ static bool recursion = false;
+ if (recursion)
+ return false;
+
+ recursion = true;
+
+ QWidget *widget = QWidget::find((WId)msg->hwnd);
+ HWND toplevel = 0;
+ if (widget) {
+ HWND parent = (HWND)widget->winId();
+ while(parent) {
+ toplevel = parent;
+ parent = GetParent(parent);
+ }
+ HMENU menu = toplevel ? GetMenu(toplevel) : 0;
+ if (menu && GetFocus() == msg->hwnd) {
+ if (msg->message == WM_SYSKEYUP && msg->wParam == VK_MENU) {
+ // activate menubar on Alt-up and move focus away
+ SetFocus(toplevel);
+ SendMessage(toplevel, msg->message, msg->wParam, msg->lParam);
+ widget->setFocus();
+ recursion = false;
+ return TRUE;
+ } else if (msg->message == WM_SYSKEYDOWN && msg->wParam != VK_MENU) {
+ SendMessage(toplevel, msg->message, msg->wParam, msg->lParam);
+ SendMessage(toplevel, WM_SYSKEYUP, VK_MENU, msg->lParam);
+ recursion = false;
+ return TRUE;
+ }
+ }
+ }
+#ifdef QTWINMIGRATE_WITHMFC
+ else if (mfc_app) {
+ MSG tmp;
+ while (doIdle && !PeekMessage(&tmp, 0, 0, 0, PM_NOREMOVE)) {
+ if (!mfc_app->OnIdle(idleCount++))
+ doIdle = FALSE;
+ }
+ if (mfc_app->IsIdleMessage(msg)) {
+ doIdle = TRUE;
+ idleCount = 0;
+ }
+ }
+ if (mfc_app && mfc_app->PreTranslateMessage(msg)) {
+ recursion = false;
+ return TRUE;
+ }
+#endif
+
+ recursion = false;
+#if QT_VERSION < 0x050000
+ return QApplication::winEventFilter(msg, result);
+#else
+ Q_UNUSED(result);
+ return false;
+#endif
+}
diff --git a/modules/twainui/qmfcapp.hpp b/modules/twainui/qmfcapp.hpp
new file mode 100644
index 00000000..e11afa59
--- /dev/null
+++ b/modules/twainui/qmfcapp.hpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+// Declaration of the QMfcApp classes
+
+#ifndef QMFCAPP_H
+#define QMFCAPP_H
+
+#include
+
+#if defined(_AFXDLL) && defined(_MSC_VER)
+#define QTWINMIGRATE_WITHMFC
+class CWinApp;
+#endif
+
+#if QT_VERSION >= 0x050000
+#include
+
+class QMfcAppEventFilter : public QAbstractNativeEventFilter
+{
+public:
+ QMfcAppEventFilter();
+ bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);
+};
+#endif
+
+class QMfcApp : public QApplication
+{
+public:
+ static bool pluginInstance(Qt::HANDLE plugin = 0);
+
+#ifdef QTWINMIGRATE_WITHMFC
+ static int run(CWinApp *mfcApp);
+ static QApplication *instance(CWinApp *mfcApp);
+ QMfcApp(CWinApp *mfcApp, int &argc, char **argv);
+#endif
+ QMfcApp(int &argc, char **argv);
+ ~QMfcApp();
+
+ bool winEventFilter(MSG *msg, long *result);
+
+ static void enterModalLoop();
+ static void exitModalLoop();
+
+private:
+#ifdef QTWINMIGRATE_WITHMFC
+ static char ** mfc_argv;
+ static int mfc_argc;
+ static CWinApp *mfc_app;
+#endif
+
+ int idleCount;
+ bool doIdle;
+};
+
+#endif // QMFCAPP_H
diff --git a/modules/twainui/qt_zh_CN.qm b/modules/twainui/qt_zh_CN.qm
new file mode 100644
index 00000000..e8d65305
Binary files /dev/null and b/modules/twainui/qt_zh_CN.qm differ
diff --git a/modules/twainui/qt_zh_CN.ts b/modules/twainui/qt_zh_CN.ts
new file mode 100644
index 00000000..f6a25d21
--- /dev/null
+++ b/modules/twainui/qt_zh_CN.ts
@@ -0,0 +1,8077 @@
+
+
+
+
+ MAC_APPLICATION_MENU
+
+
+
+ 服务
+
+
+
+
+ 隐藏%1
+
+
+
+
+ 隐藏其他
+
+
+
+
+ 全部显示
+
+
+
+
+ 偏好设置…
+
+
+
+
+ 退出 %1
+
+
+
+
+ 关于 %1
+
+
+
+ AudioOutput
+
+
+
+ <html>音频回放设备 <b>%1</b> 没有工作。<br/>回滚到 <b>%2</b>。</html>
+
+
+
+
+ <html>切换到音频回放设备 <b>%1</b>,<br/>它刚刚变为可用并且具有更高的优先级。</html>
+
+
+
+
+ 恢复到设备“%1”
+
+
+
+ CloseButton
+
+
+
+ 关闭标签页
+
+
+
+ Phonon::
+
+
+
+ 通知
+
+
+
+
+ 音乐
+
+
+
+
+ 视频
+
+
+
+
+ 通讯
+
+
+
+
+ 游戏
+
+
+
+
+ 无障碍环境
+
+
+
+ Phonon::Gstreamer::Backend
+
+
+
+ 警告:看起来,您没有安装 gstreamer0.10-plugins-good 包。
+ 一些视频特性已经被关闭。
+
+
+
+
+ 警告:看起来,您没有安装基础的 GStreamer 插件。
+ 所有的音频和视频支持都已经被关闭。
+
+
+
+ Phonon::Gstreamer::MediaObject
+
+
+
+ 不能开始回放。
+
+请检查您的 Gstreamer 安装并且确认您
+已经安装 libgstreamer-plugins-base。
+
+
+
+
+ 缺少一个需要的解码器。您需要安装如下解码器来播放这个内容:%0
+
+
+
+
+
+
+
+
+
+
+
+ 不能打开媒体源。
+
+
+
+
+ 无效的源类型。
+
+
+
+
+ 不能定位媒体源。
+
+
+
+
+ 不能打开音频设备。这个设备正在被使用。
+
+
+
+
+ 不能解码媒体源。
+
+
+
+ Phonon::VolumeSlider
+
+
+
+
+ 音量:%1%
+
+
+
+
+
+
+ 请使用这个滑块调节音量。最左为%0,最右为%1%
+
+
+
+ Q3Accel
+
+
+
+ %1,%2未定义
+
+
+
+
+ 不明确的%1没有被处理
+
+
+
+ Q3DataTable
+
+
+
+ 真
+
+
+
+
+ 假
+
+
+
+
+ 插入
+
+
+
+
+ 更新
+
+
+
+
+ 删除
+
+
+
+ Q3FileDialog
+
+
+
+ 复制或者移动一个文件
+
+
+
+
+ 读取:%1
+
+
+
+
+
+ 写入:%1
+
+
+
+
+
+ 取消
+
+
+
+
+
+
+
+ 所有文件 (*)
+
+
+
+
+ 名称
+
+
+
+
+ 大小
+
+
+
+
+ 类型
+
+
+
+
+ 日期
+
+
+
+
+ 属性
+
+
+
+
+
+ 确定(&O)
+
+
+
+
+ 查找范围(&I):
+
+
+
+
+
+
+ 文件名称(&N):
+
+
+
+
+ 文件类型(&T):
+
+
+
+
+ 后退
+
+
+
+
+ 向上一级
+
+
+
+
+ 创建新文件夹
+
+
+
+
+ 列表视图
+
+
+
+
+ 详细视图
+
+
+
+
+ 预览文件信息
+
+
+
+
+ 预览文件内容
+
+
+
+
+ 读写
+
+
+
+
+ 只读
+
+
+
+
+ 只写
+
+
+
+
+ 不可访问的
+
+
+
+
+ 文件的系统链接
+
+
+
+
+ 目录的系统链接
+
+
+
+
+ 特殊的系统链接
+
+
+
+
+ 文件
+
+
+
+
+ 目录
+
+
+
+
+ 特殊
+
+
+
+
+
+
+ 打开
+
+
+
+
+
+ 另存为
+
+
+
+
+
+
+ 打开(&O)
+
+
+
+
+
+ 保存(&S)
+
+
+
+
+ 重命名(&R)
+
+
+
+
+ 删除(&D)
+
+
+
+
+ 重新载入(&E)
+
+
+
+
+ 按名称排列(&N)
+
+
+
+
+ 按大小排列(&S)
+
+
+
+
+ 按日期排列(&D)
+
+
+
+
+ 未排列的(&U)
+
+
+
+
+ 排列
+
+
+
+
+ 显示隐藏文件(&H)
+
+
+
+
+ 文件
+
+
+
+
+ 目录
+
+
+
+
+ 系统链接
+
+
+
+
+ 删除%1
+
+
+
+
+ <qt>你确认你想删除%1,“%2”?</qt>
+
+
+
+
+ 是(&Y)
+
+
+
+
+ 否(&N)
+
+
+
+
+ 新建文件夹1
+
+
+
+
+ 新建文件夹
+
+
+
+
+ 新建文件夹%1
+
+
+
+
+ 查找目录
+
+
+
+
+
+ 目录
+
+
+
+
+ 目录:
+
+
+
+
+
+ 错误
+
+
+
+
+ 文件%1
+未找到。
+请检查路径和文件名。
+
+
+
+
+
+ 所有文件 (*.*)
+
+
+
+
+ 打开
+
+
+
+
+ 选择一个目录
+
+
+
+ Q3LocalFs
+
+
+
+
+ 不能读取目录
+%1
+
+
+
+
+ 不能创建目录
+%1
+
+
+
+
+ 不能移除文件或者目录
+%1
+
+
+
+
+ 不能把
+%1
+重命名为
+%2
+
+
+
+
+ 不能打开
+%1
+
+
+
+
+ 不能写入
+%1
+
+
+
+ Q3MainWindow
+
+
+
+ 排列
+
+
+
+
+ 自定义...
+
+
+
+ Q3NetworkProtocol
+
+
+
+ 操作被用户停止
+
+
+
+ Q3ProgressDialog
+
+
+
+
+ 取消
+
+
+
+ Q3TabDialog
+
+
+
+
+ 确认
+
+
+
+
+ 应用
+
+
+
+
+ 帮助
+
+
+
+
+ 默认
+
+
+
+
+ 取消
+
+
+
+ Q3TextEdit
+
+
+
+ 撤消(&U)
+
+
+
+
+ 恢复(&R)
+
+
+
+
+ 剪切(&T)
+
+
+
+
+ 复制(&C)
+
+
+
+
+ 粘贴(&P)
+
+
+
+
+ 清空
+
+
+
+
+
+ 选择全部
+
+
+
+ Q3TitleBar
+
+
+
+ 系统
+
+
+
+
+ 向上恢复
+
+
+
+
+ 最小化
+
+
+
+
+ 向下恢复
+
+
+
+
+ 最大化
+
+
+
+
+ 关闭
+
+
+
+
+ 包含操作窗口的命令。
+
+
+
+
+ 把一个最小化窗口恢复为普通状态
+
+
+
+
+ 把窗口移到外面
+
+
+
+
+ 把一个最大化窗口恢复为普通状态
+
+
+
+
+ 窗口全屏化
+
+
+
+
+ 关闭窗口
+
+
+
+
+ 显示窗口名称并且包含维护它的控件
+
+
+
+ Q3ToolBar
+
+
+
+ 更多...
+
+
+
+ Q3UrlOperator
+
+
+
+
+
+ 协议“%1”不被支持
+
+
+
+
+ 协议“%1”不支持列出目录
+
+
+
+
+ 协议“%1”不支持创建新目录
+
+
+
+
+ 协议“%1”不支持移除文件或者目录
+
+
+
+
+ 协议“%1”不支持重命名文件或者目录
+
+
+
+
+ 协议“%1”不支持获取文件
+
+
+
+
+ 协议“%1”不支持上传文件
+
+
+
+
+
+ 协议“%1”不支持复制或者移动文件或者目录
+
+
+
+
+
+ (未知的)
+
+
+
+ Q3Wizard
+
+
+
+ 取消(&C)
+
+
+
+
+ < 上一步(&B)
+
+
+
+
+ 下一步(&N) >
+
+
+
+
+ 完成(&F)
+
+
+
+
+ 帮助(&H)
+
+
+
+ QAbstractSocket
+
+
+
+
+
+
+ 主机未找到
+
+
+
+
+
+
+ 连接被拒绝
+
+
+
+
+ 连接超时
+
+
+
+
+
+
+ Socket操作不被支持
+
+
+
+
+ 套接字操作超时
+
+
+
+
+ 套接字没有被连接
+
+
+
+
+ 网络不能访问
+
+
+
+ QAbstractSpinBox
+
+
+
+ 增加(&S)
+
+
+
+
+ 减少(&D)
+
+
+
+
+ 选择全部(&S)
+
+
+
+ QApplication
+
+
+
+ 激活
+
+
+
+
+ 执行“%1”需要Qt %2,只找到了Qt %3。
+
+
+
+
+ 不兼容的Qt错误
+
+
+
+
+ 激活这个程序的主窗口
+
+
+
+ QAxSelect
+
+
+
+ 选择ActiveX控件
+
+
+
+
+ 确定
+
+
+
+
+ 取消(&C)
+
+
+
+
+ COM对象(&O):
+
+
+
+ QCheckBox
+
+
+
+ 取消选中
+
+
+
+
+ 选中
+
+
+
+
+ 切换
+
+
+
+ QColorDialog
+
+
+
+ 色调(&E):
+
+
+
+
+ 饱和度(&S):
+
+
+
+
+ 亮度(&V):
+
+
+
+
+ 红色(&R):
+
+
+
+
+ 绿色(&G):
+
+
+
+
+ 蓝色(&U):
+
+
+
+
+ Alpha通道(&A):
+
+
+
+
+ 选择颜色
+
+
+
+
+ 基本颜色(&B)
+
+
+
+
+ 自定义颜色(&C)
+
+
+
+
+ 添加到自定义颜色(&A)
+
+
+
+ 选择颜色
+
+
+
+ 拾取屏幕颜色(&P)
+
+
+
+ 光标位置 %1, %2
+按ESC键取消
+
+
+
+ 颜色值(&H):
+
+
+
+ QComboBox
+
+
+
+
+ 打开
+
+
+
+
+ 假
+
+
+
+
+ 真
+
+
+
+
+ 关闭
+
+
+
+ QCoreApplication
+
+
+ QSystemSemaphore
+ %1:权限被拒绝
+
+
+
+ QSystemSemaphore
+ %1:已经存在
+
+
+
+ QSystemSemaphore
+ %1:不存在
+
+
+
+ QSystemSemaphore
+ %1:资源耗尽了
+
+
+
+ QSystemSemaphore
+ %1:未知错误 %2
+
+
+
+
+ QSystemSemaphore
+ %1:键是空的
+
+
+
+
+ QSystemSemaphore
+ %1:不能制造键
+
+
+
+
+ QSystemSemaphore
+ %1:ftok 失败
+
+
+
+ QDB2Driver
+
+
+
+ 不能连接
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+
+ 不能设置自动提交
+
+
+
+ QDB2Result
+
+
+
+
+ 不能执行语句
+
+
+
+
+ 不能准备语句
+
+
+
+
+ 不能帮定变量
+
+
+
+
+ 不能获取记录%1
+
+
+
+
+ 不能获取下一个
+
+
+
+
+ 不能获取第一个
+
+
+
+ QDateTimeEdit
+
+
+
+ AM
+
+
+
+
+ am
+
+
+
+
+ PM
+
+
+
+
+ pm
+
+
+
+ QDial
+
+
+
+ QDial
+
+
+
+
+ SpeedoMeter
+
+
+
+
+ SliderHandle
+
+
+
+ QDialog
+
+
+
+ 这是什么?
+
+
+
+
+ 完成
+
+
+
+ QDialogButtonBox
+
+
+
+
+
+ 确定
+
+
+
+
+ 保存
+
+
+
+
+ 保存(&S)
+
+
+
+
+ 打开
+
+
+
+
+ 取消
+
+
+
+
+ 取消(&C)
+
+
+
+
+ 关闭
+
+
+
+
+ 关闭(&C)
+
+
+
+
+ 应用
+
+
+
+
+ 重置
+
+
+
+
+ 帮助
+
+
+
+
+ 不保存
+
+
+
+
+ 抛弃
+
+
+
+
+ 是(&Y)
+
+
+
+
+ 全部是(&A)
+
+
+
+
+ 否(&N)
+
+
+
+
+ 全部否(&O)
+
+
+
+
+ 保存全部
+
+
+
+
+ 放弃
+
+
+
+
+ 重试
+
+
+
+
+ 忽略
+
+
+
+
+ 恢复默认
+
+
+
+
+ 不保存关闭
+
+
+
+
+ 确定(&O)
+
+
+
+ QDirModel
+
+
+
+ 名称
+
+
+
+
+ 大小
+
+
+
+
+ Match OS X Finder
+ 类型
+
+
+
+
+ All other platforms
+ 类型
+
+
+
+
+ 日期被修改
+
+
+
+ QDockWidget
+
+
+
+ 关闭
+
+
+
+
+ 锚接
+
+
+
+
+ 浮动
+
+
+
+ QDoubleSpinBox
+
+
+
+ 更多
+
+
+
+
+ 更少
+
+
+
+ QErrorMessage
+
+
+
+ 调试消息:
+
+
+
+
+ 警告:
+
+
+
+
+ 致命错误:
+
+
+
+
+ 再次显示这个消息(&S)
+
+
+
+
+ 确定(&O)
+
+
+
+ QFile
+
+
+
+
+ 目标文件已存在
+
+
+
+
+
+
+
+
+
+ 无法输入 %1
+
+
+
+
+ 无法输出
+
+
+
+
+ 写块失败
+
+
+
+
+ 无法创建 %1
+
+
+
+ QFileDialog
+
+
+
+
+ 所有文件 (*)
+
+
+
+
+ 目录
+
+
+
+
+
+
+
+ 打开(&O)
+
+
+
+
+
+ 保存(&S)
+
+
+
+
+ 取消(&S)
+
+
+
+
+ 取消
+
+
+
+
+ 打开
+
+
+
+
+ %1已经存在。
+你想要替换它么?
+
+
+
+
+ 文件%1
+没有找到。
+请核实已给定正确文件名。
+
+
+
+
+ 我的计算机
+
+
+
+
+ 重命名(&R)
+
+
+
+
+ 删除(&D)
+
+
+
+
+ 显示隐藏文件(&H)
+
+
+
+
+
+ 后退
+
+
+
+
+
+ 父目录
+
+
+
+
+
+ 列表视图
+
+
+
+
+
+ 详细视图
+
+
+
+
+
+ 文件类型:
+
+
+
+
+
+ 目录:
+
+
+
+
+
+ 目录%1
+没有找到。
+请核实已给定正确目录名。
+
+
+
+
+ “%1“是写保护的。
+你还是想删除它么?
+
+
+
+
+ 你确认你想删除“%1“?
+
+
+
+
+ 不能删除目录。
+
+
+
+
+ 最近的地方
+
+
+
+
+ 另存为
+
+
+
+
+ 驱动器
+
+
+
+
+
+ 文件
+
+
+
+
+ 未知的
+
+
+
+
+ 查找目录
+
+
+
+
+ 显示
+
+
+
+
+
+ 前进
+
+
+
+
+ 新建文件夹
+
+
+
+
+ 新建文件夹(&N)
+
+
+
+
+
+ 选择(&C)
+
+
+
+
+ 移除
+
+
+
+
+
+ 文件名称(&N):
+
+
+
+
+
+ 查看:
+
+
+
+
+
+ 创建新文件夹
+
+
+
+
+ 所有文件 (*.*)
+
+
+
+ QFileSystemModel
+
+
+
+ %1 TB
+
+
+
+
+ %1 GB
+
+
+
+
+ %1 MB
+
+
+
+
+ %1千字节
+
+
+
+
+ %1字节
+
+
+
+
+ 无效文件名
+
+
+
+
+ <b>名称“%1“不能被使用。</b><p>请使用另外一个包含更少字符或者不含有标点符号的名称。
+
+
+
+
+ 名称
+
+
+
+
+ 大小
+
+
+
+
+ Match OS X Finder
+ 类型
+
+
+
+
+ All other platforms
+ 类型
+
+
+
+
+ 日期被修改
+
+
+
+
+ 我的计算机
+
+
+
+
+ 计算机
+
+
+
+ QFontDatabase
+
+
+
+
+ 普通
+
+
+
+
+
+
+ 粗体
+
+
+
+
+
+ 半粗体
+
+
+
+
+
+
+ 黑体
+
+
+
+
+ 半体
+
+
+
+
+
+ 轻体
+
+
+
+
+
+ 意大利体
+
+
+
+
+
+ 斜体
+
+
+
+
+ 任意
+
+
+
+
+ 拉丁文
+
+
+
+
+ 希腊文
+
+
+
+
+ 西里尔文
+
+
+
+
+ 亚美尼亚文
+
+
+
+
+ 希伯来文
+
+
+
+
+ 阿拉伯文
+
+
+
+
+ 叙利亚文
+
+
+
+
+ 马尔代夫文
+
+
+
+
+ 梵文
+
+
+
+
+ 孟加拉文
+
+
+
+
+ 旁遮普文
+
+
+
+
+ 古吉拉特文
+
+
+
+
+ 奥里雅文
+
+
+
+
+ 泰米尔文
+
+
+
+
+ 泰卢固文
+
+
+
+
+ 埃纳德文
+
+
+
+
+ 马拉亚拉姆文
+
+
+
+
+ 僧伽罗文
+
+
+
+
+ 泰国文
+
+
+
+
+ 老挝文
+
+
+
+
+ 藏文
+
+
+
+
+ 缅甸文
+
+
+
+
+ 格鲁吉亚文
+
+
+
+
+ 谷美尔文
+
+
+
+
+ 简体中文
+
+
+
+
+ 繁体中文
+
+
+
+
+ 日文
+
+
+
+
+ 韩文
+
+
+
+
+ 越南文
+
+
+
+
+ 符号
+
+
+
+
+ 欧甘文
+
+
+
+
+ 古北欧文
+
+
+
+ QFontDialog
+
+
+
+ 字体(&F)
+
+
+
+
+ 字体风格(&Y)
+
+
+
+
+ 大小(&S)
+
+
+
+
+ 效果
+
+
+
+
+ 删除线(&K)
+
+
+
+
+ 下划线(&U)
+
+
+
+
+ 实例
+
+
+
+
+ 书写系统(&I)
+
+
+
+
+
+ 选择字体
+
+
+
+ QFtp
+
+
+
+
+ 没有连接
+
+
+
+
+
+ 主机%1没有找到
+
+
+
+
+
+ 连接被主机 %1 拒绝
+
+
+
+
+ 主机%1连接超时
+
+
+
+
+
+
+ 连接到主机%1了
+
+
+
+
+
+ 因为数据连接而被拒绝连接
+
+
+
+
+
+
+
+ 未知的错误
+
+
+
+
+
+ 连接主机失败:
+%1
+
+
+
+
+
+ 登录失败:
+%1
+
+
+
+
+
+ 列出目录失败:
+%1
+
+
+
+
+
+ 改变目录失败:
+%1
+
+
+
+
+
+ 下载文件失败:
+%1
+
+
+
+
+
+ 上传文件失败:
+%1
+
+
+
+
+
+ 移除文件失败:
+%1
+
+
+
+
+
+ 创建目录失败:
+%1
+
+
+
+
+
+ 移除目录失败:
+%1
+
+
+
+
+
+
+ 连接关闭了
+
+
+
+
+ 主机%1找到了
+
+
+
+
+ 到%1的连接关闭了
+
+
+
+
+ 主机找到了
+
+
+
+
+ 连接到主机了
+
+
+
+ QGuiApplication
+
+
+
+ Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.
+ LTR
+
+
+
+ QHostInfo
+
+
+
+ 未知的错误
+
+
+
+ QHostInfoAgent
+
+
+
+
+
+
+
+
+
+
+ 主机未找到
+
+
+
+
+
+
+
+ 未知的地址类型
+
+
+
+
+
+
+ 未知的错误
+
+
+
+ QHttp
+
+
+
+
+
+
+ 未知的错误
+
+
+
+
+
+ 请求被放弃了
+
+
+
+
+
+ 没有设置要连接的服务器
+
+
+
+
+
+ 错误的内容长度
+
+
+
+
+
+ 服务器异常地关闭了连接
+
+
+
+
+
+
+
+
+
+ 向设备中进行写回复时发生错误
+
+
+
+
+
+ 连接被拒绝
+
+
+
+
+
+
+ 主机%1没有找到
+
+
+
+
+
+
+
+ HTTP请求失败
+
+
+
+
+
+ 无效的HTTP响应头
+
+
+
+
+
+
+
+ 无效的HTTP臃肿体
+
+
+
+
+ 主机%1找到了
+
+
+
+
+ 连接到%1主机了
+
+
+
+
+ 到%1的连接关闭了
+
+
+
+
+ 主机找到了
+
+
+
+
+ 连接到主机了
+
+
+
+
+
+ 连接关闭了
+
+
+
+
+ 代理需要认证
+
+
+
+
+ 需要认证
+
+
+
+
+ 连接被拒绝(或者超时)
+
+
+
+
+ 代理需要验证
+
+
+
+
+ 主机需要验证
+
+
+
+
+ 数据错误
+
+
+
+
+ 所指定的协议是未知的
+
+
+
+
+ SSL 握手失败
+
+
+
+
+ HTTPS 连接需要 SSL,但它没有被编译进来
+
+
+
+ QHttpSocketEngine
+
+
+
+ 未收到代理的HTTP响应
+
+
+
+
+ 解析代理的认证请求出错
+
+
+
+
+ 需要认证
+
+
+
+
+ 代理拒绝连接
+
+
+
+
+ 和HTTP代理通讯时发生错误
+
+
+
+
+ 未找到代理服务器
+
+
+
+
+ 代理连接被拒绝
+
+
+
+
+ 代理服务器连接超时
+
+
+
+
+ 代理连接过早关闭
+
+
+
+ QIBaseDriver
+
+
+
+ 打开数据库错误
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+ QIBaseResult
+
+
+
+ 不能创建BLOB
+
+
+
+
+ 不能写入BLOB
+
+
+
+
+ 不能打开BLOB
+
+
+
+
+ 不能读取BLOB
+
+
+
+
+
+ 不能找到数组
+
+
+
+
+ 不能得到数组数据
+
+
+
+
+ 不能得到查询信息
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能分配语句
+
+
+
+
+ 不能准备语句
+
+
+
+
+
+ 不能描述输入语句
+
+
+
+
+ 不能描述语句
+
+
+
+
+ 不能关闭语句
+
+
+
+
+ 不能执行查询
+
+
+
+
+ 不能获取下一项
+
+
+
+
+ 不能得到语句信息
+
+
+
+ QIODevice
+
+
+
+ 权限被拒绝
+
+
+
+
+ 太多打开的文件
+
+
+
+
+ 没有这个文件或者目录
+
+
+
+
+ 设备上没有空间了
+
+
+
+
+ 未知的错误
+
+
+
+ QInputContext
+
+
+
+ XIM
+
+
+
+
+ XIM输入法
+
+
+
+
+ Windows输入法
+
+
+
+
+ Mac OS X输入法
+
+
+
+ QInputDialog
+
+
+
+ 输入一个值:
+
+
+
+ QLibrary
+
+
+ QLibrary::load_sys: 不能载入%1 (%2)
+
+
+
+ QLibrary::unload_sys:不能卸载%1 (%2)
+
+
+
+ QLibrary::resolve_sys: 符号“%1”在%2(%3)没有被定义
+
+
+
+
+ 不能映射”%1“:%2
+
+
+
+
+ “%1“中的插件验证数据不匹配
+
+
+
+
+ 不能取消映射“%1“:%2
+
+
+
+
+ 插件“%1”使用了不兼容的Qt库。(%2.%3.%4) [%5]
+
+
+
+
+ 插件“%1“使用了不兼容的Qt库。期待的构建键是“%2“,得到的却是”%3“
+
+
+
+
+ 未知的错误
+
+
+
+
+
+ 共享库没有被找到。
+
+
+
+
+ 文件“%1“不是有效的Qt插件。
+
+
+
+
+ 插件“%1“使用了不兼容的Qt库。(不能混合使用库的调试版本和发布版本。)
+
+
+
+
+
+ 无法加载库%1:%2
+
+
+
+
+
+ 无法卸载库%1:%2
+
+
+
+
+
+ 无法解析%2中的符号“%1”:%3
+
+
+
+ QLineEdit
+
+
+
+ 撤消(&U)
+
+
+
+
+ 恢复(&R)
+
+
+
+
+ 剪切(&T)
+
+
+
+
+ 复制(&C)
+
+
+
+
+ 粘贴(&P)
+
+
+
+
+ 删除
+
+
+
+
+ 选择全部
+
+
+
+ QLocalServer
+
+
+
+
+ %1: 名称错误
+
+
+
+
+ %1:权限被拒绝
+
+
+
+
+ %1:地址正在被使用
+
+
+
+
+
+ %1:未知错误 %2
+
+
+
+ QLocalSocket
+
+
+
+
+ %1:连接被拒绝
+
+
+
+
+
+ %1:远程已关闭
+
+
+
+
+
+
+
+ %1:无效名称
+
+
+
+
+
+ %1:套接字访问错误
+
+
+
+
+
+ %1:套接字资源错误
+
+
+
+
+
+ %1:套接字操作超时
+
+
+
+
+
+ %1:数据报太大
+
+
+
+
+
+
+ %1:连接错误
+
+
+
+
+
+ %1:套接字操作不被支持
+
+
+
+
+ %1:未知错误
+
+
+
+
+
+ %1:未知错误 %2
+
+
+
+ QMYSQLDriver
+
+
+
+ 不能打开数据库
+
+
+
+
+ 不能连接
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+ QMYSQLResult
+
+
+
+ 不能获取数据
+
+
+
+
+ 不能执行查询
+
+
+
+
+ 不能存储结果
+
+
+
+
+
+ 不能准备语句
+
+
+
+
+ 不能重置语句
+
+
+
+
+ 不能绑定值
+
+
+
+
+ 不能执行语句
+
+
+
+
+
+ 不能绑定外值
+
+
+
+
+ 不能存储语句结果
+
+
+
+
+ 不能执行下一个查询
+
+
+
+
+ 不能存储下一个结果
+
+
+
+ QMdiArea
+
+
+
+ (未命名的)
+
+
+
+ QMdiSubWindow
+
+
+
+ %1 - [%2]
+
+
+
+
+ 关闭
+
+
+
+
+ 最小化
+
+
+
+
+ 向下恢复
+
+
+
+
+ 恢复(&R)
+
+
+
+
+ 移动(&M)
+
+
+
+
+ 大小(&S)
+
+
+
+
+ 最小化(&N)
+
+
+
+
+ 最大化(&X)
+
+
+
+
+ 总在最前(&T)
+
+
+
+
+ 关闭(&C)
+
+
+
+
+ - [%1]
+
+
+
+
+ 最大化
+
+
+
+
+ 取消遮蔽
+
+
+
+
+ 遮蔽
+
+
+
+
+ 恢复
+
+
+
+
+ 帮助
+
+
+
+
+ 菜单
+
+
+
+ QMenu
+
+
+
+
+ 关闭
+
+
+
+
+
+ 打开
+
+
+
+
+
+
+ 执行
+
+
+
+ QMenuBar
+
+
+ 关于
+
+
+
+ 配置
+
+
+
+ 首选项
+
+
+
+ 选项
+
+
+
+ 设置
+
+
+
+ 安装
+
+
+
+ 退出
+
+
+
+ 退出
+
+
+
+ 关于%1
+
+
+
+ 关于Qt
+
+
+
+ 首选项
+
+
+
+ 退出%1
+
+
+
+ QMessageBox
+
+
+
+ 帮助
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+ 关于Qt
+
+
+
+ <p>这个程序使用的是Qt %1版。</p>
+
+
+
+
+ 显示细节……
+
+
+
+
+ 隐藏细节……
+
+
+
+
+
+
+
+
+ <h3>关于Qt</h3>%1<p>Qt是一个用于跨平台应用程序开发的C++工具包。</p><p>对于MS Windows、Mac OS X、Linux和所有主流商业Unix,Qt提供了单一源程序的可移植性。Qt也有用于嵌入式Linux和Windows CE的版本。</p><p>Qt是Nokia的产品。有关更多信息,请参考<a href="http://qt.nokia.com/">qt.nokia.com</a>。</p>
+
+
+
+ <p>这个程序使用了Qt %1开源版本。</p><p>Qt开源版本只用于开源应用程序的开发。如果要开发私有(闭源)软件,你需要一个商业的Qt协议。</p><p>有关Qt协议的概览,请参考<a href="http://qt.nokia.com/company/model/">qt.nokia.com/company/model/</a>。</p>
+
+
+
+ <h3>关于Qt</h3>%1<p>Qt是一个用于跨平台应用程序开发的C++工具包。</p><p>对于MS Windows、Mac OS X、Linux和所有主流商业Unix,Qt提供了单一源程序的可移植性。Qt对于嵌入式平台也是可用的,在嵌入式平台上它被称为Qt Embedded。</p><p>Qt是Trolltech的产品。有关更多信息,请参考<a href="http://qt.nokia.com/">qt.nokia.com</a>。</p>
+
+
+
+ QMultiInputContext
+
+
+
+ 选择输入法
+
+
+
+ QMultiInputContextPlugin
+
+
+
+ 多输入法切换器
+
+
+
+
+ 使用文本窗口部件上下文菜单的多输入法切换器
+
+
+
+ QNativeSocketEngine
+
+
+
+ 远端主机关闭了这个连接
+
+
+
+
+ 网络操作超时
+
+
+
+
+ 资源耗尽了
+
+
+
+
+ 不被支持的套接字操作
+
+
+
+
+ 协议类型不被支持
+
+
+
+
+ 无效的套接字描述符
+
+
+
+
+ 网络不能访问
+
+
+
+
+ 权限被拒绝
+
+
+
+
+ 连接超时
+
+
+
+
+ 连接被拒绝
+
+
+
+
+ 要启用的地址已经被使用
+
+
+
+
+ 这个地址不可用
+
+
+
+
+ 这个地址被保护了
+
+
+
+
+ 不能发送一个消息
+
+
+
+
+ 不能接收一个消息
+
+
+
+
+ 不能写入
+
+
+
+
+ 网络错误
+
+
+
+
+ 另一个套接字已经正在监听同一端口
+
+
+
+
+ 不能初始化非阻塞套接字
+
+
+
+
+ 不能初始化广播套接字
+
+
+
+
+ 试图在不支持IPv6支持的平台上使用IPv6套接字
+
+
+
+
+ 主机不能访问
+
+
+
+
+ 不能发送过大的数据报
+
+
+
+
+ 对非套接字操作
+
+
+
+
+ 未知的错误
+
+
+
+
+ 对于这个操作代理类型是无效的。
+
+
+
+ QNetworkAccessCacheBackend
+
+
+
+ 打开%1发生错误
+
+
+
+ QNetworkAccessFileBackend
+
+
+
+ 正在打开非本地文件 %1 的请求
+
+
+
+
+ 打开 %1 错误:%2
+
+
+
+
+ 写入 %1 错误:%2
+
+
+
+
+ 无法打开 %1:路径是一个目录
+
+
+
+
+ 读取 %1 错误:%2
+
+
+
+ QNetworkAccessFtpBackend
+
+
+
+ 未找到合适的代理
+
+
+
+
+ 无法读取 %1:是一个目录
+
+
+
+
+ 登入 %1 失败:需要验证
+
+
+
+
+ 下载 %1 时错误:%2
+
+
+
+
+ 上载 %1 时错误:%2
+
+
+
+ QNetworkAccessHttpBackend
+
+
+
+ 未找到合适的代理
+
+
+
+ QNetworkReply
+
+
+
+ 下载 %1 错误 - 服务器回复:%2
+
+
+
+
+ 协议“%1”是未知的
+
+
+
+ QNetworkReplyImpl
+
+
+
+
+ 操作被取消
+
+
+
+ QOCIDriver
+
+
+
+ 不能登录
+
+
+
+
+ QOCIDriver
+ 不能初始化
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+ QOCIResult
+
+
+
+
+
+ 不能绑定批处理执行的列
+
+
+
+
+ 不能执行批处理语句
+
+
+
+
+ 不能进入下一个
+
+
+
+
+ 不能分配语句
+
+
+
+
+ 不能准备语句
+
+
+
+
+ 不能绑定值
+
+
+
+ 不能执行选择语句
+
+
+
+
+ 不能执行语句
+
+
+
+ QODBCDriver
+
+
+
+ 不能连接
+
+
+
+
+ 不能连接—驱动程序不支持所有功能
+
+
+
+
+ 不能禁止自动提交
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+
+ 不能打开自动提交
+
+
+
+ QODBCResult
+
+
+
+
+ QODBCResult::reset: 不能把“SQL_CURSOR_STATIC”设置为语句属性。请检查你的ODBC驱动程序设置。
+
+
+
+
+
+ 不能执行语句
+
+
+
+
+ 不能获取下一个
+
+
+
+
+ 不能准备语句
+
+
+
+
+ 不能帮定变量
+
+
+
+
+
+
+ 不能获取最后一个
+
+
+
+
+ 不能获取
+
+
+
+
+ 不能获取第一个
+
+
+
+
+ 不能获取上一个
+
+
+
+ QObject
+
+
+
+ 家
+
+
+
+
+ 在 %1 上不被支持的操作
+
+
+
+
+ 无效的 URI:%1
+
+
+
+
+ 写入 %1 错误:%2
+
+
+
+
+ 读取 %1 错误:%2
+
+
+
+
+ %1 上的套接字错误:%2
+
+
+
+
+ 远程主机过早地关闭了在 %1 上的这个连接
+
+
+
+
+ 协议错误:收到了大小为 0 的包
+
+
+
+
+
+ 未指定主机名
+
+
+
+ QPPDOptionsModel
+
+
+
+ 名称
+
+
+
+
+ 值
+
+
+
+ QPSQLDriver
+
+
+
+ 不能连接
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+
+ 不能订阅
+
+
+
+
+ 不能取消订阅
+
+
+
+ QPSQLResult
+
+
+
+ 不能创建查询
+
+
+
+
+ 不能准备语句
+
+
+
+ QPageSetupWidget
+
+
+
+ 厘米 (cm)
+
+
+
+
+ 毫米 (mm)
+
+
+
+
+ 英寸 (in)
+
+
+
+
+ 点 (pt)
+
+
+
+
+ 窗体
+
+
+
+
+ 纸张
+
+
+
+
+ 纸张大小:
+
+
+
+
+ 宽度:
+
+
+
+
+ 高度:
+
+
+
+
+ 纸张源:
+
+
+
+
+ 方向
+
+
+
+
+ 纵向
+
+
+
+
+ 横向
+
+
+
+
+ 反向横向
+
+
+
+
+ 反向纵向
+
+
+
+
+ 边距
+
+
+
+
+ 上边距
+
+
+
+
+ 左边距
+
+
+
+
+ 右边距
+
+
+
+
+ 下边距
+
+
+
+ QPluginLoader
+
+
+
+ 未知的错误
+
+
+
+
+ 插件没有被载入。
+
+
+
+ QPrintDialog
+
+
+
+ 本地已经连接的
+
+
+
+
+
+ 别名:%1
+
+
+
+
+
+ 未知的
+
+
+
+
+ 打印全部
+
+
+
+
+ 打印选择
+
+
+
+
+ 打印范围
+
+
+
+
+ A0 (841 x 1189 毫米)
+
+
+
+
+ A1 (594 x 841 毫米)
+
+
+
+
+ A2 (420 x 594 毫米)
+
+
+
+
+ A3 (297 x 420 毫米)
+
+
+
+
+ A4 (210 x 297 毫米,8.26 x 11.7 英寸)
+
+
+
+
+ A5 (148 x 210 毫米)
+
+
+
+
+ A6 (105 x 148 毫米)
+
+
+
+
+ A7 (74 x 105 毫米)
+
+
+
+
+ A8 (52 x 74 毫米)
+
+
+
+
+ A9 (37 x 52 毫米)
+
+
+
+
+ B0 (1000 x 1414 毫米)
+
+
+
+
+ B1 (707 x 1000 毫米)
+
+
+
+
+ B2 (500 x 707 毫米)
+
+
+
+
+ B3 (353 x 500 毫米)
+
+
+
+
+ B4 (250 x 353 毫米)
+
+
+
+
+ B5 (176 x 250 毫米,6.93 x 9.84 英寸)
+
+
+
+
+ B6 (125 x 176 毫米)
+
+
+
+
+ B7 (88 x 125 毫米)
+
+
+
+
+ B8 (62 x 88 毫米)
+
+
+
+
+ B9 (44 x 62 毫米)
+
+
+
+
+ B10 (31 x 44 毫米)
+
+
+
+
+ C5E (163 x 229 毫米)
+
+
+
+
+ DLE (110 x 220 毫米)
+
+
+
+
+ Executive (7.5 x 10 英寸,191 x 254 毫米)
+
+
+
+
+ Folio (210 x 330 毫米)
+
+
+
+
+ Ledger (432 x 279 毫米)
+
+
+
+
+ Legal (8.5 x 14 英寸,216 x 356 毫米)
+
+
+
+
+ Letter (8.5 x 11 英寸,216 x 279 毫米)
+
+
+
+
+ Tabloid (279 x 432 毫米)
+
+
+
+
+ 美国普通10号信封 (105 x 241 毫米)
+
+
+
+
+ 确定
+
+
+
+
+
+
+ 打印
+
+
+
+
+ 打印到文件……
+
+
+
+
+ 文件%1不可写。
+请选择一个不同的文件名。
+
+
+
+
+ %1已经存在。
+你想覆盖它么?
+
+
+
+
+ 文件存在
+
+
+
+
+ <qt>你想覆盖它么?</qt>
+
+
+
+
+ %1是目录。
+请选择一个不同的文件名。
+
+
+
+
+ “从”的数值不能大于“到”的数值。
+
+
+
+
+ A0
+
+
+
+
+ A1
+
+
+
+
+ A2
+
+
+
+
+ A3
+
+
+
+
+ A4
+
+
+
+
+ A5
+
+
+
+
+ A6
+
+
+
+
+ A7
+
+
+
+
+ A8
+
+
+
+
+ A9
+
+
+
+
+ B0
+
+
+
+
+ B1
+
+
+
+
+ B2
+
+
+
+
+ B3
+
+
+
+
+ B4
+
+
+
+
+ B5
+
+
+
+
+ B6
+
+
+
+
+ B7
+
+
+
+
+ B8
+
+
+
+
+ B9
+
+
+
+
+ B10
+
+
+
+
+ C5E
+
+
+
+
+ DLE
+
+
+
+
+ 决策文书
+
+
+
+
+ 对开纸
+
+
+
+
+ 帐页
+
+
+
+
+ 法律文书
+
+
+
+
+ 信纸
+
+
+
+
+ 小型报纸
+
+
+
+
+ 美国普通10号信封
+
+
+
+
+ 自定义
+
+
+
+
+
+ 选项(&O) >>
+
+
+
+
+ 打印(&P)
+
+
+
+
+ 选项(&O) <<
+
+
+
+
+ 打印到文件(PDF)
+
+
+
+
+ 打印到文件(Postscript)
+
+
+
+
+ 本地文件
+
+
+
+
+ 写入 %1 文件
+
+
+
+ QPrintPreviewDialog
+
+
+
+
+ 页面设置
+
+
+
+
+ %1%
+
+
+
+
+ 打印预览
+
+
+
+
+ 下一页
+
+
+
+
+ 上一页
+
+
+
+
+ 第一页
+
+
+
+
+ 最后一页
+
+
+
+
+ 适应宽度
+
+
+
+
+ 适应页面
+
+
+
+
+ 放大
+
+
+
+
+ 缩小
+
+
+
+
+ 纵向
+
+
+
+
+ 横向
+
+
+
+
+ 显示单页
+
+
+
+
+ 显示当前页
+
+
+
+
+ 显示所有页的概览
+
+
+
+
+ 打印
+
+
+
+
+ 打印设置
+
+
+
+
+ 关闭
+
+
+
+
+ 导出为PDF
+
+
+
+
+ 导出为PostScript
+
+
+
+ QPrintPropertiesWidget
+
+
+
+ 窗体
+
+
+
+
+ 页
+
+
+
+
+ 高级
+
+
+
+ QPrintSettingsOutput
+
+
+
+ 窗体
+
+
+
+
+ 拷贝
+
+
+
+
+ 打印范围
+
+
+
+
+ 打印全部
+
+
+
+
+ 页数从
+
+
+
+
+ 到
+
+
+
+
+ 选择
+
+
+
+
+ 输出设置
+
+
+
+
+ 备份:
+
+
+
+
+ 校对
+
+
+
+
+ 反向
+
+
+
+
+ 选项
+
+
+
+
+ 彩色模式
+
+
+
+
+ 彩色
+
+
+
+
+ 灰度
+
+
+
+
+ 两部分打印
+
+
+
+
+ 无
+
+
+
+
+ 长侧
+
+
+
+
+ 短侧
+
+
+
+ QPrintWidget
+
+
+
+ 窗体
+
+
+
+
+ 打印机
+
+
+
+
+ 名称(&N):
+
+
+
+
+ 属性(&R)
+
+
+
+
+ 位置:
+
+
+
+
+ 预览
+
+
+
+
+ 类型:
+
+
+
+
+ 输出文件(&F):
+
+
+
+
+ ...
+
+
+
+ QProcess
+
+
+
+
+ 无法打开用于读取的输入重定向
+
+
+
+
+
+ 无法打开用于写入的输出重定向
+
+
+
+
+ 资源错误(fork失败):%1
+
+
+
+
+
+
+
+
+
+
+
+
+ 进程处理超时
+
+
+
+
+
+
+
+ 从进程中读取时发生错误
+
+
+
+
+
+
+ 向进程写入时发生错误
+
+
+
+
+ 进程已崩溃
+
+
+
+
+
+
+
+
+
+ 启动进程失败
+
+
+
+ QProgressDialog
+
+
+
+ 撤消
+
+
+
+ QPushButton
+
+
+
+ 打开
+
+
+
+ QRadioButton
+
+
+
+ 选中
+
+
+
+ QRegExp
+
+
+
+ 没有错误发生
+
+
+
+
+ 使用了失效的特效
+
+
+
+
+ 错误的字符类语法
+
+
+
+
+ 错误的预测语法
+
+
+
+
+ 错误的重复语法
+
+
+
+
+ 无效的八进制数值
+
+
+
+
+ 找不到左分隔符
+
+
+
+
+ 意外的终止
+
+
+
+
+ 遇到内部限制
+
+
+
+ QSQLite2Driver
+
+
+
+ 打开数据库错误
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+ QSQLite2Result
+
+
+
+ 不能获取结果
+
+
+
+
+ 不能执行语句
+
+
+
+ QSQLiteDriver
+
+
+
+ 打开数据库错误
+
+
+
+
+ 关闭数据库错误
+
+
+
+
+ 不能开始事务
+
+
+
+
+ 不能提交事务
+
+
+
+
+ 不能回滚事务
+
+
+
+ QSQLiteResult
+
+
+
+
+
+ 不能获取行
+
+
+
+
+ 不能执行语句
+
+
+
+
+ 不能重置语句
+
+
+
+
+ 不能绑定参数
+
+
+
+
+ 参数数量不匹配
+
+
+
+
+ 没有查询
+
+
+
+ QScrollBar
+
+
+
+ 滚动到这里
+
+
+
+
+ 左边缘
+
+
+
+
+ 顶部
+
+
+
+
+ 右边缘
+
+
+
+
+ 底部
+
+
+
+
+ 左一页
+
+
+
+
+
+ 上一页
+
+
+
+
+ 右一页
+
+
+
+
+
+ 下一页
+
+
+
+
+ 向左滚动
+
+
+
+
+ 向上滚动
+
+
+
+
+ 向右滚动
+
+
+
+
+ 向下滚动
+
+
+
+
+ 向上排列
+
+
+
+
+ 位置
+
+
+
+
+ 向下排列
+
+
+
+ QSharedMemory
+
+
+
+ %1:无法设置锁定的键
+
+
+
+
+ %1:创建的大小小于 0
+
+
+
+
+
+ %1:无法锁定
+
+
+
+
+ %1:无法取消锁定
+
+
+
+
+
+ %1:权限被拒绝
+
+
+
+
+
+ %1:已经存在
+
+
+
+
+
+ %1:不存在
+
+
+
+
+
+ %1:资源耗尽了
+
+
+
+
+
+ %1:未知错误 %2
+
+
+
+
+ %1:键是空的
+
+
+
+
+ %1:Unix 键文件不存在
+
+
+
+
+ %1:ftok 失败
+
+
+
+
+
+ %1:不能制造键
+
+
+
+
+ %1:系统预设大小限制
+
+
+
+
+ %1:没有附加
+
+
+
+
+ %1:无效大小
+
+
+
+
+ %1: 键错误
+
+
+
+
+ %1:大小查询失败
+
+
+
+ QShortcut
+
+
+
+ 空格
+
+
+
+
+ Esc
+
+
+
+
+ Tab
+
+
+
+
+ Backtab
+
+
+
+
+ Backspace
+
+
+
+
+ Return
+
+
+
+
+ Enter
+
+
+
+
+ Ins
+
+
+
+
+ Del
+
+
+
+
+ Pause
+
+
+
+
+ Print
+
+
+
+
+ SysReq
+
+
+
+
+ Home
+
+
+
+
+ End
+
+
+
+
+ Left
+
+
+
+
+ Up
+
+
+
+
+ Right
+
+
+
+
+ Down
+
+
+
+
+ PgUp
+
+
+
+
+ PgDown
+
+
+
+
+ CapsLock
+
+
+
+
+ NumLock
+
+
+
+
+ ScrollLock
+
+
+
+
+ Menu
+
+
+
+
+ Help
+
+
+
+
+ 后退
+
+
+
+
+ 前进
+
+
+
+
+ 停止
+
+
+
+
+ 刷新
+
+
+
+
+ 调小音量
+
+
+
+
+ 静音
+
+
+
+
+ 调大音量
+
+
+
+
+ 低音增强
+
+
+
+
+ 调大低音
+
+
+
+
+ 调小低音
+
+
+
+
+ 调大高音
+
+
+
+
+ 调小高音
+
+
+
+
+ 多媒体播放
+
+
+
+
+ 多媒体停止
+
+
+
+
+ 上一个多媒体
+
+
+
+
+ 下一个多媒体
+
+
+
+
+ 多媒体记录
+
+
+
+
+ 最喜爱的
+
+
+
+
+ 搜索
+
+
+
+
+ 等待
+
+
+
+
+ 打开URL
+
+
+
+
+ 启动邮件
+
+
+
+
+ 启动多媒体
+
+
+
+
+ 启动 (0)
+
+
+
+
+ 启动 (1)
+
+
+
+
+ 启动 (2)
+
+
+
+
+ 启动 (3)
+
+
+
+
+ 启动 (4)
+
+
+
+
+ 启动 (5)
+
+
+
+
+ 启动 (6)
+
+
+
+
+ 启动 (7)
+
+
+
+
+ 启动 (8)
+
+
+
+
+ 启动 (9)
+
+
+
+
+ 启动 (A)
+
+
+
+
+ 启动 (B)
+
+
+
+
+ 启动 (C)
+
+
+
+
+ 启动 (D)
+
+
+
+
+ 启动 (E)
+
+
+
+
+ 启动 (F)
+
+
+
+
+ Print Screen
+
+
+
+
+ Page Up
+
+
+
+
+ Page Down
+
+
+
+
+ Caps Lock
+
+
+
+
+ Num Lock
+
+
+
+
+ Number Lock
+
+
+
+
+ Scroll Lock
+
+
+
+
+ Insert
+
+
+
+
+ Delete
+
+
+
+
+ Escape
+
+
+
+
+ System Request
+
+
+
+
+ 选择
+
+
+
+
+ 是
+
+
+
+
+ 否
+
+
+
+
+ 上下文1
+
+
+
+
+ 上下文2
+
+
+
+
+ 上下文3
+
+
+
+
+ 上下文4
+
+
+
+
+ 呼叫
+
+
+
+
+ 挂起
+
+
+
+
+ 翻转
+
+
+
+
+
+ Ctrl
+
+
+
+
+
+ Shift
+
+
+
+
+
+ Alt
+
+
+
+
+
+ Meta
+
+
+
+
+ +
+
+
+
+
+ F%1
+
+
+
+
+ 主页
+
+
+
+ QSlider
+
+
+
+ 左一页
+
+
+
+
+ 上一页
+
+
+
+
+ 位置
+
+
+
+
+ 右一页
+
+
+
+
+ 下一页
+
+
+
+ QSocks5SocketEngine
+
+
+
+ 代理拒绝连接
+
+
+
+
+ 代理连接过早关闭
+
+
+
+
+ 代理主机未找到
+
+
+
+
+ 代理连接超时
+
+
+
+
+ 代理认证失败
+
+
+
+
+ 代理认证失败: %1
+
+
+
+
+ SOCKS版本5协议错误
+
+
+
+
+ 常规服务器失败
+
+
+
+
+ 连接不被SOCKSv5服务器允许
+
+
+
+
+ TTL已过期
+
+
+
+
+ 不支持的SOCKSv5命令
+
+
+
+
+ 不支持的地址类型
+
+
+
+
+ 未知SOCKSv5代理,错误代码 0x%1
+
+
+
+ 连接到套接字服务器的时候,Socks5超时错误
+
+
+
+
+ 网络操作超时
+
+
+
+ QSpinBox
+
+
+
+ 更多
+
+
+
+
+ 更少
+
+
+
+ QSql
+
+
+
+ 删除
+
+
+
+
+ 删除这条记录?
+
+
+
+
+
+
+ 是
+
+
+
+
+
+
+ 否
+
+
+
+
+ 插入
+
+
+
+
+ 更新
+
+
+
+
+ 保存编辑?
+
+
+
+
+ 取消
+
+
+
+
+ 确认
+
+
+
+
+ 取消您的编辑?
+
+
+
+ QSslSocket
+
+
+
+ 不能写入数据:%1
+
+
+
+
+ 读取时错误:%1
+
+
+
+
+ SSL握手错误:%1
+
+
+
+
+ 创建SSL上下文错误(%1)
+
+
+
+
+ 无效或者空白的密码列表(%1)
+
+
+
+
+ 创建SSL会话错误,%1
+
+
+
+
+ 创建SSL会话错误:%1
+
+
+
+
+ 不能提供没有键的证书,%1
+
+
+
+
+ 不能载入本地证书,%1
+
+
+
+
+ 不能载入私有键,%1
+
+
+
+
+ 私有键不能验证公有键,%1
+
+
+
+ QSystemSemaphore
+
+
+
+
+ %1:资源耗尽了
+
+
+
+
+
+ %1:权限被拒绝
+
+
+
+
+ %1:已经存在
+
+
+
+
+ %1:不存在
+
+
+
+
+
+ %1:未知错误 %2
+
+
+
+ QTDSDriver
+
+
+
+ 不能打开连接
+
+
+
+
+ 不能使用数据库
+
+
+
+ QTabBar
+
+
+
+ 向左滚动
+
+
+
+
+ 向右滚动
+
+
+
+ QTcpServer
+
+
+
+ socket操作不被支持
+
+
+
+ QTextControl
+
+
+
+ 撤消(&U)
+
+
+
+
+ 恢复(&R)
+
+
+
+
+ 剪切(&T)
+
+
+
+
+ 复制(&C)
+
+
+
+
+ 复制链接位置(&L)
+
+
+
+
+ 粘贴(&P)
+
+
+
+
+ 删除
+
+
+
+
+ 选择全部
+
+
+
+ QToolButton
+
+
+
+
+ 按下
+
+
+
+
+
+ 打开
+
+
+
+ QUdpSocket
+
+
+
+ 这个平台不支持IPv6
+
+
+
+ QUndoGroup
+
+
+
+ 撤销
+
+
+
+
+ 恢复
+
+
+
+ QUndoModel
+
+
+
+ <空白>
+
+
+
+ QUndoStack
+
+
+
+ 撤销
+
+
+
+
+ 恢复
+
+
+
+ QUnicodeControlCharacterMenu
+
+
+
+ LRM 从左到右标记
+
+
+
+
+ RLM 从右向左标记
+
+
+
+
+ ZWJ 零宽度连接器
+
+
+
+
+ ZWNJ 零宽度非连接器
+
+
+
+
+ ZWSP 零宽度空格
+
+
+
+
+ LRE 开始从左到右嵌入
+
+
+
+
+ RLE 开始从右向左嵌入
+
+
+
+
+ LRO 开始从左向右覆盖
+
+
+
+
+ RLO 开始从右向左覆盖
+
+
+
+
+ PDF 弹出方向格式
+
+
+
+
+ 插入Unicode控制字符
+
+
+
+ QWebFrame
+
+
+
+ 请求被取消了
+
+
+
+
+ 请求被阻塞了
+
+
+
+
+ 无法显示 URL
+
+
+
+
+ 因为策略调整打断了桢的加载
+
+
+
+
+ 无法显示 MIMETYPE
+
+
+
+
+ 文件不存在
+
+
+
+ QWebPage
+
+
+
+ 错误的 HTTP 请求
+
+
+
+
+ default label for Submit buttons in forms on web pages
+ 提交
+
+
+
+
+ Submit (input element) alt text for <input> elements with no alt, title, or value
+ 提交
+
+
+
+
+ default label for Reset buttons in forms on web pages
+ 重置
+
+
+
+
+ text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'
+ 这是一个可以搜索的索引。请输入要搜索的关键字:
+
+
+
+
+ title for file button used in HTML forms
+ 选择文件
+
+
+
+
+ text to display in file button used in HTML forms when no file is selected
+ 没有文件被选择
+
+
+
+
+ Open in New Window context menu item
+ 在新窗口中打开
+
+
+
+
+ Download Linked File context menu item
+ 保存链接...
+
+
+
+
+ Copy Link context menu item
+ 复制链接
+
+
+
+
+ Open Image in New Window context menu item
+ 打开图片
+
+
+
+
+ Download Image context menu item
+ 保存图片
+
+
+
+
+ Copy Link context menu item
+ 复制图片
+
+
+
+
+ Open Frame in New Window context menu item
+ 打开框架
+
+
+
+
+ Copy context menu item
+ 复制
+
+
+
+
+ Back context menu item
+ 后退
+
+
+
+
+ Forward context menu item
+ 前进
+
+
+
+
+ Stop context menu item
+ 停止
+
+
+
+
+ Reload context menu item
+ 重新载入
+
+
+
+
+ Cut context menu item
+ 剪切
+
+
+
+
+ Paste context menu item
+ 粘贴
+
+
+
+
+ No Guesses Found context menu item
+ 没有找到猜测
+
+
+
+
+ Ignore Spelling context menu item
+ 忽略
+
+
+
+
+ Learn Spelling context menu item
+ 添加到字典
+
+
+
+
+ Search The Web context menu item
+ 搜索网页
+
+
+
+
+ Look Up in Dictionary context menu item
+ 在字典中查找
+
+
+
+
+ Open Link context menu item
+ 打开链接
+
+
+
+
+ Ignore Grammar context menu item
+ 忽略
+
+
+
+
+ Spelling and Grammar context sub-menu item
+ 拼写
+
+
+
+
+ menu item title
+ 显示拼写和语法
+
+
+
+
+ menu item title
+ 隐藏拼写和语法
+
+
+
+
+ Check spelling context menu item
+ 检查拼写
+
+
+
+
+ Check spelling while typing context menu item
+ 在输入时检查拼写
+
+
+
+
+ Check grammar with spelling context menu item
+ 检查语法和拼写
+
+
+
+
+ Font context sub-menu item
+ 字体
+
+
+
+
+ Bold context menu item
+ 粗体
+
+
+
+
+ Italic context menu item
+ 意大利体
+
+
+
+
+ Underline context menu item
+ 下划线
+
+
+
+
+ Outline context menu item
+ 轮廓
+
+
+
+
+ Writing direction context sub-menu item
+ 方向
+
+
+
+
+ Text direction context sub-menu item
+ 文本方向
+
+
+
+
+ Default writing direction context menu item
+ 默认
+
+
+
+
+ Left to Right context menu item
+ LTR
+
+
+
+
+ Right to Left context menu item
+ RTL
+
+
+
+
+ Inspect Element context menu item
+ 检查
+
+
+
+
+ Label for only item in menu that appears when clicking on the search field image, when no searches have been performed
+ 没有最近的搜索
+
+
+
+
+ label for first item in the menu that appears when clicking on the search field image, used as embedded menu title
+ 最近的搜索
+
+
+
+
+ menu item in Recent Searches menu that empties menu's contents
+ 清除最近的搜索
+
+
+
+
+ Unknown filesize FTP directory listing item
+ 未知的
+
+
+
+
+ Title string for images
+ %1 (%2x%3 像素)
+
+
+
+
+ 网页检查员 - %2
+
+
+
+
+ 滚动到这里
+
+
+
+
+ 左边缘
+
+
+
+
+ 顶部
+
+
+
+
+ 右边缘
+
+
+
+
+ 底部
+
+
+
+
+ 左一页
+
+
+
+
+ 上一页
+
+
+
+
+ 右一页
+
+
+
+
+ 下一页
+
+
+
+
+ 向左滚动
+
+
+
+
+ 向上滚动
+
+
+
+
+ 向右滚动
+
+
+
+
+ 向下滚动
+
+
+
+
+ number of chosen file
+
+ %n 个文件
+
+
+
+
+
+ JavaScript警告 - %1
+
+
+
+
+ JavaScript确认 - %1
+
+
+
+
+ JavaScript提示 - %1
+
+
+
+
+ 移动光标到下一个字符
+
+
+
+
+ 移动光标到上一个字符
+
+
+
+
+ 移动光标到下一个单词
+
+
+
+
+ 移动光标到上一个单词
+
+
+
+
+ 移动光标到下一行
+
+
+
+
+ 移动光标到上一行
+
+
+
+
+ 移动光标到行首
+
+
+
+
+ 移动光标到行尾
+
+
+
+
+ 移动光标到块首
+
+
+
+
+ 移动光标到块尾
+
+
+
+
+ 移动光标到文件开头
+
+
+
+
+ 移动光标到文件末尾
+
+
+
+
+
+
+
+
+
+ 选中到下一个字符
+
+
+
+
+ 选中到上一个字符
+
+
+
+
+ 选中到下一个单词
+
+
+
+
+ 选中到上一个单词
+
+
+
+
+ 选中到下一行
+
+
+
+
+ 选中到上一行
+
+
+
+
+ 选中到行首
+
+
+
+
+ 选中到行尾
+
+
+
+
+ 选中到块首
+
+
+
+
+ 选中到块尾
+
+
+
+
+ 选中到文件首
+
+
+
+
+ 选中到文件尾
+
+
+
+
+ 删除到单词首
+
+
+
+
+ 删除到单词尾
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QWhatsThisAction
+
+
+
+ 这是什么?
+
+
+
+ QWidget
+
+
+
+ *
+
+
+
+ QWizard
+
+
+
+ 返回
+
+
+
+
+ 继续
+
+
+
+
+ 提交
+
+
+
+
+ 完成
+
+
+
+ 退出
+
+
+
+
+ 帮助
+
+
+
+
+ < 上一步(&B)
+
+
+
+
+ 完成(&F)
+
+
+
+
+ 取消
+
+
+
+
+ 帮助(&H)
+
+
+
+
+ 下一步(&N)
+
+
+
+
+ 下一步(&N) >
+
+
+
+ QWorkspace
+
+
+
+ 恢复(&R)
+
+
+
+
+ 移动(&M)
+
+
+
+
+ 大小(&S)
+
+
+
+
+ 最小化(&N)
+
+
+
+
+ 最大化(&X)
+
+
+
+
+ 关闭(&C)
+
+
+
+
+ 总在最前(&T)
+
+
+
+
+
+ 卷起(&A)
+
+
+
+
+
+ %1 - [%2]
+
+
+
+
+ 最小化
+
+
+
+
+ 恢复
+
+
+
+
+ 关闭
+
+
+
+
+ 展开(&U)
+
+
+
+ QXml
+
+
+
+ 没有错误发生
+
+
+
+
+ 由消费者出发的错误
+
+
+
+
+ 意外的文件终止
+
+
+
+
+ 多于一个的文档类型定义
+
+
+
+
+ 在解析元素的时候发生错误
+
+
+
+
+ 标记不匹配
+
+
+
+
+ 在解析内容的时候发生错误
+
+
+
+
+ 意外的字符
+
+
+
+
+ 无效的处理指令名称
+
+
+
+
+ 在读取XML声明的时候,版本被期待
+
+
+
+
+ 错误的独立声明的值
+
+
+
+
+ 在读取XML声明的时候,编码声明或者独立声明被期待
+
+
+
+
+ 在读取XML声明的时候,独立声明被期待
+
+
+
+
+ 在解析文档类型定义的时候发生错误
+
+
+
+
+ 字符被期待
+
+
+
+
+ 在解析注释的时候发生错误
+
+
+
+
+ 在解析参考的时候发生错误
+
+
+
+
+ 在DTD中不允许使用内部解析的通用实体参考
+
+
+
+
+ 在属性值中不允许使用外部解析的通用实体参考
+
+
+
+
+ 在DTD中不允许使用外部解析的通用实体参考
+
+
+
+
+ 没有解析的错误上下文中的实体参考
+
+
+
+
+ 嵌套实体
+
+
+
+
+ 在一个外部实体的文本声明里有错误
+
+
+
+ QXmlStream
+
+
+
+
+ 文档末尾有额外内容。
+
+
+
+
+ 无效的实体值。
+
+
+
+
+ 无效的XML字符。
+
+
+
+
+ 内容中不允许有“]]>“序列。
+
+
+
+
+ 命名空间的”%1“前缀没有被声明
+
+
+
+
+ 属性重复定义。
+
+
+
+
+ 在公有标识文本中有意外的字符”%1“。
+
+
+
+
+ 无效的XML版本字符串。
+
+
+
+
+ 不被支持的XML版本。
+
+
+
+
+ %1是无效的编码名称。
+
+
+
+
+ 编码%1不被支持。
+
+
+
+
+ 独立运行只允许是或者否。
+
+
+
+
+ 在XML声明中无效的属性。
+
+
+
+
+ 文档过早的结束。
+
+
+
+
+ 无效的文档。
+
+
+
+
+ 期待的
+
+
+
+
+ ,但是得到的是“
+
+
+
+
+ 意外的“
+
+
+
+
+ 期待的字符数据。
+
+
+
+
+ 检测到嵌套实体。
+
+
+
+
+ 开始期待的标记。
+
+
+
+
+ XML声明没有在文档的开始位置。
+
+
+
+
+ 在参数实体声明中有NDATA。
+
+
+
+
+ %1 是无效的处理指令名称。
+
+
+
+
+ 无效的处理指令名称。
+
+
+
+
+
+
+
+ 非法的命名空间声明。
+
+
+
+
+ 无效的XML名称。
+
+
+
+
+ 开始标记和结束标记不匹配。
+
+
+
+
+ 未解析实体“%1“的引用。
+
+
+
+
+
+
+ 实体”%1“没有被声明。
+
+
+
+
+ 在属性值中的外部实体“%1”的引用。
+
+
+
+
+ 无效的字符引用。
+
+
+
+
+
+ 遇到不正确的编码内容。
+
+
+
+
+ 独立运行伪属性必须出现在编码之后。
+
+
+
+
+ %1是一个无效的公有(PUBLIC)标识符。
+
+
+
+ QtXmlPatterns
+
+
+
+ 带有值 %2 的 %1 属性已经声明过了。
+
+
+
+
+ 一个 %1 属性必须带有一个有效的 %2 作为值,但 %3 却不是。
+
+
+
+
+ 网络超时。
+
+
+
+
+ 元素 %1 不能被串行化,因为它出现在文档元素之外。
+
+
+
+ 属性元素 %1 不能被串行化,因为它出现在最顶层。
+
+
+
+
+ %1 年是无效的,因为应该从 %2 开始。
+
+
+
+
+ %1 日是在 %2...%3 范围之外的。
+
+
+
+
+ %1 月是在 %2...%3 范围之外的。
+
+
+
+
+ 溢出:无法呈现数据 %1。
+
+
+
+
+ %1 日对于 %2 月是无效的。
+
+
+
+
+ 时间 24:%1:%2.%3 是无效的。小时是 24,但是分钟、秒和毫秒不全为 0;
+
+
+
+
+ 时间 %1:%2:%3.%4 是无效的。
+
+
+
+
+ 溢出:数据无法被呈现。
+
+
+
+
+
+ 至少有一个组件被呈现。
+
+
+
+
+ 至少一个时间组件必须出现在这个 %1 界限之后。
+
+
+
+
+ 在整数除法中没有操作数,%1,可以是 %2。
+
+
+
+
+ 除法中的第一个操作数,%1,不能是无穷(%2)。
+
+
+
+
+ 除法中的第二个操作数,%1,不能是零(%2)。
+
+
+
+
+ %1 不是类型为 %2 的有效值。
+
+
+
+
+ 当从 %2 抛出到 %1 时,源值不能是 %3。
+
+
+
+
+ 整数除法(%1)除零(%2)是未定义的。
+
+
+
+
+ 除法(%1)除零(%2)是未定义的。
+
+
+
+
+ 求模除法(%1)除零(%2)是未定义的。
+
+
+
+
+
+ 一个类型为 %1 的值除以 %2(不是一个数值)是不允许的。
+
+
+
+
+ 一个类型为 %1 的值除以 %2 或者 %3(正负零)是不允许的。
+
+
+
+
+ 一个类型为 %1 的值乘以 %2 或者 %3(正负无穷)是不允许的。
+
+
+
+
+ 一个类型为 %1 的值不能是一个有效的布尔值(Effective Boolean Value)。
+
+
+
+
+ 有效的布尔值(Effective Boolean Value)不能被用于计算一个包含两个或者更多原子值的序列。
+
+
+
+
+ 类型为 %2 的值 %1 超过了最大值(%3)。
+
+
+
+
+ 类型为 %2 的值 %1 超过了最小值(%3)。
+
+
+
+
+ 类型为 %1 的值必须包含偶数个数字。值 %2 不是这样的。
+
+
+
+
+ %1 不是类型为 %2 的有效值。
+
+
+
+
+ 操作符 %1 不能被用于类型 %2。
+
+
+
+
+ 操作符 %1 不能被用于类型为 %2 和 %3 的原子值。
+
+
+
+
+ 一个被计算的属性的名称中的命名空间 URI 不能是 %1。
+
+
+
+
+ 一个被计算的属性的名称不能使用带有本地名称 %2 的命名空间 URI %1。
+
+
+
+
+ 抛出类型错误,期望的是 %1,收到的是 %2。
+
+
+
+
+ 当抛出到 %1 或者它的派生类时,源类型必须是同一类型,或者它必须是一个字符串类型。类型 %2 是不被允许的。
+
+
+
+
+ 无法以 %1 为目标类型进行抛出。
+
+
+
+
+ 无法从 %1 抛出到 %2。
+
+
+
+
+ 无法抛出到 %1,因为它是一个抽象类型,并且因此无法被实例化。
+
+
+
+
+ 无法从类型为 %2 的值 %1 抛出到 %3
+
+
+
+
+ 从 %2 抛出到 %1 失败:%3
+
+
+
+
+ 注释不能包含 %1
+
+
+
+
+ 注释不能以 %1 结尾。
+
+
+
+
+ 对于类型 %1 不能进行比较。
+
+
+
+
+ 在类型 %2 和 %3 的原子值之间,操作符 %1 是不可用的。
+
+
+
+
+ 一个属性节点不能是一个文档节点的子节点。因此,这个属性 %1 所在位置是不合适的。
+
+
+
+
+ 一个库模块不能被直接评估。它必须从一个主模块中导入。
+
+
+
+
+ 没有名为 %1 的模板存在。
+
+
+
+
+ 类型为 %1 的值不能被判断。一个判断必须是数值类型或者一个有效的布尔值(Effective Boolean Value)类型。
+
+
+
+
+ 一个定位判断必须评估一个单一数值。
+
+
+
+
+ 一个处理指令中的目标名称不能是任何大小写混合的 %1。因此,%2 是无效的。
+
+
+
+
+ %1 不是处理指令的有效目标名称。它必须是值 %2,例如 %3。
+
+
+
+
+ 一个路径中的最后一步必须包含节点或者原子值。它不能是两者的一个组合。
+
+
+
+
+ 处理指令的数据不能包含字符串 %1
+
+
+
+
+ 对于前缀 %1,没有存在绑定的命名空间。
+
+
+
+
+ 对于 %2 中的前缀 %1,没有存在绑定的命名空间。
+
+
+
+
+
+ %1 是一个无效的 %2。
+
+
+
+
+
+ %1 最多可以有 %n 个参数。因此 %2 是无效的。
+
+
+
+
+
+
+ %1 需要至少 %n 个参数。因此 %2 是无效的。
+
+
+
+
+
+ %1 的第一个参数不能是类型 %2 的。它必须是数字类型的,xs:yearMonthDuration 或者 xs:dayTimeDuration。
+
+
+
+
+ %1 的第一个参数不能是类型 %2 的。它必须是类型 %3、%4 或者 %5 的。
+
+
+
+
+ %1 的第二个参数不能是类型 %2 的。它必须是类型 %3、%4 或者 %5 的。
+
+
+
+
+ %1 不是一个有效的 XML 1.0 字符。
+
+
+
+
+ %1 的第一个参数不能是类型 %2 的。
+
+
+
+
+ 如果两个值都有区偏移(zone offset),它们必须拥有相同的区偏移。%1 和 %2 的区偏移是不同的。
+
+
+
+
+ %1 被调用了。
+
+
+
+
+ %1 必须被 %2 或者 %3 跟随,不能在替换字符串的末尾。
+
+
+
+
+ 在这个替换字符串中,%1 在没有被转义的时候必须被至少一个数字跟随。
+
+
+
+
+ 在这个替换字符串中,%1 只能被用于转义它本身或者 %2,而不是 %3
+
+
+
+
+ %1 匹配了换行符
+
+
+
+
+ %1 和 %2 匹配了一行的头和尾。
+
+
+
+
+ 匹配是大小写不敏感的
+
+
+
+
+ 空白字符被移除了,除非当它们出现在字符类中
+
+
+
+
+ %1 是正则表达式中的一个无效模式:%2
+
+
+
+
+ %1 是正则表达式中的一个无效标记。有效标记为:
+
+
+
+
+ 如果第一个参数是空序列或者零长度字符串(无命名空间),那么就不能指定前缀。前缀 %1 被指定了。
+
+
+
+
+ 将不能获取 %1。
+
+
+
+
+ 函数 %1 的第二个参数的根节点必须是一个文档节点。%2 不是一个文档节点。
+
+
+
+
+ 默认收集(collection)是未定义的
+
+
+
+
+ 无法获取 %1
+
+
+
+
+ 不支持正规化(normalization)表单 %1。被支持的表单是 %2、%3、%4 和 %5,以及无,例如空字符串(无正规化)。
+
+
+
+
+ 区偏移(zone offset)必须在 %1...%2 范围之内。%3 是在范围之外的。
+
+
+
+
+ %1 不是分钟的整数。
+
+
+
+
+ 所需要的表间关系是 %1;得到的表间关系却是 %2。
+
+
+
+
+ 项 %1 和所需的类型 %2 不匹配。
+
+
+
+
+
+ %1 是一个未知的方案类型。
+
+
+
+
+ 只有一个 %1 的声明可以出现在查询序言中。
+
+
+
+
+ 变量 %1 的初始化依赖于它本身
+
+
+
+
+ 没有名称为 %1 的变量存在。
+
+
+
+
+ 变量 %1 没有被使用
+
+
+
+
+ 不支持版本 %1。被支持的 XQuery 版本是 1.0。
+
+
+
+
+ 编码方式 %1 是无效的。它必须只包含拉丁字符,必须不包含空白符号,并且必须和正则表达式 %2 匹配。
+
+
+
+
+ 没有签名为 %1 的可用函数。
+
+
+
+
+
+ 默认命名空间声明必须出现在函数、变量和选项声明之前。
+
+
+
+
+ 命名空间声明必须出现在函数、变量和选项声明之前。
+
+
+
+
+ 模块导入不能出现在函数、变量和选项声明之前。
+
+
+
+
+ 不能重复声明前缀 %1。
+
+
+
+ 至于前缀 %1 可以被声明为和命名空间 %2 绑定。默认情况下,它已经被绑定到前缀 %1。
+
+
+
+
+ 前缀 %1 在序言中已经声明过了。
+
+
+
+
+ 一个选项的名称必须带有前缀。对于选项没有默认命名空间。
+
+
+
+
+ 不支持方案导入(Schema Import)特性,并且因此 %1 声明不能出现。
+
+
+
+
+ %1 的目标命名空间不能为空。
+
+
+
+
+ 不支持模块导入特性
+
+
+
+ 名称为 %1 的变量已经在序言中声明过了。
+
+
+
+
+ 名称为 %1 的外部变量并没有可用的值。
+
+
+
+ 用户定义的函数的命名空间不能为空(请试试预定义的前缀 %1,它就是用于这种情况的)。
+
+
+
+
+ 遇到了一个只允许在XQuery中出现的构造。
+
+
+
+
+ 模板%1已被声明
+
+
+
+
+ 任何其他模式名称不能出现关键字%1。
+
+
+
+
+ 属性%1的值必须是类型%2,但%3不是。
+
+
+
+
+ 前缀%1不能被绑定。默认的,它已被绑定到名字空间%2。
+
+
+
+
+ 变量%1已被声明。
+
+
+
+
+ 样式表函数必须有一个前缀名。
+
+
+
+
+ 用户定义函数的名字空间不能为空(试用为这种情况而存在的预定义前缀%1)
+
+
+
+
+ 命名空间 %1 是保留的;因此用户定义的函数不能使用它。请试试预定义的前缀 %2,它就是用于这种情况的。
+
+
+
+
+ 用户在一个库模块中定义的函数的命名空间必须和这个模块的命名空间一致。也就是说,它应该是 %1,而不是 %2
+
+
+
+
+ 一个带有签名 %1 的函数已经存在。
+
+
+
+
+ 不支持外部函数。所有支持的函数必须可以被直接使用,不能把它们声明为外部的
+
+
+
+
+ 名称为 %1 的参数已经被声明了。每个参数名称必须唯一。
+
+
+
+
+ 当函数%1被用于样式匹配时,参数必须是变量参考或者字符串。
+
+
+
+
+ 在XSL-T样式中,函数%1的第一个参数必须是字符串,以便用于匹配。
+
+
+
+
+ 在XSL-T样式中,函数%1的第一个参数必须是文字或者变量参考,以便用于匹配。
+
+
+
+
+ 在XSL-T样式中,函数%1不能有第三个参数。
+
+
+
+
+ 在XSL-T样式中,只用函数%1和%2可以用于匹配,%3不可以。
+
+
+
+
+ 在XSL-T仰视中,不能使用%1轴,只能使用%2轴或者%3轴。
+
+
+
+
+ %1不是一个合法的模板模式名称。
+
+
+
+
+ 一个在 for 表达式中绑定的变量的名称必须和这个定位变量不同。因此,这两个名称为 %1 的变量冲突。
+
+
+
+
+ 不支持方案验证特性(Schema Validation Feature)。因此,也许不能使用 %1 表达式。
+
+
+
+
+ 不支持任何编译指示表达式(pragma expression)。因此,必须呈现一个回调表达式(fallback expression)。
+
+
+
+
+ 每一个模板参数的名称都必须是唯一的;%2是重复的。
+
+
+
+
+ 这个 %1 轴在 XQuery 中是不被支持的。
+
+
+
+
+ %1不是一个处理指令的合法名称。
+
+
+
+
+ %1 不是一个有效的数字语义。
+
+
+
+
+ 没有名称为 %1 的可用函数。
+
+
+
+
+ 当这个命名空间 URI 被绑定到一个前缀 %1 时,它不能是空字符串。
+
+
+
+
+ %1 是一个无效的命名空间 URI。
+
+
+
+
+ 无法绑定到这个前缀 %1。
+
+
+
+
+ 命名空间 %1 只能和 %2 绑定(并且如果是这种情况,需要提前声明)。
+
+
+
+
+ 前缀 %1 只能和 %2 绑定(并且如果是这种情况,需要提前声明)。
+
+
+
+
+ 两个命名空间声明属性使用了相同的名称:%1。
+
+
+
+
+ 命名空间 URI 必须是一个常量并且不能使用封闭的表达式。
+
+
+
+
+ 一个名称为 %1 的属性已经出现在这个元素中了。
+
+
+
+
+ 一个直接元素构造器没有很好地形成。%1 后面跟着 %2。
+
+
+
+
+ 名称 %1 没有指向任何方案类型。
+
+
+
+
+ %1 是一个复杂类型。无法抛出到复杂类型。因此,抛出到例如 %2 这样的原子类型是可以的。
+
+
+
+
+ %1 不是原子类型。只能抛出到原子类型。
+
+
+
+ %1 不是处理指令的有效名称。因此这个名称测试永远不会匹配。
+
+
+
+
+
+ %1 不是范围内属性声明。注意方案导入特性是不被支持的。
+
+
+
+
+ 一个扩展表达式的名称必须在一个命名空间中。
+
+
+
+
+ 空白
+
+
+
+
+ 零或者一
+
+
+
+
+ 确切地一
+
+
+
+
+ 一或者更多
+
+
+
+
+ 零或者更多
+
+
+
+
+ 需要的类型是 %1,但是找到的是 %2。
+
+
+
+
+ 把 %1 升级为 %2 会导致精度的损失。
+
+
+
+
+ 焦点未定义。
+
+
+
+
+ 不能在任何其它类型节点后添加属性。
+
+
+
+
+ 一个名称为 %1 的属性已经被创建。
+
+
+
+
+ 只支持 Unicode 代码点校验(Unicode Codepoint Collation)(%1)。%2 是不被支持的。
+
+
+
+
+ 属性 %1 不能被串行化,因为它出现在最顶层。
+
+
+
+
+ %1 是不被支持的编码。
+
+
+
+
+ %1包含了在请求编码%2中不允许的八进位值。
+
+
+
+
+ 在使用编码%3的%2中出现的代码点%1不是一个有效的XML字符。
+
+
+
+
+ 含糊规则匹配。
+
+
+
+ 在一个命名空间构造中,命名空间的值不能为空字符串。
+
+
+
+
+
+
+
+
+
+ 前缀必须是有效的%1,而%2不是。
+
+
+
+
+ 前缀%1不能被绑定。
+
+
+
+
+ 只有前缀%1可以绑定到%2,反之也一样
+
+
+
+
+ 检测到环
+
+
+
+
+ 需要参数%1,但是没有提供对应的%2。
+
+
+
+
+ 参数%1已传递,但没有相应的%2存在。
+
+
+
+
+ URI不能有片段
+
+
+
+
+ 元素%1不能在这个位置。
+
+
+
+
+ 文本节点不能在这个位置。
+
+
+
+
+ 解析错误:%1
+
+
+
+
+ XSL-T版本属性的值必须是%1类型的值,而%2不是。
+
+
+
+
+ 在XSL-T 2.0处理器中运行一个1.0的样式表。
+
+
+
+
+ 未知的XSL-T属性%1。
+
+
+
+
+ 属性%1和%2彼此互斥。
+
+
+
+
+ 在一个简化样式表模块中,属性%1必须存在。
+
+
+
+
+ 如果元素%1没有属性%2,那么它也不能有属性%3或者%4。
+
+
+
+
+ 元素%1必须至少有属性%2或者%3其中一个。
+
+
+
+
+ 在元素%2的%1属性中至少要指定一个模式。
+
+
+
+
+ 属性%1不能出现在元素%2上。只有标准属性可以出现。
+
+
+
+
+ 属性%1不能出现在元素%2上。只有%3和标准属性是允许的。
+
+
+
+
+ 属性%1不能出现在元素%2上。只有%3、%4和标准属性是允许的。
+
+
+
+
+ 属性%1不能出现在元素%2上。只有%3和标准属性是允许的。
+
+
+
+
+ XSL-T元素中的XSL-T属性必须放在空(null)命名空间中,而不是在XSL-T命名空间中,%1却是这个样子。
+
+
+
+
+ 属性%1必须出现在元素%2中。
+
+
+
+
+ 有本地名称%1的元素在XSL-T中不存在。
+
+
+
+
+ 元素%1必须最后出现。
+
+
+
+
+ 至少一个元素%1要出现在%2之前。
+
+
+
+
+ 只能出现一个元素%1。
+
+
+
+
+ 至少一个元素%1要出现在%2之内。
+
+
+
+
+ 当属性%1出现在%2中时,不能使用顺序构造。
+
+
+
+
+ 元素%1必须有在一个%2属性或者顺序构造。
+
+
+
+
+ 当需要参数时,不能通过属性%1或者顺序构造提供默认值。
+
+
+
+
+ 元素%1不能有子元素。
+
+
+
+
+ 元素%1不能有顺序构造。
+
+
+
+
+
+ 属性%1不能出现在%2中,因为它是%3的子元素。
+
+
+
+
+ 函数内的参数不能被声明为通道(tunnel)。
+
+
+
+
+ 这个处理器不能感知Schema,因此%1不能被使用。
+
+
+
+
+ 顶级样式表元素必须是在非空命名空间中的,而%1不是。
+
+
+
+
+ 元素%2中属性%1的值必须是%3或者%4,而不是%5。
+
+
+
+
+ 属性%1的值不能是%2。
+
+
+
+
+ 属性%1只能出现在前%2个元素中。
+
+
+
+
+ %2必须至少又一个子元素%1。
+
+
+
+ VolumeSlider
+
+
+
+ 已静音
+
+
+
+
+
+ 音量:%1%
+
+
+
+ WebCore::PlatformScrollbar
+
+
+ 滚动到这里
+
+
+
+ 左边缘
+
+
+
+ 顶部
+
+
+
+ 右边缘
+
+
+
+ 底部
+
+
+
+ 左一页
+
+
+
+ 上一页
+
+
+
+ 右一页
+
+
+
+ 下一页
+
+
+
+ 向左滚动
+
+
+
+ 向上滚动
+
+
+
+ 向右滚动
+
+
+
+ 向下滚动
+
+
+
+ QPlatformTheme
+
+
+ 确定
+
+
+
+ 确定(&O)
+
+
+
+ 取消
+
+
+
+ 取消(&C)
+
+
+
+ 是
+
+
+
+ 是(&Y)
+
+
+
+ 否
+
+
+
+ 否(&N)
+
+
+
+ 应用到所有
+
+
+
+ 应用到所有(&A)
+
+
+
+ QGnomeTheme
+
+
+ 确定
+
+
+
+ 确定(&O)
+
+
+
+ 取消
+
+
+
+ 取消(&C)
+
+
+
+ 是
+
+
+
+ 是(&Y)
+
+
+
+ 否
+
+
+
+ 否(&N)
+
+
+
+ 应用到所有
+
+
+
+ 应用到所有(&A)
+
+
+
diff --git a/modules/twainui/qwinhost.cpp b/modules/twainui/qwinhost.cpp
new file mode 100644
index 00000000..86b81f36
--- /dev/null
+++ b/modules/twainui/qwinhost.cpp
@@ -0,0 +1,325 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+// Implementation of the QWinHost classes
+
+#ifdef QT3_SUPPORT
+#undef QT3_SUPPORT
+#endif
+
+#include "qwinhost.hpp"
+
+#include
+#include
+
+#if QT_VERSION >= 0x050000
+#define QT_WA(unicode, ansi) unicode
+#endif
+
+/*!
+ \class QWinHost qwinhost.h
+ \brief The QWinHost class provides an API to use native Win32
+ windows in Qt applications.
+
+ QWinHost exists to provide a QWidget that can act as a parent for
+ any native Win32 control. Since QWinHost is a proper QWidget, it
+ can be used as a toplevel widget (e.g. 0 parent) or as a child of
+ any other QWidget.
+
+ QWinHost integrates the native control into the Qt user interface,
+ e.g. handles focus switches and laying out.
+
+ Applications moving to Qt may have custom Win32 controls that will
+ take time to rewrite with Qt. Such applications can use these
+ custom controls as children of QWinHost widgets. This allows the
+ application's user interface to be replaced gradually.
+
+ When the QWinHost is destroyed, and the Win32 window hasn't been
+ set with setWindow(), the window will also be destroyed.
+*/
+
+/*!
+ Creates an instance of QWinHost. \a parent and \a f are
+ passed on to the QWidget constructor. The widget has by default
+ no background.
+
+ \warning You cannot change the parent widget of the QWinHost instance
+ after the native window has been created, i.e. do not call
+ QWidget::setParent or move the QWinHost into a different layout.
+*/
+QWinHost::QWinHost(QWidget *parent, Qt::WindowFlags f)
+: QWidget(parent, f), wndproc(0),own_hwnd(false), hwnd(0)
+{
+ setAttribute(Qt::WA_NoBackground);
+ setAttribute(Qt::WA_NoSystemBackground);
+}
+
+/*!
+ Destroys the QWinHost object. If the hosted Win32 window has not
+ been set explicitly using setWindow() the window will be
+ destroyed.
+*/
+QWinHost::~QWinHost()
+{
+ if (wndproc) {
+#if defined(GWLP_WNDPROC)
+ QT_WA({
+ SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)wndproc);
+ },{
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)wndproc);
+ })
+#else
+ QT_WA({
+ SetWindowLong(hwnd, GWL_WNDPROC, (LONG)wndproc);
+ },{
+ SetWindowLongA(hwnd, GWL_WNDPROC, (LONG)wndproc);
+ })
+#endif
+ }
+
+ if (hwnd && own_hwnd)
+ DestroyWindow(hwnd);
+}
+
+/*!
+ Reimplement this virtual function to create and return the native
+ Win32 window. \a parent is the handle to this widget, and \a
+ instance is the handle to the application instance. The returned HWND
+ must be a child of the \a parent HWND.
+
+ The default implementation returns null. The window returned by a
+ reimplementation of this function is owned by this QWinHost
+ instance and will be destroyed in the destructor.
+
+ This function is called by the implementation of polish() if no
+ window has been set explicitly using setWindow(). Call polish() to
+ force this function to be called.
+
+ \sa setWindow()
+*/
+HWND QWinHost::createWindow(HWND parent, HINSTANCE instance)
+{
+ Q_UNUSED(parent);
+ Q_UNUSED(instance);
+ return 0;
+}
+
+/*!
+ Ensures that the window provided a child of this widget, unless
+ it is a WS_OVERLAPPED window.
+*/
+void QWinHost::fixParent()
+{
+ if (!hwnd)
+ return;
+ if (!::IsWindow(hwnd)) {
+ hwnd = 0;
+ return;
+ }
+ if (::GetParent(hwnd) == (HWND)winId())
+ return;
+ long style = GetWindowLong(hwnd, GWL_STYLE);
+ if (style & WS_OVERLAPPED)
+ return;
+ ::SetParent(hwnd, (HWND)winId());
+}
+
+/*!
+ Sets the native Win32 window to \a window. If \a window is not a child
+ window of this widget, then it is reparented to become one. If \a window
+ is not a child window (i.e. WS_OVERLAPPED is set), then this function does nothing.
+
+ The lifetime of the window handle will be managed by Windows, QWinHost does not
+ call DestroyWindow. To verify that the handle is destroyed when expected, handle
+ WM_DESTROY in the window procedure.
+
+ \sa window(), createWindow()
+*/
+void QWinHost::setWindow(HWND window)
+{
+ if (hwnd && own_hwnd)
+ DestroyWindow(hwnd);
+
+ hwnd = window;
+ fixParent();
+
+ own_hwnd = false;
+}
+
+/*!
+ Returns the handle to the native Win32 window, or null if no
+ window has been set or created yet.
+
+ \sa setWindow(), createWindow()
+*/
+HWND QWinHost::window() const
+{
+ return hwnd;
+}
+
+void *getWindowProc(QWinHost *host)
+{
+ return host ? host->wndproc : 0;
+}
+
+LRESULT CALLBACK WinHostProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ QWinHost *widget = qobject_cast(QWidget::find((WId)::GetParent(hwnd)));
+ WNDPROC oldproc = (WNDPROC)getWindowProc(widget);
+ if (widget) {
+ switch(msg) {
+ case WM_LBUTTONDOWN:
+ if (::GetFocus() != hwnd && (widget->focusPolicy() & Qt::ClickFocus)) {
+ widget->setFocus(Qt::MouseFocusReason);
+ }
+ break;
+
+ case WM_SYSKEYDOWN:
+ case WM_SYSKEYUP:
+ QT_WA({
+ SendMessage((HWND)widget->winId(), msg, wParam, lParam);
+ }, {
+ SendMessageA((HWND)widget->winId(), msg, wParam, lParam);
+ })
+ break;
+
+ case WM_KEYDOWN:
+ if (wParam == VK_TAB) {
+ QT_WA({
+ SendMessage((HWND)widget->winId(), msg, wParam, lParam);
+ }, {
+ SendMessageA((HWND)widget->winId(), msg, wParam, lParam);
+ })
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ QT_WA({
+ if (oldproc)
+ return CallWindowProc(oldproc, hwnd, msg, wParam, lParam);
+ return DefWindowProc(hwnd,msg,wParam,lParam);
+ }, {
+ if (oldproc)
+ return CallWindowProcA(oldproc, hwnd, msg, wParam, lParam);
+ return DefWindowProcA(hwnd,msg,wParam,lParam);
+ })
+}
+
+/*!
+ \reimp
+*/
+bool QWinHost::event(QEvent *e)
+{
+ switch(e->type()) {
+ case QEvent::Polish:
+ if (!hwnd) {
+ hwnd = createWindow(HWND(winId()), GetModuleHandle(0));
+ fixParent();
+ own_hwnd = hwnd != 0;
+ }
+ if (hwnd && !wndproc && GetParent(hwnd) == (HWND)winId()) {
+#if defined(GWLP_WNDPROC)
+ QT_WA({
+ wndproc = (void*)GetWindowLongPtr(hwnd, GWLP_WNDPROC);
+ SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)WinHostProc);
+ }, {
+ wndproc = (void*)GetWindowLongPtrA(hwnd, GWLP_WNDPROC);
+ SetWindowLongPtrA(hwnd, GWLP_WNDPROC, (LONG_PTR)WinHostProc);
+ })
+#else
+ QT_WA({
+ wndproc = (void*)GetWindowLong(hwnd, GWL_WNDPROC);
+ SetWindowLong(hwnd, GWL_WNDPROC, (LONG)WinHostProc);
+ }, {
+ wndproc = (void*)GetWindowLongA(hwnd, GWL_WNDPROC);
+ SetWindowLongA(hwnd, GWL_WNDPROC, (LONG)WinHostProc);
+ })
+#endif
+
+ LONG style;
+ QT_WA({
+ style = GetWindowLong(hwnd, GWL_STYLE);
+ }, {
+ style = GetWindowLongA(hwnd, GWL_STYLE);
+ })
+ if (style & WS_TABSTOP)
+ setFocusPolicy(Qt::FocusPolicy(focusPolicy() | Qt::StrongFocus));
+ }
+ break;
+ case QEvent::WindowBlocked:
+ if (hwnd)
+ EnableWindow(hwnd, false);
+ break;
+ case QEvent::WindowUnblocked:
+ if (hwnd)
+ EnableWindow(hwnd, true);
+ break;
+ }
+ return QWidget::event(e);
+}
+
+/*!
+ \reimp
+*/
+void QWinHost::showEvent(QShowEvent *e)
+{
+ QWidget::showEvent(e);
+
+ if (hwnd)
+ SetWindowPos(hwnd, HWND_TOP, 0, 0, width(), height(), SWP_SHOWWINDOW);
+}
+
+/*!
+ \reimp
+*/
+void QWinHost::focusInEvent(QFocusEvent *e)
+{
+ QWidget::focusInEvent(e);
+
+ if (hwnd)
+ ::SetFocus(hwnd);
+}
+
+/*!
+ \reimp
+*/
+void QWinHost::resizeEvent(QResizeEvent *e)
+{
+ QWidget::resizeEvent(e);
+
+ if (hwnd)
+ SetWindowPos(hwnd, HWND_TOP, 0, 0, width(), height(), 0);
+}
+
+/*!
+ \reimp
+*/
+#if QT_VERSION >= 0x050000
+bool QWinHost::nativeEvent(const QByteArray &eventType, void *message, long *result)
+#else
+bool QWinHost::winEvent(MSG *msg, long *result)
+#endif
+{
+#if QT_VERSION >= 0x050000
+ MSG *msg = (MSG *)message;
+#endif
+ switch (msg->message)
+ {
+ case WM_SETFOCUS:
+ if (hwnd) {
+ ::SetFocus(hwnd);
+ return true;
+ }
+ default:
+ break;
+ }
+#if QT_VERSION >= 0x050000
+ return QWidget::nativeEvent(eventType, message, result);
+#else
+ return QWidget::winEvent(msg, result);
+#endif
+}
diff --git a/modules/twainui/qwinhost.hpp b/modules/twainui/qwinhost.hpp
new file mode 100644
index 00000000..7e4e1de6
--- /dev/null
+++ b/modules/twainui/qwinhost.hpp
@@ -0,0 +1,45 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+// Declaration of the QWinHost classes
+
+#ifndef QWINHOST_H
+#define QWINHOST_H
+
+#include
+
+class QWinHost : public QWidget
+{
+ Q_OBJECT
+public:
+ QWinHost(QWidget *parent = 0, Qt::WindowFlags f = 0);
+ ~QWinHost();
+
+ void setWindow(HWND);
+ HWND window() const;
+
+protected:
+ virtual HWND createWindow(HWND parent, HINSTANCE instance);
+
+ bool event(QEvent *e);
+ void showEvent(QShowEvent *);
+ void focusInEvent(QFocusEvent*);
+ void resizeEvent(QResizeEvent*);
+
+#if QT_VERSION >= 0x050000
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result);
+#else
+ bool winEvent(MSG *msg, long *result);
+#endif
+
+private:
+ void fixParent();
+ friend void* getWindowProc(QWinHost*);
+
+ void *wndproc;
+ bool own_hwnd;
+ HWND hwnd;
+};
+
+#endif // QWINHOST_H
diff --git a/modules/twainui/qwinwidget.cpp b/modules/twainui/qwinwidget.cpp
new file mode 100644
index 00000000..2c0334e1
--- /dev/null
+++ b/modules/twainui/qwinwidget.cpp
@@ -0,0 +1,359 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+// Implementation of the QWinWidget classes
+
+#ifdef QT3_SUPPORT
+#undef QT3_SUPPORT
+#endif
+
+#ifdef UNICODE
+#undef UNICODE
+#endif
+
+#include "qmfcapp.hpp"
+
+#ifdef QTWINMIGRATE_WITHMFC
+#include
+#endif
+
+#include
+
+#include "qwinwidget.hpp"
+
+#include
+
+#if QT_VERSION >= 0x050000
+#include
+#include
+#define QT_WA(unicode, ansi) unicode
+#endif
+
+/*!
+ \class QWinWidget qwinwidget.h
+ \brief The QWinWidget class is a Qt widget that can be child of a
+ native Win32 widget.
+
+ The QWinWidget class is the bridge between an existing application
+ user interface developed using native Win32 APIs or toolkits like
+ MFC, and Qt based GUI elements.
+
+ Using QWinWidget as the parent of QDialogs will ensure that
+ modality, placement and stacking works properly throughout the
+ entire application. If the child widget is a top level window that
+ uses the \c WDestructiveClose flag, QWinWidget will destroy itself
+ when the child window closes down.
+
+ Applications moving to Qt can use QWinWidget to add new
+ functionality, and gradually replace the existing interface.
+*/
+
+/*!
+ Creates an instance of QWinWidget. \a hParentWnd is the handle to
+ the native Win32 parent. If a \a parent is provided the object is
+ owned by that QObject. \a f is passed on to the QWidget constructor.
+*/
+QWinWidget::QWinWidget(HWND hParentWnd, QObject *parent, Qt::WindowFlags f)
+: QWidget(0, f), hParent(hParentWnd), prevFocus(0), reenable_parent(false)
+{
+ if (parent)
+ QObject::setParent(parent);
+
+ init();
+}
+
+#ifdef QTWINMIGRATE_WITHMFC
+/*!
+ \overload
+
+ Creates an instance of QWinWidget. \a parentWnd is a pointer to an
+ MFC window object. If a \a parent is provided the object is owned
+ by that QObject. \a f is passed on to the QWidget constructor.
+*/
+QWinWidget::QWinWidget(CWnd *parentWnd, QObject *parent, Qt::WindowFlags f)
+: QWidget(0, f), hParent(parentWnd ? parentWnd->m_hWnd : 0), prevFocus(0), reenable_parent(false)
+{
+ if (parent)
+ QObject::setParent(parent);
+
+ init();
+}
+#endif
+
+
+void QWinWidget::init()
+{
+ //Q_ASSERT(hParent);
+
+ if (hParent) {
+#if QT_VERSION >= 0x050000
+ setProperty("_q_embedded_native_parent_handle", WId(hParent));
+#endif
+ // make the widget window style be WS_CHILD so SetParent will work
+ QT_WA({
+ SetWindowLong((HWND)winId(), GWL_STYLE, WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
+ }, {
+ SetWindowLongA((HWND)winId(), GWL_STYLE, WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
+ })
+#if QT_VERSION >= 0x050000
+ QWindow *window = windowHandle();
+ HWND h = static_cast(QGuiApplication::platformNativeInterface()->
+ nativeResourceForWindow("handle", window));
+ SetParent(h, hParent);
+ window->setFlags(Qt::FramelessWindowHint);
+#else
+ SetParent(winId(), hParent);
+#endif
+ QEvent e(QEvent::EmbeddingControl);
+ QApplication::sendEvent(this, &e);
+ }
+}
+
+/*!
+ Destroys this object, freeing all allocated resources.
+*/
+QWinWidget::~QWinWidget()
+{
+}
+
+/*!
+ Returns the handle of the native Win32 parent window.
+*/
+HWND QWinWidget::parentWindow() const
+{
+ return hParent;
+}
+
+/*!
+ \reimp
+*/
+void QWinWidget::childEvent(QChildEvent *e)
+{
+ QObject *obj = e->child();
+ if (obj->isWidgetType()) {
+ if (e->added()) {
+ if (obj->isWidgetType()) {
+ obj->installEventFilter(this);
+ }
+ } else if (e->removed() && reenable_parent) {
+ reenable_parent = false;
+ EnableWindow(hParent, true);
+ obj->removeEventFilter(this);
+ }
+ }
+ QWidget::childEvent(e);
+}
+
+/*! \internal */
+void QWinWidget::saveFocus()
+{
+ if (!prevFocus)
+ prevFocus = ::GetFocus();
+ if (!prevFocus)
+ prevFocus = parentWindow();
+}
+
+/*!
+ Shows this widget. Overrides QWidget::show().
+
+ \sa showCentered()
+*/
+void QWinWidget::show()
+{
+ saveFocus();
+ QWidget::show();
+}
+
+/*!
+ Centers this widget over the native parent window. Use this
+ function to have Qt toplevel windows (i.e. dialogs) positioned
+ correctly over their native parent windows.
+
+ \code
+ QWinWidget qwin(hParent);
+ qwin.center();
+
+ QMessageBox::information(&qwin, "Caption", "Information Text");
+ \endcode
+
+ This will center the message box over the client area of hParent.
+*/
+void QWinWidget::center()
+{
+ const QWidget *child = findChild();
+ if (child && !child->isWindow()) {
+ qWarning("QWinWidget::center: Call this function only for QWinWidgets with toplevel children");
+ }
+ RECT r;
+ GetWindowRect(hParent, &r);
+ setGeometry((r.right-r.left)/2+r.left, (r.bottom-r.top)/2+r.top,0,0);
+}
+
+/*!
+ \obsolete
+
+ Call center() instead.
+*/
+void QWinWidget::showCentered()
+{
+ center();
+ show();
+}
+
+/*!
+ Sets the focus to the window that had the focus before this widget
+ was shown, or if there was no previous window, sets the focus to
+ the parent window.
+*/
+void QWinWidget::resetFocus()
+{
+ if (prevFocus)
+ ::SetFocus(prevFocus);
+ else
+ ::SetFocus(parentWindow());
+}
+
+/*! \reimp
+*/
+#if QT_VERSION >= 0x050000
+bool QWinWidget::nativeEvent(const QByteArray &, void *message, long *)
+#else
+bool QWinWidget::winEvent(MSG *msg, long *)
+#endif
+{
+#if QT_VERSION >= 0x050000
+ MSG *msg = (MSG *)message;
+#endif
+ if (msg->message == WM_SETFOCUS) {
+ Qt::FocusReason reason;
+ if (::GetKeyState(VK_LBUTTON) < 0 || ::GetKeyState(VK_RBUTTON) < 0)
+ reason = Qt::MouseFocusReason;
+ else if (::GetKeyState(VK_SHIFT) < 0)
+ reason = Qt::BacktabFocusReason;
+ else
+ reason = Qt::TabFocusReason;
+ QFocusEvent e(QEvent::FocusIn, reason);
+ QApplication::sendEvent(this, &e);
+ }
+
+ return false;
+}
+
+/*!
+ \reimp
+*/
+bool QWinWidget::eventFilter(QObject *o, QEvent *e)
+{
+ QWidget *w = (QWidget*)o;
+
+ switch (e->type()) {
+ case QEvent::WindowDeactivate:
+ if (w->isModal() && w->isHidden())
+ BringWindowToTop(hParent);
+ break;
+
+ case QEvent::Hide:
+ if (reenable_parent) {
+ EnableWindow(hParent, true);
+ reenable_parent = false;
+ }
+ resetFocus();
+ if (w->testAttribute(Qt::WA_DeleteOnClose) && w->isWindow())
+ deleteLater();
+ break;
+
+ case QEvent::Show:
+ if (w->isWindow()) {
+ saveFocus();
+ hide();
+ if (w->isModal() && !reenable_parent) {
+ EnableWindow(hParent, false);
+ reenable_parent = true;
+ }
+ }
+ break;
+
+ case QEvent::Close:
+ ::SetActiveWindow(hParent);
+ if (w->testAttribute(Qt::WA_DeleteOnClose))
+ deleteLater();
+ break;
+
+ default:
+ break;
+ }
+
+ return QWidget::eventFilter(o, e);
+}
+
+/*! \reimp
+*/
+void QWinWidget::focusInEvent(QFocusEvent *e)
+{
+ QWidget *candidate = this;
+
+ switch (e->reason()) {
+ case Qt::TabFocusReason:
+ case Qt::BacktabFocusReason:
+ while (!(candidate->focusPolicy() & Qt::TabFocus)) {
+ candidate = candidate->nextInFocusChain();
+ if (candidate == this) {
+ candidate = 0;
+ break;
+ }
+ }
+ if (candidate) {
+ candidate->setFocus(e->reason());
+ if (e->reason() == Qt::BacktabFocusReason || e->reason() == Qt::TabFocusReason) {
+ candidate->setAttribute(Qt::WA_KeyboardFocusChange);
+ candidate->window()->setAttribute(Qt::WA_KeyboardFocusChange);
+ }
+ if (e->reason() == Qt::BacktabFocusReason)
+ QWidget::focusNextPrevChild(false);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/*! \reimp
+*/
+bool QWinWidget::focusNextPrevChild(bool next)
+{
+ QWidget *curFocus = focusWidget();
+ if (!next) {
+ if (!curFocus->isWindow()) {
+ QWidget *nextFocus = curFocus->nextInFocusChain();
+ QWidget *prevFocus = 0;
+ QWidget *topLevel = 0;
+ while (nextFocus != curFocus) {
+ if (nextFocus->focusPolicy() & Qt::TabFocus) {
+ prevFocus = nextFocus;
+ topLevel = 0;
+ } else if (nextFocus->isWindow()) {
+ topLevel = nextFocus;
+ }
+ nextFocus = nextFocus->nextInFocusChain();
+ }
+
+ if (!topLevel) {
+ return QWidget::focusNextPrevChild(false);
+ }
+ }
+ } else {
+ QWidget *nextFocus = curFocus;
+ while (1) {
+ nextFocus = nextFocus->nextInFocusChain();
+ if (nextFocus->isWindow())
+ break;
+ if (nextFocus->focusPolicy() & Qt::TabFocus) {
+ return QWidget::focusNextPrevChild(true);
+ }
+ }
+ }
+
+ ::SetFocus(hParent);
+
+ return true;
+}
diff --git a/modules/twainui/qwinwidget.hpp b/modules/twainui/qwinwidget.hpp
new file mode 100644
index 00000000..ed47d1f8
--- /dev/null
+++ b/modules/twainui/qwinwidget.hpp
@@ -0,0 +1,54 @@
+// Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+// SPDX-License-Identifier: BSD-3-Clause
+
+
+// Declaration of the QWinWidget classes
+
+#ifndef QWINWIDGET_H
+#define QWINWIDGET_H
+
+#include
+#include "qmfcapp.hpp"
+
+class CWnd;
+
+class QWinWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ QWinWidget( HWND hParentWnd, QObject *parent = 0, Qt::WindowFlags f = 0 );
+#ifdef QTWINMIGRATE_WITHMFC
+ QWinWidget( CWnd *parnetWnd, QObject *parent = 0, Qt::WindowFlags f = 0 );
+#endif
+ ~QWinWidget();
+
+ void show();
+ void center();
+ void showCentered();
+
+ HWND parentWindow() const;
+
+protected:
+ void childEvent( QChildEvent *e );
+ bool eventFilter( QObject *o, QEvent *e );
+
+ bool focusNextPrevChild(bool next);
+ void focusInEvent(QFocusEvent *e);
+#if QT_VERSION >= 0x050000
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result);
+#else
+ bool winEvent(MSG *msg, long *result);
+#endif
+
+private:
+ void init();
+
+ void saveFocus();
+ void resetFocus();
+
+ HWND hParent;
+ HWND prevFocus;
+ bool reenable_parent;
+};
+
+#endif // QWINWIDGET_H
diff --git a/modules/twainui/setpicclrtool.cpp b/modules/twainui/setpicclrtool.cpp
new file mode 100644
index 00000000..78597d89
--- /dev/null
+++ b/modules/twainui/setpicclrtool.cpp
@@ -0,0 +1,315 @@
+#include "setpicclrtool.h"
+#include "ui_setpicclrtool.h"
+#include "widget.h"
+#include
+#include
+
+setPicClrTool::setPicClrTool(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::setPicClrTool)
+{
+ ui->setupUi(this);
+ setMouseTracking(true);
+ ui->inputEdt->setEnabled(false);
+ ui->outputEdt->setEnabled(false);
+ ui->inputEdt->setValidator(new QIntValidator(0, 255, this));
+ ui->outputEdt->setValidator(new QIntValidator(0, 255, this));
+ ui->widget->setFocus(Qt::MouseFocusReason);
+ connect(ui->widget,SIGNAL(mouseCoordSig(QPoint)),this,SLOT(mouseCoordSlot(QPoint)));
+ connect(ui->widget,SIGNAL(dragPointChecked(bool)),this,SLOT(lineEditEnable(bool)));
+ connect(ui->widget,SIGNAL(lineChangeSig()),this,SLOT(lineChangeSlot()));
+}
+
+setPicClrTool::~setPicClrTool()
+{
+ delete ui;
+}
+
+void setPicClrTool::getGrayTable(uchar *table, size_t length)
+{
+ QVector gray = getGrayALLPoint();
+ for (size_t i = 0; i < length; i++)
+ table[i] = static_cast(gray[static_cast(i)]);
+}
+
+void setPicClrTool::getRGBTable(uchar *table, size_t length)
+{
+ if (length != 768)
+ throw "length is not 768.";
+
+ QVector rgb = getRgbALLPoint();
+ QVector red = getRedALLPoint();
+ QVector green = getGreenALLPoint();
+ QVector blue = getBlueALLPoint();
+
+
+ for (size_t i = 0; i < 256; i++)
+ {
+ //if (i == 255)
+ // int a = 0;
+ //table member order is B\G\R
+ table[i * 3 + 0] = static_cast(blue[rgb[static_cast(i)]]);
+ table[i * 3 + 1] = static_cast(green[rgb[static_cast(i)]]);
+ table[i * 3 + 2] = static_cast(red[rgb[static_cast(i)]]);
+ }
+}
+
+//void setPicClrTool::setGrayTable(const uchar *table, size_t length)
+//{
+// QVector gray;
+// for (size_t i = 0; i < length; i++)
+// gray[static_cast(i)] = int(table[i]);
+// //ui->widget->setGrayALLPoint(gray);
+//}
+
+//void setPicClrTool::setRGBTable(const uchar *table, size_t length)
+//{
+// QVector rgb;
+// QVector red;
+// QVector green;
+// QVector blue;
+// for(int i = 0; i < 256; i++){
+// rgb.append(i);
+// }
+// for (size_t i = 0; i < length; i++){
+// red.append(int(table[i * 3 + 0]));
+// green.append(int(table[i * 3 + 1]));
+// blue.append(int(table[i * 3 + 2]));
+// }
+
+//}
+
+void setPicClrTool::setColorMode(int colorMode)
+{
+ QVariant v(6);
+ if(colorMode == 0)
+ {
+ ui->colorSetCmb->setItemData(1,v,Qt::UserRole - 1);
+ }
+ else
+ {
+ ui->comboBox->setItemData(2,v,Qt::UserRole - 1);
+ ui->colorSetCmb->setItemData(0,v,Qt::UserRole - 1);
+ ui->colorSetCmb->setItemData(2,v,Qt::UserRole - 1);
+ ui->colorSetCmb->setItemData(3,v,Qt::UserRole - 1);
+ ui->colorSetCmb->setItemData(4,v,Qt::UserRole - 1);
+ ui->colorSetCmb->setCurrentIndex(1);
+ }
+}
+
+QVector > setPicClrTool::getRGBKeyTable()
+{
+ QVector> plv;
+ plv.append(getRgbKeyPoint());
+ plv.append(getRedKeyPoint());
+ plv.append(getGreenKeyPoint());
+ plv.append(getBlueKeyPoint());
+ return plv;
+}
+
+void setPicClrTool::setRGBKeyTable(QVector > &plv)
+{
+ setRgbKeyPoint(plv[0]);
+ setRedKeyPoint(plv[1]);
+ setGreenKeyPoint(plv[2]);
+ setBlueKeyPoint(plv[3]);
+}
+
+QList setPicClrTool::getGrayKeyTable()
+{
+ return getGrayKeyPoint();
+}
+
+void setPicClrTool::setGrayKeyTable(QList &plv)
+{
+ setGrayKeyPoint(plv);
+}
+
+QVector setPicClrTool::getRgbALLPoint()
+{
+ return ui->widget->getRgbALLPoint();
+}
+
+QList setPicClrTool::getRgbKeyPoint() const
+{
+ qDebug() << "setRgb" << ui->widget->getRgbKeyPoint();
+ return ui->widget->getRgbKeyPoint();
+}
+
+void setPicClrTool::setRgbKeyPoint(const QList &pVec)
+{
+ qDebug() << "setRgb" << pVec;
+ ui->widget->setRgbKeyPoint(pVec);
+}
+
+QList setPicClrTool::getRedKeyPoint() const
+{
+ return ui->widget->getRedKeyPoint();
+}
+
+void setPicClrTool::setRedKeyPoint(const QList &pVec)
+{
+ ui->widget->setRedKeyPoint(pVec);
+}
+
+QList setPicClrTool::getBlueKeyPoint() const
+{
+ return ui->widget->getBlueKeyPoint();
+}
+
+void setPicClrTool::setBlueKeyPoint(const QList &pVec)
+{
+ ui->widget->setBlueKeyPoint(pVec);
+}
+
+QList setPicClrTool::getGreenKeyPoint() const
+{
+ return ui->widget->getGreenKeyPoint();
+}
+
+void setPicClrTool::setGreenKeyPoint(const QList &pVec)
+{
+ ui->widget->setGreenKeyPoint(pVec);
+}
+
+QList setPicClrTool::getGrayKeyPoint() const
+{
+ return ui->widget->getGrayKeyPoint();
+}
+
+void setPicClrTool::setGrayKeyPoint(const QList &pVec)
+{
+ ui->widget->setGrayKeyPoint(pVec);
+}
+
+QVector setPicClrTool::getRedALLPoint()
+{
+ return ui->widget->getRedALLPoint();
+}
+
+QVector