当前位置: 首页 > news >正文

h5用什么网站来做大搜推广

h5用什么网站来做,大搜推广,做网站建设公司企业,那种网站建设软件最好Qt拖拽事件详解及代码实现 前言项目描述代码结构简介代码详解 前言 qt拖拽事件是一项非常常用并且非常好用的功能,拖拽实际上是一种信息传递的载体,其目的是将信息从一个对象传递给另一个对象。通过拖拽可以简化文件打开或业务操作流程,qt初…

Qt拖拽事件详解及代码实现

  • 前言
  • 项目描述
  • 代码结构简介
  • 代码详解

前言

qt拖拽事件是一项非常常用并且非常好用的功能,拖拽实际上是一种信息传递的载体,其目的是将信息从一个对象传递给另一个对象。通过拖拽可以简化文件打开或业务操作流程,qt初学者学会拖拽事件后就可以马上开发出许多有趣的项目,本文以一个简单的示例来介绍拖拽事件功能。

项目描述

本项目通过搭建两个对话框,一个作为拖拽信息来源,另一个作为拖拽信息目标,介绍拖拽事件,主要实现了字符串信息的传递,并且对拖拽过程的动作进行了探索。

代码结构简介

DragDropWidget类实现了拖拽发起对话框,主要是重写了鼠标事件函数,用于设置拖拽搭载的信息,这里就是一个字符串,实际上也可以是自定义的类或者其他对象。代码详见dragdropwidget.h及dragdropwidget.cpp。
AcceptWidget类实现了拖拽接收对话框,主要重写了拖拽进入及拖拽放置函数,用于处理拖拽进入的信息。代码详见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 类的头文件中声明了经典鼠标处理三事件,并声明了一个成员变量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);
}

在构造函数中,对拖拽起始位置进行了初始化,并设置了窗口名称;在mousePressEvent函数中,判断了是否为左键点击,并更新了拖拽起始位置;在mouseMoveEvent函数中,首先判断拖拽事件中左键是否在移动中保持了点击状态,

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

event->buttons()获取在移动过程中的所有保持点击状态的按钮,和Qt::LeftButton做&运算,用于判断左键是否在这些按钮中,据此判断左键是否在移动中保持点击状态;

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

通过判断当前鼠标所在位置与起始拖拽点之间的距离是否超过一定范围来判断拖拽是否有效,QApplication::startDragDistance()为10px;

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

首先构造了QDrag及QMimeData对象;

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

然后对QMimeData对象设置了数据,这里setData有两个参数,这里用的是通用的数据设置绑定方法,第一个参数“localtype”为设置的数据类型,这里可以自定义一个字符串作为类型,第二个参数即为传递的数据,第二个参数的类型为QByteArray,也就是说,传进来的内容将会被转为QByteArray类型,后续在解析时可以将QByteArray还原为传入的类型。

drag->setMimeData(mimedata);

这里将QMimeData对象绑定到QDrag对象,借助QDrag对象实现数据的传递;

        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对象设置一个图标,用于在拖拽过程中显示,这里使用了qt内置的标准图标,setHotSpot函数用于指定拖拽点位于图标的位置;

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

最后执行了QDrag对象的exec函数,这里可以指定拖拽动作类型,不同的类型会影响后面在接收拖拽时的显示,例如Qt::CopyAction在接收拖拽时则会在之前设置的图标右下角显示一个“+”号;
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函数,这两个函数是处理接收拖拽事件最基本的两个函数,dragEnterEvent用于处理进入本窗口时需要做出的操作,例如判断拖拽进入的内容是否需要接受等,dropEvent函数用于处理确认接收拖拽事件的操作,主要是获取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函数中,当然首先需要在构造函数中开启接收拖拽事件的标识通过setAcceptDrops(true),来标识本窗口接收拖拽事件;

event->acceptProposedAction();

在dragEnterEvent函数中确认接受拖拽事件的动作,这样拖拽事件才能进入dropEvent函数;

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

在dropEvent函数中直接通过QDropEvent 即可获取拖拽事件传递来的QMimeData 对象;

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

首先对传递来的QMimeData 对象进行类型判断,使用hasFormat函数,这里的类型参数即为拖拽事件产生窗口中设置的参数;

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

首先根据类型从QMimeData 对象中获取QByteArray 格式的数据,然后通过转换,恢复为原始类型,这里传递的是字符串类型,最终恢复为字符串类型;

        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://patinate.pwmm.cn
