Qt自定义图形实现拖拽效果

所属分类: 软件编程 / C 语言 阅读数: 234
收藏 0 赞 0 分享

本文实例为大家分享了Qt自定义图形实现拖拽效果的具体代码,供大家参考,具体内容如下

在这里自定义图形是通过QPaintEvent事件绘画的图形,也可以通过自定义控件的方式添加到qt中。

首先定义类来自定义图形,这里通过paintEvent事件来实现(主要就是绘画一个图形)

void QEventView::paintEvent(QPaintEvent *event)
{
  resize(115+m_iLen,36);
  QPainter painter(this);
  painter.setRenderHint(QPainter::Antialiasing);
  painter.setPen(Qt::blue);
 
  //定义箭头的坐标
  static const QPoint pointArr[7] =
  {
   QPoint(0,10),
   QPoint(100+m_iLen,10),
   QPoint(100+m_iLen,0),
   QPoint(115+m_iLen,18),
   QPoint(100+m_iLen,36),
   QPoint(100+m_iLen,26),
   QPoint(0,26)
  };
  int i = 0;
 
  while(i < 7)
  {
    if(i == 6)
      painter.drawLine(pointArr[i],pointArr[0]);
    else
      painter.drawLine(pointArr[i],pointArr[i+1]);
    i++;
  }
  painter.drawText(QPoint(0,22),m_sEventName);
 
}

接着,主窗口程序通过mousePressEvent() mouseMoveEvent(),实现拖拽移动,

void MainWindow::mousePressEvent(QMouseEvent *event)
{
  qDebug()<<" 1:"<<event->pos();
  //获取控件的对象
  m_pTempWidget = childAt(event->pos());
  qDebug()<<m_pTempWidget;
  if(!m_pTempWidget || m_pTempWidget == centralWidget())
    return;
  //容器存储自定义图形指针,以及图形的位置
  QMap<QEventView*,QPoint>::iterator iter = m_mapEventPoint.begin();
  while(iter != m_mapEventPoint.end())
  {
    if(iter.key() == m_pTempWidget)
    {
      m_windowInitPoint = iter.key()->frameGeometry().topLeft();
      m_StartPoint = event->pos();
      break;
    }
    ++iter;
  }
}
 
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
  QMap<QEventView*,QPoint>::iterator iter = m_mapEventPoint.begin();
  while(iter != m_mapEventPoint.end())
  {
    if(iter.key() == m_pTempWidget)
    {
 
      QPoint distance = event->pos() - m_StartPoint;
      iter.key()->move(m_windowInitPoint + distance);
      break;
    }
    ++iter;
  }
}

就能实现简单的拖拽功能,效果图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

从汇编看c++中变量类型的深入分析

本篇文章是对c++中的变量类型进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

从汇编看c++的默认析构函数的使用详解

本篇文章是对c++中默认析构函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

基于c++中的默认拷贝函数的使用详解

本篇文章对c++中默认拷贝函数的使用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中的默认operator=操作的详解

本篇文章是对c++中的默认operator=操作的应用进行了详细的分析介绍。需要的朋友参考下
收藏 0 赞 0 分享

解析c++中参数对象与局部对象的析构顺序的详解

本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入c++中临时对象的析构时机的详解

本篇文章对c++中临时对象的析构时机进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

解析内存对齐 Data alignment: Straighten up and fly right的详解

对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响
收藏 0 赞 0 分享

深入内存对齐的详解

本篇文章是对内存对齐进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入C语言把文件读入字符串以及将字符串写入文件的解决方法

本篇文章是对C语言把文件读入字符串以及将字符串写入文件的方法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

本篇文章对Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享
查看更多