📄 quiloader.cpp
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "quiloader.h"#include "customwidget.h"#include <formbuilder.h>#include <ui4.h>#include <qdebug.h>#include <QAction>#include <QActionGroup>#include <QApplication>#include <QDir>#include <QLibraryInfo>#include <QLayout>#include <QWidget>#include <QMap>#include <QTabWidget>#include <QTreeWidget>#include <QListWidget>#include <QTableWidget>#include <QToolBox>#include <QComboBox>#include <private/qobject_p.h>typedef QMap<QString, bool> widget_map;Q_GLOBAL_STATIC(widget_map, g_widgets)#ifdef QFORMINTERNAL_NAMESPACEnamespace QFormInternal{#endifclass FormBuilderPrivate: public QFormBuilder{ friend class QUiLoader; friend class QUiLoaderPrivate; typedef QFormBuilder ParentClass;public: QUiLoader *loader; FormBuilderPrivate(): loader(0) {} QWidget *defaultCreateWidget(const QString &className, QWidget *parent, const QString &name) { return ParentClass::createWidget(className, parent, name); } QLayout *defaultCreateLayout(const QString &className, QObject *parent, const QString &name) { return ParentClass::createLayout(className, parent, name); } QAction *defaultCreateAction(QObject *parent, const QString &name) { return ParentClass::createAction(parent, name); } QActionGroup *defaultCreateActionGroup(QObject *parent, const QString &name) { return ParentClass::createActionGroup(parent, name); } virtual QWidget *createWidget(const QString &className, QWidget *parent, const QString &name) { if (QWidget *widget = loader->createWidget(className, parent, name)) { widget->setObjectName(name); return widget; } return 0; } virtual QLayout *createLayout(const QString &className, QObject *parent, const QString &name) { if (QLayout *layout = loader->createLayout(className, parent, name)) { layout->setObjectName(name); return layout; } return 0; } virtual QActionGroup *createActionGroup(QObject *parent, const QString &name) { if (QActionGroup *actionGroup = loader->createActionGroup(parent, name)) { actionGroup->setObjectName(name); return actionGroup; } return 0; } virtual QAction *createAction(QObject *parent, const QString &name) { if (QAction *action = loader->createAction(parent, name)) { action->setObjectName(name); return action; } return 0; } virtual void applyProperties(QObject *o, const QList<DomProperty*> &properties); virtual QWidget *create(DomUI *ui, QWidget *parentWidget); virtual QWidget *create(DomWidget *ui_widget, QWidget *parentWidget);private: QString m_class;};void FormBuilderPrivate::applyProperties(QObject *o, const QList<DomProperty*> &properties){ QFormBuilder::applyProperties(o, properties); // translate string properties foreach (DomProperty *p, properties) { if (p->kind() != DomProperty::String) continue; DomString *dom_str = p->elementString(); if (dom_str->hasAttributeNotr()) { QString notr = dom_str->attributeNotr(); if (notr == QLatin1String("yes") || notr == QLatin1String("true")) continue; } QByteArray name = p->attributeName().toUtf8(); QVariant v = o->property(name); if (v.type() != QVariant::String) continue; QString text = QApplication::translate(m_class.toUtf8(), v.toString().toUtf8(), dom_str->attributeComment().toUtf8(), QCoreApplication::UnicodeUTF8); o->setProperty(name, text); }}QWidget *FormBuilderPrivate::create(DomUI *ui, QWidget *parentWidget){ m_class = ui->elementClass(); return QFormBuilder::create(ui, parentWidget);}static void recursiveTranslate(QTreeWidgetItem *item, const QString &class_name){ int cnt = item->columnCount(); for (int i = 0; i < cnt; ++i) { QString text = QApplication::translate(class_name.toUtf8(), item->text(i).toUtf8(), "", QCoreApplication::UnicodeUTF8); item->setText(i, text); } cnt = item->childCount(); for (int i = 0; i < cnt; ++i) recursiveTranslate(item->child(i), class_name);}QWidget *FormBuilderPrivate::create(DomWidget *ui_widget, QWidget *parentWidget){ QWidget *w = QFormBuilder::create(ui_widget, parentWidget); if (w == 0) return 0; if (QTabWidget *tabw = qobject_cast<QTabWidget*>(w)) { int cnt = tabw->count(); for (int i = 0; i < cnt; ++i) { QString text = QApplication::translate(m_class.toUtf8(), tabw->tabText(i).toUtf8(), "", QCoreApplication::UnicodeUTF8); tabw->setTabText(i, text); } } else if (QListWidget *listw = qobject_cast<QListWidget*>(w)) { int cnt = listw->count(); for (int i = 0; i < cnt; ++i) { QListWidgetItem *item = listw->item(i); QString text = QApplication::translate(m_class.toUtf8(), item->text().toUtf8(), "", QCoreApplication::UnicodeUTF8); item->setText(text); } } else if (QTreeWidget *treew = qobject_cast<QTreeWidget*>(w)) { int cnt = treew->topLevelItemCount(); for (int i = 0; i < cnt; ++i) { QTreeWidgetItem *item = treew->topLevelItem(i); recursiveTranslate(item, m_class); } } else if (QTableWidget *tablew = qobject_cast<QTableWidget*>(w)) { int row_cnt = tablew->rowCount(); int col_cnt = tablew->columnCount(); for (int i = 0; i < row_cnt; ++i) { for (int j = 0; j < col_cnt; ++j) { QTableWidgetItem *item = tablew->item(i, j); if (item == 0) continue; QString text = QApplication::translate(m_class.toUtf8(), item->text().toUtf8(), "", QCoreApplication::UnicodeUTF8); item->setText(text); } } } else if (QComboBox *combow = qobject_cast<QComboBox*>(w)) { int cnt = combow->count(); for (int i = 0; i < cnt; ++i) { QString text = QApplication::translate(m_class.toUtf8(), combow->itemText(i).toUtf8(), "", QCoreApplication::UnicodeUTF8); combow->setItemText(i, text); } } else if (QToolBox *toolw = qobject_cast<QToolBox*>(w)) { int cnt = toolw->count(); for (int i = 0; i < cnt; ++i) { QString text = QApplication::translate(m_class.toUtf8(), toolw->itemText(i).toUtf8(), "", QCoreApplication::UnicodeUTF8); toolw->setItemText(i, text); } } return w;}#ifdef QFORMINTERNAL_NAMESPACE}#endifclass QUiLoaderPrivate: public QObjectPrivate{ Q_DECLARE_PUBLIC(QUiLoader)public: FormBuilderPrivate builder; void setupWidgetMap() const;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -