国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

h5用什么網(wǎng)站來做推廣怎么推

h5用什么網(wǎng)站來做,推廣怎么推,做靜態(tài)頁面的網(wǎng)站,上海市政建設(shè)有限公司網(wǎng)站Qt拖拽事件詳解及代碼實現(xiàn) 前言項目描述代碼結(jié)構(gòu)簡介代碼詳解 前言 qt拖拽事件是一項非常常用并且非常好用的功能,拖拽實際上是一種信息傳遞的載體,其目的是將信息從一個對象傳遞給另一個對象。通過拖拽可以簡化文件打開或業(yè)務(wù)操作流程,qt初…

Qt拖拽事件詳解及代碼實現(xiàn)

  • 前言
  • 項目描述
  • 代碼結(jié)構(gòu)簡介
  • 代碼詳解

前言

qt拖拽事件是一項非常常用并且非常好用的功能,拖拽實際上是一種信息傳遞的載體,其目的是將信息從一個對象傳遞給另一個對象。通過拖拽可以簡化文件打開或業(yè)務(wù)操作流程,qt初學(xué)者學(xué)會拖拽事件后就可以馬上開發(fā)出許多有趣的項目,本文以一個簡單的示例來介紹拖拽事件功能。

項目描述

本項目通過搭建兩個對話框,一個作為拖拽信息來源,另一個作為拖拽信息目標,介紹拖拽事件,主要實現(xiàn)了字符串信息的傳遞,并且對拖拽過程的動作進行了探索。

代碼結(jié)構(gòu)簡介

DragDropWidget類實現(xiàn)了拖拽發(fā)起對話框,主要是重寫了鼠標事件函數(shù),用于設(shè)置拖拽搭載的信息,這里就是一個字符串,實際上也可以是自定義的類或者其他對象。代碼詳見dragdropwidget.h及dragdropwidget.cpp。
AcceptWidget類實現(xiàn)了拖拽接收對話框,主要重寫了拖拽進入及拖拽放置函數(shù),用于處理拖拽進入的信息。代碼詳見acceptwidget.h及acceptwidget.cpp。

代碼詳解

dragdropwidget.h

#ifndef DRAGDROPWIDGET_H
#define DRAGDROPWIDGET_H#include <QWidget>class DragDropWidget : public QWidget
{Q_OBJECTpublic:DragDropWidget(QWidget *parent = 0);~DragDropWidget();protected:void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;
private:QPoint m_DragStartPos;
};#endif // DRAGDROPWIDGET_H

在DragDropWidget 類的頭文件中聲明了經(jīng)典鼠標處理三事件,并聲明了一個成員變量m_DragStartPos,用于記錄拖拽的起始位置。
dragdropwidget.cpp

#include "dragdropwidget.h"#include <QStyle>
#include <QStyleOption>
#include <QIcon>
#include <QDrag>
#include <QMimeData>
#include <QMouseEvent>
#include <QApplication>#include <QLabel>
#include <QDebug>DragDropWidget::DragDropWidget(QWidget *parent): QWidget(parent)
{m_DragStartPos=QPoint(-1,-1);setWindowTitle("dragwidget");
}DragDropWidget::~DragDropWidget()
{}void DragDropWidget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){m_DragStartPos=event->pos();printf("====mousepressed\n");}
}void DragDropWidget::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton){if(QLineF(event->pos(),m_DragStartPos).length()<QApplication::startDragDistance()){printf("distence less\n");return;}printf("===process drag\n");QDrag *drag=new QDrag(this);QMimeData *mimedata=new QMimeData;mimedata->setData("localtype","teststr");drag->setMimeData(mimedata);QStyle *style = QApplication::style();QStyleOption option;QIcon icon = style->standardIcon(QStyle::SP_DialogOpenButton, &option, nullptr);QPixmap pixmap = icon.pixmap(32, 32);drag->setPixmap(pixmap);drag->setHotSpot(QPoint(10,10));Qt::DropAction dropaction=drag->exec(Qt::CopyAction); //| Qt::MoveAction}
}void DragDropWidget::mouseReleaseEvent(QMouseEvent *event)
{QWidget::mouseReleaseEvent(event);
}

在構(gòu)造函數(shù)中,對拖拽起始位置進行了初始化,并設(shè)置了窗口名稱;在mousePressEvent函數(shù)中,判斷了是否為左鍵點擊,并更新了拖拽起始位置;在mouseMoveEvent函數(shù)中,首先判斷拖拽事件中左鍵是否在移動中保持了點擊狀態(tài),

if (event->buttons() & Qt::LeftButton)

event->buttons()獲取在移動過程中的所有保持點擊狀態(tài)的按鈕,和Qt::LeftButton做&運算,用于判斷左鍵是否在這些按鈕中,據(jù)此判斷左鍵是否在移動中保持點擊狀態(tài);

if(QLineF(event->pos(),m_DragStartPos).length()<QApplication::startDragDistance())

通過判斷當(dāng)前鼠標所在位置與起始拖拽點之間的距離是否超過一定范圍來判斷拖拽是否有效,QApplication::startDragDistance()為10px;

        QDrag *drag=new QDrag(this);QMimeData *mimedata=new QMimeData;

首先構(gòu)造了QDrag及QMimeData對象;

        mimedata->setData("localtype","teststr");

然后對QMimeData對象設(shè)置了數(shù)據(jù),這里setData有兩個參數(shù),這里用的是通用的數(shù)據(jù)設(shè)置綁定方法,第一個參數(shù)“l(fā)ocaltype”為設(shè)置的數(shù)據(jù)類型,這里可以自定義一個字符串作為類型,第二個參數(shù)即為傳遞的數(shù)據(jù),第二個參數(shù)的類型為QByteArray,也就是說,傳進來的內(nèi)容將會被轉(zhuǎn)為QByteArray類型,后續(xù)在解析時可以將QByteArray還原為傳入的類型。

drag->setMimeData(mimedata);

這里將QMimeData對象綁定到QDrag對象,借助QDrag對象實現(xiàn)數(shù)據(jù)的傳遞;

        QStyle *style = QApplication::style();QStyleOption option;QIcon icon = style->standardIcon(QStyle::SP_DialogOpenButton, &option, nullptr);QPixmap pixmap = icon.pixmap(32, 32);drag->setPixmap(pixmap);drag->setHotSpot(QPoint(10,10));

這里實際上是對QDrag對象設(shè)置一個圖標,用于在拖拽過程中顯示,這里使用了qt內(nèi)置的標準圖標,setHotSpot函數(shù)用于指定拖拽點位于圖標的位置;

Qt::DropAction dropaction=drag->exec(Qt::CopyAction); 

最后執(zhí)行了QDrag對象的exec函數(shù),這里可以指定拖拽動作類型,不同的類型會影響后面在接收拖拽時的顯示,例如Qt::CopyAction在接收拖拽時則會在之前設(shè)置的圖標右下角顯示一個“+”號;
acceptwidget.h

#ifndef ACCEPTWIDGET_H
#define ACCEPTWIDGET_H#include <QWidget>class QDragEnterEvent;
class QDropEvent;class AcceptWidget : public QWidget
{Q_OBJECT
public:explicit AcceptWidget(QWidget *parent = nullptr);
protected:void dragEnterEvent(QDragEnterEvent *event) override;void dropEvent(QDropEvent *event) override;signals:public slots:
};#endif // ACCEPTWIDGET_H

AcceptWidget 類的頭文件中聲明了處理接收拖拽事件的dragEnterEvent及dropEvent函數(shù),這兩個函數(shù)是處理接收拖拽事件最基本的兩個函數(shù),dragEnterEvent用于處理進入本窗口時需要做出的操作,例如判斷拖拽進入的內(nèi)容是否需要接受等,dropEvent函數(shù)用于處理確認接收拖拽事件的操作,主要是獲取QMimeData;
acceptwidget.cpp

#include "acceptwidget.h"#include <QStyle>
#include <QStyleOption>
#include <QIcon>
#include <QLabel>
#include <QMimeData>
#include <QDropEvent>
#include <QDragEnterEvent>
#include <QApplication>AcceptWidget::AcceptWidget(QWidget *parent) : QWidget(parent)
{setWindowTitle("Drop Widget");this->setAcceptDrops(true);
}void AcceptWidget::dragEnterEvent(QDragEnterEvent *event)
{event->acceptProposedAction();printf("drag enter\n");
}void AcceptWidget::dropEvent(QDropEvent *event)
{printf("grop enter\n");const QMimeData *mimedata= event->mimeData();if(mimedata->hasFormat("localtype")){QByteArray mimestr=mimedata->data("localtype");std::string sstr=mimestr.toStdString();printf("=====sstring==%s\n",sstr.c_str());QLabel *label=new QLabel(this);QStyle *style = QApplication::style();QStyleOption option;QIcon icon = style->standardIcon(QStyle::SP_DialogOpenButton, &option, nullptr);QPixmap pixmap = icon.pixmap(32, 32);label->setPixmap(pixmap);label->move(event->pos());label->show();}
}

AcceptWidget 類的源文件主要代碼在dropEvent函數(shù)中,當(dāng)然首先需要在構(gòu)造函數(shù)中開啟接收拖拽事件的標識通過setAcceptDrops(true),來標識本窗口接收拖拽事件;

event->acceptProposedAction();

在dragEnterEvent函數(shù)中確認接受拖拽事件的動作,這樣拖拽事件才能進入dropEvent函數(shù);

   const QMimeData *mimedata= event->mimeData();

在dropEvent函數(shù)中直接通過QDropEvent 即可獲取拖拽事件傳遞來的QMimeData 對象;

    if(mimedata->hasFormat("localtype"))

首先對傳遞來的QMimeData 對象進行類型判斷,使用hasFormat函數(shù),這里的類型參數(shù)即為拖拽事件產(chǎn)生窗口中設(shè)置的參數(shù);

        QByteArray mimestr=mimedata->data("localtype");std::string sstr=mimestr.toStdString();

首先根據(jù)類型從QMimeData 對象中獲取QByteArray 格式的數(shù)據(jù),然后通過轉(zhuǎn)換,恢復(fù)為原始類型,這里傳遞的是字符串類型,最終恢復(fù)為字符串類型;

        QLabel *label=new QLabel(this);QStyle *style = QApplication::style();QStyleOption option;QIcon icon = style->standardIcon(QStyle::SP_DialogOpenButton, &option, nullptr);QPixmap pixmap = icon.pixmap(32, 32);label->setPixmap(pixmap);label->move(event->pos());label->show();

后面為了拖拽事件更有趣味,在窗口中用Qlabel顯示了許多圖標。
main.cpp

#include <QApplication>#include "dragdropwidget.h"
#include "acceptwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);DragDropWidget w;w.show();AcceptWidget aw;aw.move(800,0);aw.show();return a.exec();
}

demo.pro


QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = DragDropDemo
TEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSSOURCES += \main.cpp \dragdropwidget.cpp \acceptwidget.cppHEADERS += \dragdropwidget.h \acceptwidget.hMOC_DIR = ./moc
OBJECTS_DIR = ./moc
http://aloenet.com.cn/news/46358.html

相關(guān)文章:

  • 泛解析對網(wǎng)站的影響廈門網(wǎng)站推廣優(yōu)化哪家好
  • 寧波易通寧波網(wǎng)站建設(shè)優(yōu)化落實新十條措施
  • 專門教做甜品的網(wǎng)站微信營銷軟件手機版
  • 建設(shè)網(wǎng)站如何贏利企業(yè)網(wǎng)站cms
  • 廣州 網(wǎng)站開發(fā) 公司電話百度seo優(yōu)化排名
  • dw企業(yè)網(wǎng)站設(shè)計品牌營銷包括哪些內(nèi)容
  • 網(wǎng)站加載效果怎么做的百度推廣代運營
  • wordpress mysql重啟資源網(wǎng)站優(yōu)化排名軟件公司
  • 成華網(wǎng)站制作為什么中國禁止谷歌瀏覽器
  • 標題優(yōu)化方法郴州seo快速排名
  • 今日濮陽重大新聞seo優(yōu)化服務(wù)是什么意思
  • asp.net做的網(wǎng)站要放到網(wǎng)上空間去_要放哪些文件上去網(wǎng)站建網(wǎng)站建設(shè)網(wǎng)站
  • 房山新農(nóng)村建設(shè)網(wǎng)站深圳百度seo公司
  • 免費代理ip的網(wǎng)站百度搜索推廣操作簡要流程
  • 如何進行網(wǎng)站運營與規(guī)劃打開百度網(wǎng)頁
  • 國外做批發(fā)配件的 在哪個網(wǎng)站百度葷seo公司
  • 傳奇網(wǎng)站怎么制作教程查關(guān)鍵詞
  • windows做網(wǎng)站服務(wù)器杭州推廣公司
  • 什么是網(wǎng)站功能需求推推蛙品牌策劃
  • 有服務(wù)器可以做網(wǎng)站嗎站長工具是什么意思
  • 商業(yè)網(wǎng)站建立搜索引擎優(yōu)化seo應(yīng)用
  • 中國三農(nóng)建設(shè)工作委員會官方網(wǎng)站深圳網(wǎng)絡(luò)推廣最新招聘
  • 云服務(wù)器可以做網(wǎng)站嗎網(wǎng)絡(luò)營銷的一般流程
  • 知名企業(yè)網(wǎng)站建設(shè)哈爾濱網(wǎng)站制作軟件
  • 做鋼材的網(wǎng)站有哪些網(wǎng)站的網(wǎng)站建設(shè)
  • 個人網(wǎng)站畢業(yè)設(shè)計搜索關(guān)鍵詞然后排名怎樣提升
  • 國外兒童社區(qū)網(wǎng)站模板外鏈信息
  • 做微網(wǎng)站迅宇科技網(wǎng)店推廣是什么
  • 做網(wǎng)站的不給做robots文件百度推廣登錄后臺
  • 在百度上做網(wǎng)站多少錢百度收錄提交