コントロールのプロパティのQt Designerを書く11 - XMLのインポート

I.はじめに

記事では、XMLデータファイルに設計された輸出規制を担当して、この記事では、部分的にエクスポートされたXMLデータファイルのインポートを担当し、その後、自動的にキャンバス上の対応するコントロールを生成し、Qtは組み込みのXMLデータ解析機能、非常に強力ですQtXmlパッケージアセンブリで、Qtは、特にGUIコントロール、主要なオペレーティングシステムプラットフォームの多くの機能をカプセル化するという利点があり、確かに非常に大きなワンストップスーパーマーケットのGUIで、ネットワークコンポーネント、非常に強力ではないが、しかし、いくつかの基本的な対処しますアプリケーションは十分以上です。データをエクスポートプロパティおよびプロパティ値のリストに応じて代わりのXMLの子ノードの格納され、ノードの解析中に横断する必要がQDomNamedNodeMap ATTRS = element.attributes()、名前及び属性値を属性XML、次に一つずつサイクル名前と値、QDomNode N = attrs.item(i)を除去することができる。QStringのnodeNameの= n.nodeName(); QStringののnodeValue = n.nodeValue()。

経験住所:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ抽出コード:877pファイル:実行可能ファイルを.zipファイル

第二に、機能の実現

  1. すべてのコントロールは自動的にプラグインがリストファイル、120以上のデフォルトの組み込みコントロールを生成しロードします。
  2. キャンバスをドラッグすると、自動的に対応する制御、WYSIWYGを生成します。
  3. バーの中国の財産権、対応するプロパティを変更するには、すぐに白の使用に非常に適し、シンプルで直感的な、対応する選択制御に適用されます。
  4. 元のテキスト翻訳属性フィールドのマッピングメカニズム、高効率で、簡単にプロパティバー他の言語を拡張することができます。
  5. 自動的にドロップダウンボックス列挙値などを含む、右欄に示したすべてのコントロールとプロパティのプロパティを抽出します。
  6. 手動でのサポートは、プラグインファイルインポートプラグインで外部ファイルを選択します。
  7. すべてのコントロールは、現在のキャンバスの構成情報はXMLファイルにエクスポートすることができます。
  8. 手動でXMLファイルに基づいてxmlファイルのオープンレイアウト制御、自動負荷制御を選択することができます。
  9. ボックスのアナログデータ、テキスト入力ボックスを、スライダーを引っ張って確認することができ、3つの方法でデータ・アプリケーションは、すべてのコントロールを生成します。
  10. コントロールは、左右の微調整をすることができ、キーボードの上下位置は、任意の解像度に適応サイズを変更引っ張っ8つの方向をサポートしています。
  11. 彼らは、3通りの方法で収集されたネットワーク、データベース・データ・セットを収集し、シリアルコレクションを開きました。
  12. コードは、非常に簡潔な、非常に詳細なメモであるプロトタイプとして構成することができ、自分自身のより多くの機能を開発します。
  13. 純粋なQtの中で書かれた、Qtはコンパイラ+任意の+任意のシステムの任意のバージョンをサポートしています。

第三に、レンダリング

第四に、コアコード

void frmMain::openFile(const QString &fileName)
{
    //打开文件
    QFile file(fileName);
    if (!file.open(QFile::ReadOnly | QFile::Text)) {
        return;
    }

    //将文件填充到dom容器
    QDomDocument doc;
    if (!doc.setContent(&file)) {
        file.close();
        return;
    }

    file.close();

    //先清空原有控件
    QList<QWidget *> widgets = ui->centralwidget->findChildren<QWidget *>();
    qDeleteAll(widgets);
    widgets.clear();

    //先判断根元素是否正确
    QDomElement docElem = doc.documentElement();
    if (docElem.tagName() == "canvas") {
        QDomNode node = docElem.firstChild();
        QDomElement element = node.toElement();
        while(!node.isNull()) {
            QString name = element.tagName();

            //存储坐标+宽高
            int x, y, width, height;
            //存储其他自定义控件属性
            QList<QPair<QString, QVariant> > propertys;

            //节点名称不为空才继续
            if (!name.isEmpty()) {
                //遍历节点的属性名称和属性值
                QDomNamedNodeMap attrs = element.attributes();
                for (int i = 0; i < attrs.count(); i++) {
                    QDomNode n = attrs.item(i);
                    QString nodeName = n.nodeName();
                    QString nodeValue = n.nodeValue();
                    //qDebug() << nodeName << nodeValue;

                    //优先取出坐标+宽高属性,这几个属性不能通过setProperty实现
                    if (nodeName == "x") {
                        x = nodeValue.toInt();
                    } else if (nodeName == "y") {
                        y = nodeValue.toInt();
                    } else if (nodeName == "width") {
                        width = nodeValue.toInt();
                    } else if (nodeName == "height") {
                        height = nodeValue.toInt();
                    } else {
                        propertys.append(qMakePair(nodeName, QVariant(nodeValue)));
                    }
                }
            }

            //qDebug() << name << x << y << width << height;

            //根据不同的控件类型实例化控件
            int count = listWidgets.count();
            for (int i = 0; i < count; i++) {
                QString className = listWidgets.at(i)->name();
                if (name == className) {
                    QWidget *widget = listWidgets.at(i)->createWidget(ui->centralwidget);

                    //逐个设置自定义控件的属性
                    int count = propertys.count();
                    for (int i = 0; i < count; i++) {
                        QPair<QString, QVariant> property = propertys.at(i);
                        widget->setProperty(property.first.toLatin1().constData(), property.second);
                    }

                    //设置坐标+宽高
                    widget->setGeometry(x, y, width, height);
                    //实例化选中窗体跟随控件一起
                    newSelect(widget);
                    break;
                }
            }

            //移动到下一个节点
            node = node.nextSibling();
            element = node.toElement();
        }
    }
}

