国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

流程圖拖拽視覺編程-流程編輯器

這篇具有很好參考價值的文章主要介紹了流程圖拖拽視覺編程-流程編輯器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、簡介

二、流程編輯器-視圖實現(xiàn)

三、參考資料


一、簡介

前期文章:

流程圖拖拽視覺編程--概述_Jason~shen的博客-CSDN博客

本期內(nèi)容:

本期將介紹流程編輯器模塊的實現(xiàn)方法,效果圖如下所示。該模塊基于QT Graphics/View實現(xiàn),由視圖、自定義圖元、圖元管理器組成。

流程圖拖拽視覺編程-流程編輯器

二、流程編輯器-視圖實現(xiàn)

視圖的功能是提供一個節(jié)點顯示窗口,支持縮放、平移和網(wǎng)格線背景。

該部分繼承QGraphicsView實現(xiàn),定義接口如下:

class GRAPHICSLIBSHARED_EXPORT BaseGraphicsView: public QGraphicsView
{
    Q_OBJECT
public:
    explicit BaseGraphicsView(QWidget *parent = nullptr);
    ~BaseGraphicsView();
    void setFactorMax(double val);     //最大縮放因子
    void setFactorMin(double val);     //最小縮放因子
    void setShowGrid(bool b);          //是否顯示網(wǎng)格線
    void setMoveSceneEnabled(bool b);  //是否平移使能

public slots:
    void zoomIn();
    void zoomOut();

protected:
    void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
    void drawBackground(QPainter *painter, const QRectF &rect) Q_DECL_OVERRIDE;
    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

private:
    void drawGrid(QPainter *painter, double gridStep);

private:
    double m_factorMax;
    double m_factorMin;
    QPointF m_scenePos;
    QPointF m_pressPos;
    bool m_moveScene;
    bool m_showGrid;
    bool m_moveSceneEnabled;
};

縮放的實現(xiàn):核心函數(shù)scale(), 配合鼠標事件操作,重寫鼠標滾動事件函數(shù)wheelEvent,限制視圖過大或者過小。

void BaseGraphicsView::zoomIn()
{
    setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    scale(1.2, 1.2);
}

void BaseGraphicsView::zoomOut()
{
    setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    scale(1 / 1.2, 1 / 1.2);
}

void BaseGraphicsView::wheelEvent(QWheelEvent *event)
{
    qreal factor_out = transform().scale(1.2, 1.2).mapRect(QRectF(0, 0, 1, 1)).width();
    qreal factor_in = transform().scale(1 / 1.2, 1 / 1.2).mapRect(QRectF(0, 0, 1, 1)).width();

    if (event->delta() > 0)
    {
        if(factor_out > m_factorMax)
        {
            return;    /* 防止視圖過大 */
        }
        zoomIn();
    }
    else
    {
        if(factor_in < m_factorMin)
        {
            return;    /* 防止視圖過小 */
        }
        zoomOut();
    }
    update();
}

平移的實現(xiàn):?核心函數(shù)setSceneRect(),配合鼠標事件操作,重寫鼠標按下mousePressEvent、移動mouseMoveEvent、釋放mouseReleaseEvent事件函數(shù)。

void BaseGraphicsView::mousePressEvent(QMouseEvent *event)
{
    if(m_moveSceneEnabled)
    {
        QMouseEvent fake(event->type(), event->pos(), Qt::LeftButton, Qt::LeftButton, event->modifiers());
        m_scenePos = mapToScene(event->pos());
        m_pressPos = m_scenePos;

        setDragMode(QGraphicsView::NoDrag);

        if (QApplication::keyboardModifiers() == Qt::ControlModifier &&
                event->button() == Qt::LeftButton)
        {
            setDragMode(QGraphicsView::RubberBandDrag);
        }

        if (event->button() == Qt::MiddleButton)
        {
            setDragMode(QGraphicsView::ScrollHandDrag);
            setInteractive(false);

            event = &fake;

            m_moveScene = true;
        }
        update();
    }
    QGraphicsView::mousePressEvent(event);
}

void BaseGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
    if(m_moveSceneEnabled)
    {
        m_scenePos = mapToScene(event->pos());
        if (m_moveScene)
        {
            QPointF difference = m_pressPos - m_scenePos;
            setSceneRect(sceneRect().translated(difference.x(), difference.y()));
        }
        update();
    }
    QGraphicsView::mouseMoveEvent(event);
}

void BaseGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
    if(m_moveSceneEnabled)
    {
        QMouseEvent fake(event->type(), event->pos(), Qt::LeftButton, Qt::LeftButton, event->modifiers());
        if (event->button() == Qt::MiddleButton)
        {
            setDragMode(QGraphicsView::NoDrag);
            setInteractive(true);

            event = &fake;
        }

        m_moveScene = false;
        update();
    }
    QGraphicsView::mouseReleaseEvent(event);
}

網(wǎng)格線背景,通過繪圖類QPainter畫線,重寫繪制背景函數(shù)drawBackground

void BaseGraphicsView::drawBackground(QPainter *painter, const QRectF &rect)
{
    QGraphicsView::drawBackground(painter, rect);
    if(m_showGrid)
    {
        QPen pfine(QColor::fromRgb(50, 50, 50), 0.6);

        painter->setPen(pfine);
        drawGrid(painter, 15);

        QPen p(QColor::fromRgb(50, 50, 50), 2.0);

        painter->setPen(p);
        drawGrid(painter, 150);
    }
}

void BaseGraphicsView::drawGrid(QPainter *painter, double gridStep)
{
    QRect   windowRect = rect();
    QPointF tl = mapToScene(windowRect.topLeft());
    QPointF br = mapToScene(windowRect.bottomRight());

    double left   = qFloor(tl.x() / gridStep - 0.5);
    double right  = qFloor(br.x() / gridStep + 1.0);
    double bottom = qFloor(tl.y() / gridStep - 0.5);
    double top    = qFloor(br.y() / gridStep + 1.0);

    for (int xi = int(left); xi <= int(right); ++xi)
    {
        QLineF line(xi * gridStep, bottom * gridStep,
                    xi * gridStep, top * gridStep );

        painter->drawLine(line);
    }

    for (int yi = int(bottom); yi <= int(top); ++yi)
    {
        QLineF line(left * gridStep, yi * gridStep,
                    right * gridStep, yi * gridStep );
        painter->drawLine(line);
    }
}

三、參考資料

文章

GitHub開源推薦 | 節(jié)點編輯器-技術圈

python版本

Pavel K?upala / pyqt-node-editor · GitLab

https://blog.csdn.net/mahuatengmmp/category_9948511.html

Release v0.3.1 · beyse/NodeEditor · GitHub

qt4/qt5版本

GitHub - Buanderie/qnodeseditor: Originally from http://algoholic.eu/qnodeseditor-qt-nodesports-based-data-processing-flow-editor/

GitHub - hzt1234hf/FlowChartTools: 使用QT開發(fā)的跨平臺(Windows、Linux)流程圖繪制工具文章來源地址http://www.zghlxwxcb.cn/news/detail-447157.html

