• 5295阅读
  • 5回复

[提问]一个关于“mouse....event”的问题 [复制链接]

上一主题 下一主题
离线laiquzizai
 
只看楼主 倒序阅读 楼主  发表于: 2012-12-16
关键词: 问题窗口
小弟Qt新人,对鼠标事件实在不懂,我的第一个类De继承了QWidget,第二个类MyDrawing继承了De

void De:: mousePressEvent(QMouseEvent *event)
        { if (event->button()==Qt::MidButton)
          {        
            this->windowPos=this->pos();
            this->mousePos=event->globalPos();
            this->dPos=mousePos-windowPos;                
     } }
   void De:: mouseMoveEvent(QMouseEvent *event)
     {
         if(event->buttons()&Qt::MidButton)    
         {this->move(event->globalPos()-this->dPos);
} }
.........................................................................................

void MyDrawing::mousePressEvent(QMouseEvent *e)
{ if(e->button()==Qt::LeftButton)
{  startPnt = e->pos();
   endPnt = e->pos();
  isPressed = true;
}}
void MyDrawing::mouseMoveEvent(QMouseEvent *e)
{  
if(isPressed)
{
        endPnt=e->pos();  
   update();
}}
void MyDrawing::mouseReleaseEvent(QMouseEvent* e)
{ isPressed=false;
myLine* line = new myLine;
   line->startPnt = startPnt;
  line->endPnt = endPnt;  
this->lines.push_back(line);
    update();
}
.............................................................

两个类中都定义了mousePressEvent和mouseMoveEvent,De类中按下鼠标滚轮用来移动窗口,MyDrawing类中定义的是按下左键画线。显然
MyDrawing中“mouse....Event”重载了De类,调用时只能左键画线。为了实现两种功能我把其中一个类中的函数名做了改动,但不知道为什么,不管是哪个改了之后,其函数功能就不能实现。
废话了这么多,就是想问是不是只能把函数名定义为“mouse...Event”格式?除了把函数写在一个类中解决上述问题外,有木有其他办法解决啊?
(要在一个窗口中实现两种功能)。小弟小白也,还望高人通俗的讲来。
离线laiquzizai
只看该作者 1楼 发表于: 2012-12-16
求解答。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
离线roywillow

只看该作者 2楼 发表于: 2012-12-17
显然,不能改动
这是事件处理函数,需要履盖父类才有效
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线shiziyang

只看该作者 3楼 发表于: 2012-12-17
void MyDrawing::mousePressEvent(QMouseEvent *e)
{
De:: mousePressEvent(e);
if(e->button()==Qt::LeftButton)
{  startPnt = e->pos();
   endPnt = e->pos();
  isPressed = true;
}}
要改成这样吧
离线laiquzizai
只看该作者 4楼 发表于: 2012-12-17
回 3楼(shiziyang) 的帖子
这个方法确实好,相当于把父类中的函数定义在子类中。这样做,貌似连继承都不需要,谢谢啦。
离线laiquzizai
只看该作者 5楼 发表于: 2012-12-17
回 2楼(roywillow) 的帖子
就算是我重新定义一个不听命的函数都不可以吗?是不是因为这个函数的参数(鼠标事件)比较特殊的原因?
快速回复
限100 字节
 
上一个 下一个