ユニバーサルモバイルQtは、カスタムを書くために61-

I.はじめに

ユニバーサルモバイルカテゴリは、目標は、後で置かれた任意のコントロールを達成することである。このシナリオでは、このような地図上のデバイスを配置するなど、非常に大きい、マウスのドラッグをサポートしている、またはコンテナに親クラスをドラッグし、ユーザードラッグを押す必要があります指定された適切な場所に移動し、その後、場所を保存することは前にやっデバイスデータベース、あなたが直接ロード、上記のプロジェクトのいくつかのセキュリティの広範な使用、発電プロジェクト、環境モニタリング、およびさまざまな種類のに対応し、時には機器を次回開いたときに座標この動きは、直接デバイスに対応したカスタム制御コードの中にカプセル化することであろう、巨大な欠点がある限り、私たちは新しいコントロールを追加した場合ということで、この機能するかどうかの独立した仕事を制御するためのコードを、繰り返す必要ライン上の入力制御は、もちろん、あなたが、例えば、私は、カスタムコントロールの多くを書いて、今の容器に入れる必要があるコントロールが自由に、ライン上のちょうど新しいユニバーサルモバイルクラスをドラッグすることができます。
プロジェクトのオープンソース住所:https://gitee.com/feiyangqingyun/QWidgetDemo

第二に、機能の実現

  • 1:あなたは、ウィジェットを移動する必要性を指定することができます
  • 2:あなたは、マウスの左ボタンのドラッグを定義するかどうかを設定することができます
  • 3:任意のウィジェットコントロールをサポート

第三に、レンダリング

ここに画像を挿入説明

第四に、ヘッダファイルのコード

#ifndef MOVEWIDGET_H
#define MOVEWIDGET_H

/**
 * 通用控件移动类 作者:feiyangqingyun(QQ:517216493) 2019-9-28
 * 1:可以指定需要移动的widget
 * 2:可设置是否限定鼠标左键拖动
 * 3:支持任意widget控件
 */

#include <QWidget>

#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif

class QDESIGNER_WIDGET_EXPORT MoveWidget : public QObject
#else
class MoveWidget : public QObject
#endif

{
    Q_OBJECT
public:
    explicit MoveWidget(QObject *parent = 0);

protected:
    bool eventFilter(QObject *watched, QEvent *event);

private:
    QPoint lastPoint;   //最后按下的坐标
    bool pressed;       //鼠标是否按下
    bool leftButton;    //限定鼠标左键
    QWidget *widget;    //移动的控件

public Q_SLOTS:
    //设置是否限定鼠标左键
    void setLeftButton(bool leftButton);
    //设置要移动的控件
    void setWidget(QWidget *widget);
};

#endif // MOVEWIDGET_H

第五に、コアコード

#include "movewidget.h"
#include "qevent.h"
#include "qdebug.h"

MoveWidget::MoveWidget(QObject *parent) : QObject(parent)
{
    lastPoint = QPoint(0, 0);
    pressed = false;
    leftButton = true;
    widget = 0;
}

bool MoveWidget::eventFilter(QObject *watched, QEvent *event)
{
    if (widget != 0 && watched == widget) {
        QMouseEvent *mouseEvent = (QMouseEvent *)event;
        if (mouseEvent->type() == QEvent::MouseButtonPress) {
            //如果限定了只能鼠标左键拖动则判断当前是否是鼠标左键
            if (leftButton && mouseEvent->button() != Qt::LeftButton) {
                return false;
            }

            //判断控件的区域是否包含了当前鼠标的坐标
            if (widget->rect().contains(mouseEvent->pos())) {
                lastPoint = mouseEvent->pos();
                pressed = true;
            }
        } else if (mouseEvent->type() == QEvent::MouseMove && pressed) {
            //计算坐标偏移值,调用move函数移动过去
            int offsetX = mouseEvent->pos().x() - lastPoint.x();
            int offsetY = mouseEvent->pos().y() - lastPoint.y();
            widget->move(widget->x() + offsetX, widget->y() + offsetY);
        } else if (mouseEvent->type() == QEvent::MouseButtonRelease && pressed) {
            pressed = false;
        }
    }

    return QObject::eventFilter(watched, event);
}

void MoveWidget::setWidget(QWidget *widget)
{
    if (this->widget == 0) {
        this->widget = widget;
        this->widget->installEventFilter(this);
    }
}

void MoveWidget::setLeftButton(bool leftButton)
{
    this->leftButton = leftButton;
}

第六に、コントロールが説明します

  1. 150以上の絶妙な制御、ように太陰暦、セレクタをスライドさせ、ボタンを強調表示し、ダッシュボードのさまざま、プログレスバー、ボール、コンパス、グラフ、スケール、温度計、ナビゲーションバー、ナビゲーションバー、flatuiの進行を覆い。コントロールの統合の数よりもはるかに多くのQWT。
  2. 各クラスは、以下のプロジェクトのソースコード形式に統合個々の制御を容易にするために、ゼロが符号量を達成するために、各制御ファイルおよびヘッダファイルを結合する、別の対照として、独立して他のファイルとは無関係であることができます。QWT性の高い結合されたコントロールクラスを、連動、すべてのコードが含まれている必要があり、コントロールのいずれかを使用します。
  3. 、描画するために、任意のQtバージョンQt4.6 Qt5.13など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://gitee.com/feiyangqingyun/QUCSDK

おすすめ

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