• 10507阅读
  • 13回复

重写paint函数QStyle::State_MouseOver,drawpixmap不起作用 [复制链接]

上一主题 下一主题
离线hope_yh
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-27
下面是部分代码:
class Picture:public QGraphicsItem
{
public:
    Picture(const QPixmap& pixmap,int x,int y,QGraphicsItem * parent = 0);
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    QPainterPath shape() const;
    QRectF boundingRect()const;
private:
    QPixmap m_pixmap;
    int pos_x;
    int pos_y;
};
void Picture::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    
    QPixmap pixmap(":/qt4logobak.png");
    
    if(option->state & QStyle::State_MouseOver)
    {
        qDebug() << "in selected" <<endl;
        painter->drawPixmap(pos_x,pos_y,pixmap);
    }
    else
    {
        qDebug() << "un selected" <<endl;
        painter->drawPixmap(pos_x,pos_y,m_pixmap);
    }

}
运行起来后,实际情况是在mouse over情况下option->state的值不对。
另外,想在paint里面换张图片,drawpixmap不起作用,请教各位了。
离线午小夜

只看该作者 1楼 发表于: 2010-01-27
...
[ 此帖被午小夜在2010-01-28 16:46重新编辑 ]
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线hope_yh

只看该作者 2楼 发表于: 2010-01-27
QGraphicsItem没有paintEvent,请问如何实现
离线dbzhang800

只看该作者 3楼 发表于: 2010-01-27
1.必须
void QGraphicsItem::setAcceptHoverEvents ( bool enabled )

2. 可能还需启用
QGraphicsView的
void    setMouseTracking ( bool enable )
离线hope_yh

只看该作者 4楼 发表于: 2010-01-28
试过了还是不行
离线hope_yh

只看该作者 5楼 发表于: 2010-01-28
void QGraphicsItem::setAcceptHoverEvents ( bool enabled )设置好了但是void Picture::hoverEnterEvent ( QGraphicsSceneHoverEvent * event)无响应。
在GraphicsView中启用setMouseTracking ( bool enable ),mousemove有响应,但是换张图片还是未show出来,代码如下:
void GraphicsView::mouseMoveEvent(QMouseEvent * event)
{
    qDebug()<<"item"<<endl;
    QGraphicsItem* item = itemAt(event->pos());

    
    QPixmap pixmap(":/qt4logbak.png");
    if(NULL!=item)
    {
        qDebug()<<"NULL!=item"<<endl;
        for(int i=0;i<100;i++)
        {
            if(item == allview->mainwindow->pixmapItem)
            {
                qDebug()<<"item =="<<endl;
                allview->mainwindow->pixmapItem->setPixmap(pixmap);
                allview->mainwindow->pixmapItem->update();
                break;
            }
        }
    }
}
pixmapItem是QGraphicsPixmapItem类型,allview->mainwindow->pixmapItem->setPixmap(pixmap);
未起作用,请帮助看看
离线hope_yh

只看该作者 6楼 发表于: 2010-01-28
void QGraphicsItem::setAcceptHoverEvents ( bool enabled )设置好了但是void Picture::hoverEnterEvent ( QGraphicsSceneHoverEvent * event)无响应。
在GraphicsView中启用setMouseTracking ( bool enable ),mousemove有响应,但是换张图片还是未show出来,代码如下:
void GraphicsView::mouseMoveEvent(QMouseEvent * event)
{
    qDebug()<<"item"<<endl;
    QGraphicsItem* item = itemAt(event->pos());

    
    QPixmap pixmap(":/qt4logbak.png");
    if(NULL!=item)
    {
        qDebug()<<"NULL!=item"<<endl;
        for(int i=0;i<100;i++)
        {
            if(item == allview->mainwindow->pixmapItem)
            {
                qDebug()<<"item =="<<endl;
                allview->mainwindow->pixmapItem->setPixmap(pixmap);
                allview->mainwindow->pixmapItem->update();
                break;
            }
        }
    }
}
pixmapItem是QGraphicsPixmapItem类型,allview->mainwindow->pixmapItem->setPixmap(pixmap);
未起作用,请帮助看看
离线yangfanxing
只看该作者 7楼 发表于: 2010-01-28
if(pixmap.isNull)
{
    qDebug() << "No Pixmap";
}
PHPWind好恶心。。。不想看这种界面。。。
离线hope_yh

只看该作者 8楼 发表于: 2010-01-28
pixmap是有的,还是显示空白
离线hope_yh

只看该作者 9楼 发表于: 2010-01-28
有谁知道怎么回事
离线hope_yh

只看该作者 10楼 发表于: 2010-01-28
同样的代码,现在可以了,不知什么缘故。
离线yangfanxing
只看该作者 11楼 发表于: 2010-01-28
引用第10楼hope_yh于2010-01-28 15:39发表的  :
同样的代码,现在可以了,不知什么缘故。


总之不会是灵异。。。应该是你自己重新qmake了,或者clean过重新qmake -project了。
PHPWind好恶心。。。不想看这种界面。。。
离线hope_yh

只看该作者 12楼 发表于: 2010-01-28
现在莫名其妙的好了
离线hope_yh

只看该作者 13楼 发表于: 2010-01-28
也许是吧
快速回复
限100 字节
 
上一个 下一个