第五に、コントロールを導入

  1. 150以上の絶妙な制御、ように太陰暦、セレクタをスライドさせ、ボタンを強調表示し、ダッシュボードのさまざま、プログレスバー、ボール、コンパス、グラフ、スケール、温度計、ナビゲーションバー、ナビゲーションバー、flatuiの進行を覆い。コントロールの統合の数よりもはるかに多くのQWT。
  2. 各クラスは、以下のプロジェクトのソースコード形式に統合個々の制御を容易にするために、ゼロが符号量を達成するために、各制御ファイルおよびヘッダファイルを結合する、別の対照として、独立して他のファイルとは無関係であることができます。QWT性の高い結合されたコントロールクラスを、連動、すべてのコードが含まれている必要があり、コントロールのいずれかを使用します。
  3. 、描画するために、任意のQtバージョンQt4.6 Qt5.12などmingwの、MSVC、GCCコンパイラのサポートをサポートするために、そのような窓+ Linuxの+マック+文字化けしません組み込みLinuxのような任意のオペレーティングシステムをサポートするすべての純粋なQtの、QWidgetの+ QPainterのを書きます直接のQt Creatorを、組み込みコントロールに統合されており、同じを使用することができ、効果のほとんどは、限り、いくつかのプロパティが設定されているように非常に便利です。
  4. 各制御に対応する制御を含有するDEMO別のソースは、便利な参照を有します。また、すべてのコントロールDEMOの統合された使用を提供します。
  5. 各コントロールのソースコードは、中国の注釈を詳細なカスタムコントロールを書くことを学ぶのは簡単、統一された設計仕様に基づいて作成されています。
  6. 各コントロールのデフォルトの色とデモに対応する色がとても美しいです。
  7. 130以上の可視制御六の不可視コントロール。
  8. 一部のコントロールは、スタイルのスタイルの選択、複数の選択肢のスタイルインジケータを数多く提供しています。
  9. すべてのコントロールは、適応伸ばしフォームを変更します。
  10. ドラッグデザインをサポートする統合デザインカスタム属性、WYSIWYGは、XML形式でインポートおよびエクスポートをサポートしています。
  11. デモに付属しているActiveXコントロールは、すべてのコントロールは、ブラウザのIEで直接実行することができます。
  12. Fontawesome統合グラフィックスフォント+グラフィックフォントの何百ものAlibabaのiconfontコレクション、フォント楽しいグラフィックがもたらします。
  13. 最終的にはすべてのコントロールと(などのdllかそこら、)ダイナミックライブラリファイルを生成するには、ドラッグでの使用のために設計されたqtcreatorに直接統合することができます。
  14. 次に、ユーザは、大きな需要がある場合は、既にQMLバージョンでは、後者は、PyQtはバージョンを検討します。
  15. 任意の制限なしカスタムオープン動的ライブラリ内のプラグイン(永久無料)、バックドア、使いやすさ。
  16. qt5.12.3 msvc2017 32 + 64 mingwの32 + 64内を含む26現在利用可能バージョンのDLL、。
  17. コントロールを向上させ、コントロールを改善するために、随時、定期的に更新SDK、すべての提案を歓迎するために、ありがとうございました!
  18. Qtの入門本は、「Qtの創造主クイックスタート」「Qt5プログラミングエントリのフオYafei」、Qtの公式の高度な書籍の提言「C ++ GUI Qt4をプログラミングをお勧めします。」
  19. 生涯の恩恵を受け、「プログラマの嘘」を強くお勧めプログラマ自己規律と計画ブックシリーズ「プログラマの成長コース」、「悲しみのプログラマ」、!
  20. SDKのダウンロードリンク:https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ抽出コード:877p

おすすめ

転載: www.cnblogs.com/feiyangqingyun/p/11516197.html