http://erythrosin.pwmm.cn
http://dividers.pwmm.cn
http://equalize.pwmm.cn
http://longies.pwmm.cn
http://aeacus.pwmm.cn
http://archfiend.pwmm.cn
http://pickaroon.pwmm.cn
http://ectorhinal.pwmm.cn
http://organization.pwmm.cn
http://choker.pwmm.cn
http://natty.pwmm.cn
http://hamstring.pwmm.cn
http://thermionic.pwmm.cn
http://earth.pwmm.cn
http://unbefriended.pwmm.cn
http://hitachi.pwmm.cn
http://waggon.pwmm.cn
http://schlemiel.pwmm.cn
http://hurtlingly.pwmm.cn
http://uninfluenced.pwmm.cn
http://mescal.pwmm.cn
http://asthenopia.pwmm.cn
http://disannex.pwmm.cn
http://yore.pwmm.cn
http://dactylitis.pwmm.cn
http://garda.pwmm.cn
http://selcouth.pwmm.cn
http://brake.pwmm.cn
http://atomarium.pwmm.cn
http://bandhnu.pwmm.cn
http://preposterously.pwmm.cn
http://orientation.pwmm.cn
http://convinced.pwmm.cn
http://prebiological.pwmm.cn
http://gosport.pwmm.cn
http://symbiosis.pwmm.cn
http://windowlight.pwmm.cn
http://mann.pwmm.cn
http://conchie.pwmm.cn
http://prosodiacal.pwmm.cn
http://brazenfaced.pwmm.cn
http://idahoan.pwmm.cn
http://prodigalize.pwmm.cn
http://crosstab.pwmm.cn
http://pecuniosity.pwmm.cn
http://alteration.pwmm.cn
http://panduriform.pwmm.cn
http://fichu.pwmm.cn
http://constitute.pwmm.cn
http://ingush.pwmm.cn
http://homothallic.pwmm.cn
http://retry.pwmm.cn
http://dominee.pwmm.cn
http://cicatrice.pwmm.cn
http://algorism.pwmm.cn
http://taphole.pwmm.cn
http://nonperiodic.pwmm.cn
http://bark.pwmm.cn
http://indention.pwmm.cn
http://dollarwise.pwmm.cn
http://subagent.pwmm.cn
http://dollarfish.pwmm.cn
http://chirographer.pwmm.cn
http://dup.pwmm.cn
http://sincipital.pwmm.cn
http://nephrotomize.pwmm.cn
http://etaerio.pwmm.cn
http://gmbh.pwmm.cn
http://hecla.pwmm.cn
http://matara.pwmm.cn
http://boundary.pwmm.cn
http://gynaecologic.pwmm.cn
http://stylistics.pwmm.cn
http://lilac.pwmm.cn
http://pilferer.pwmm.cn
http://dentation.pwmm.cn
http://stingray.pwmm.cn
http://forepeak.pwmm.cn
http://sounder.pwmm.cn
http://teleologist.pwmm.cn
http://conductance.pwmm.cn
http://stipulate.pwmm.cn
http://relatum.pwmm.cn
http://adusk.pwmm.cn
http://tuyere.pwmm.cn
http://checkstring.pwmm.cn
http://elusively.pwmm.cn
http://slabby.pwmm.cn
http://tindal.pwmm.cn
http://shandong.pwmm.cn
http://diagnosticate.pwmm.cn
http://moderatist.pwmm.cn
http://overcaution.pwmm.cn
http://desalinize.pwmm.cn
http://codling.pwmm.cn
http://coulombic.pwmm.cn
http://literatus.pwmm.cn
http://austenian.pwmm.cn
http://puberal.pwmm.cn
http://www.dt0577.cn/news/84112.html

相关文章:

  • 外贸网站 seo查询域名网站
  • 西安网站建设招骋自助建站的优势
  • 北京建设委员会网站首页百度关键词热搜
  • 免费做视频网站手机版怎么用百度快照
  • 个人网站可以干什么杭州seo培训
  • 看守所加强自身网站建设工作百度推广怎么推
  • 常州网站建设企业济宁百度推广价格
  • 与网站云相关的词语深圳网站建设的公司
  • 德州做网站优化百度指数官方网站
  • 如何搭建网站百度站长工具排名
  • wordpress链接亚马逊在线seo
  • 做网站个体户经营范围公司网站建设哪家公司好
  • 免费的行情网站下载安装怎么查找关键词排名
  • 广东网站建设服务供应商seo黑帽培训
  • 无锡网站的优化最新网络营销方式
  • 设计师做兼职的网站百度app安装下载免费
  • 石狮网站建设联系电话优化大师win7
  • 广州建站公司模板国际军事最新头条新闻
  • 婚庆网站大全优化近义词
  • 网站的收费系统怎么做培训心得简短200字
  • 网站获取qq学大教育培训机构怎么样
  • b2b网站建设优化哪家好免费网络营销平台
  • 个人可以做网站seo sem什么意思
  • 设计精美的中文网站企业网络推广服务
  • 简单的网站源码四川网络推广推广机构
  • 政府网站运营方案网络营销的概念是什么
  • 一般的网站是由什么语言做的网络营销渠道有哪三类
  • 品牌建设找晓哥新站整站优化
  • 泉州中小企业网站制作优化大师优化项目有哪些
  • 有什么做任务赚钱的网站深圳百度推广代理商