当前位置: 代码迷 >> QT开发 >> 类成员有关问题
  详细解决方案

类成员有关问题

热度:134   发布时间:2016-04-25 03:05:52.0
类成员问题
本帖最后由 qq_16982701 于 2014-12-09 17:35:42 编辑
#include "mywidget.h"
#include<QToolTip>
#include<QPainter>
#include<QDebug>


MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    setMouseTracking(true);
}
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
    if(rect.contains(event->pos()),1)
    {
        qDebug()<<"contains";
        setCursor(Qt::OpenHandCursor);
    }
    QString pos=QString("%1,%2").arg(event->pos().x()).arg(event->pos().y());
    QToolTip::showText(event->globalPos(),pos,this);
}

void MyWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::red);
    painter.setPen(pen);
    QRect rect(30,30,200,200);
    painter.drawRect(rect);

}


#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QMouseEvent>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MyWidget(QWidget *parent = 0);
private:
    QRect rect;


private slots:
    void mouseMoveEvent(QMouseEvent *event);
    void paintEvent(QPaintEvent *event);
    
};

#endif // MYWIDGET_H

QRect rect已经加到中类成员中,为什么if中的rect和paintEvent函数中的rect不是同一个rect?
------解决思路----------------------
painter.setPen(pen);
 QRect rect(30,30,200,200);
  painter.drawRect(rect);
这里的rect是你重新定义的局部变量,当然和你的成员变量不一样。
 QRect rect(30,30,200,200);只会在它所在的函数内的当前声明处及变量生命周期内的值才是(30,30,200,200),其它时候才是类成员变量rect
------解决思路----------------------
一楼说得对,如果你要使用类中的rec,要么你在类定义的时候直接设置好,要么在构造函数中对rec进行设置,然后你就可使用了,还有paintEvent()这个方法是在窗口从不见到可见或者是窗口需要重绘的时候自动调用的,使用的时候注意一点,当然也可以是显式调用
  相关解决方案