到了這里,關于流程圖拖拽視覺編程-流程編輯器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Svg Flow Editor 原生svg流程圖編輯器(五)

    Svg Flow Editor 原生svg流程圖編輯器(五)

    Svg Flow Editor 原生svg流程圖編輯器(一) Svg Flow Editor 原生svg流程圖編輯器(二) Svg Flow Editor 原生svg流程圖編輯器(三) Svg Flow Editor 原生svg流程圖編輯器(四) Svg Flow Editor 原生svg流程圖編輯器(五) ? ? ? ? 對協(xié)同這塊已經(jīng)寫了很多篇文章了,如果還是不了解,可以看看之

    2024年04月12日
    瀏覽(25)
  • vue + gojs  實現(xiàn)拖拽流程圖(實戰(zhàn)項目)

    vue + gojs 實現(xiàn)拖拽流程圖(實戰(zhàn)項目)

    最近一段時間在研究go.js,它是一款前端開發(fā)畫流程圖的一個插件,也是一個難點,要說為什么是難點,首先,它是依賴畫布canvas知識開發(fā)。其次,要依賴于內(nèi)部API開發(fā)需求,開發(fā)項目實戰(zhàn)需求的時候就要花費大量的時間去熟悉go.js的API,然后才能進行開發(fā)。話不多說,我就先

    2023年04月24日
    瀏覽(45)
  • 非常詳細HDFS讀寫流程+完美視覺的HDFS讀寫流程圖

    非常詳細HDFS讀寫流程+完美視覺的HDFS讀寫流程圖

    一、寫數(shù)據(jù)流程: 客戶端(Client通過java虛擬機)向NameNode請求上傳文件(內(nèi)部過程:客戶端通過對 DistributedFileSystem 對象調(diào)用create()函數(shù)來創(chuàng)建文件),參數(shù):路徑/a.txt,塊規(guī)格,副本數(shù)。 NameNode檢查目標文件是否已存在,父目錄是否存在。做出響應返回是否可以上傳。 過程

    2024年02月04日
    瀏覽(20)
  • 詳解《基于 javascript 的流程圖編輯框架LogicFlow》

    詳解《基于 javascript 的流程圖編輯框架LogicFlow》

    1、LogicFlow 是什么 LogicFlow 是一款流程圖編輯框架,提供了一系列流程圖交互、編輯所必需的功能和靈活的節(jié)點自定義、插件等拓展機制。LogicFlow 支持前端研發(fā)自定義開發(fā)各種邏輯編排場景,如流程圖、ER 圖、BPMN 流程等。在工作審批配置、機器人邏輯編排、無代碼平臺流程配

    2024年02月05日
    瀏覽(21)
  • 強大易于編輯的流程圖組織圖繪制工具draw.io Mac蘋果中文版

    強大易于編輯的流程圖組織圖繪制工具draw.io Mac蘋果中文版

    draw.io可以繪制多種類型的圖表,包括但不限于流程圖、組織結構圖、網(wǎng)絡圖、UML圖、電氣工程圖等。draw.io提供了豐富的圖形元素和編輯功能,使用戶能夠輕松地創(chuàng)建和編輯各種復雜的圖表。同時,該軟件還支持多種導出格式,方便用戶在不同平臺和設備上共享和展示他們的

    2024年02月07日
    瀏覽(26)
  • MODBUS-TCP協(xié)議簡介與編程流程圖

    MODBUS-TCP協(xié)議簡介與編程流程圖

    ??本文主要目的是為了寫一個簡單的MODBUS-TCP服務器-客戶端程序而記錄的知識點,里面包含了編程所需要的必要背景知識和協(xié)議解析流程圖。 ??MODBUS有四種基本數(shù)據(jù)類型: ?? 離散量輸入 :客戶端只能讀取它,由服務器提供,占1個比特位,可以傳輸現(xiàn)實中的開關量輸入

    2023年04月08日
    瀏覽(67)
  • 流程圖實現(xiàn),基于vue2實現(xiàn)的流程圖

    流程圖實現(xiàn),基于vue2實現(xiàn)的流程圖

    flex布局 + 偽元素實現(xiàn)豎直的連接線+組件遞歸 2.1基礎的(未截全,大致長這樣) ?2.2帶有收縮功能的,可以展開和收縮并顯示數(shù)量 ? ? 4.項目源碼地址 GitHub - yft-code/flow: 流程圖 純css實現(xiàn)流程圖

    2024年02月16日
    瀏覽(27)
  • 流程圖如何制作?5步快速畫出好看的流程圖!

    流程圖如何制作?5步快速畫出好看的流程圖!

    流程圖是一種圖形化工具,描述某個過程或者操作的步驟,以及某種業(yè)務系統(tǒng)的具體流程。流程圖通常由各種圖形符號、形狀、箭頭組成,可以清晰的表示出流程或系統(tǒng)中各種步驟、每個環(huán)節(jié)之間的關系、條件判斷、數(shù)據(jù)的流動和處理過程等。 ? ? ? ? ? 對于負責策劃的職場

    2024年02月14日
    瀏覽(19)
  • Qt (高仿Visio)流程圖組件開發(fā)(七) 流程圖 簡單操作界面搭建

    Qt (高仿Visio)流程圖組件開發(fā)(七) 流程圖 簡單操作界面搭建

    Qt (高仿Visio)流程圖組件開發(fā)(一) 效果展示及基本開發(fā)框架構思 Qt (高仿Visio)流程圖組件開發(fā)(二) 基本圖元繪制 圖元間連線繪制 Qt (高仿Visio)流程圖組件開發(fā)(三) 圖元基類如何定義,流程圖多種圖元類型實現(xiàn) Qt (高仿Visio)流程圖組件開發(fā)(四) 流程圖 圖元

    2023年04月25日
    瀏覽(26)
  • Python 代碼一鍵轉(zhuǎn)流程圖---python=>flowchart-dsl=>流程圖

    Python 代碼一鍵轉(zhuǎn)流程圖---python=>flowchart-dsl=>流程圖

    這個項目是基于大名鼎鼎的 flowchart.js。 下面貼幾張運行圖片: ?如果直接輸入dsl代碼,再進行轉(zhuǎn)化就可以很好的畫出流程圖 ? ? ? 如果你使用 Typora,可能知道在 Typora 中用?flow?可以用一種簡單的文本語言來寫流程圖,根據(jù)?Typora 的文檔,這個功能來自開源的?flowchart.js。

    2024年02月08日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包