0

我需要一个小部件,我可以在其中放置各种可点击的图标,并在这些图标下使用 QLabel 一些文本。

这是一张图片:在此处输入图像描述

我知道这需要一些调整和子分类。最好的方法是什么?我知道那些可点击的图标将显示在 QGraphicsView 上。

4

1 回答 1

1

我建议你使用 QGraphicsView。

这是可点击像素图的示例:

ClickablePixmap::ClickablePixmap( QGraphicsItem* itemParent )
    : QObject(0)
    , QGraphicsPixmapItem(itemParent)
    , m_pressed(false)
{
    setFlags(QGraphicsItem::ItemIsFocusable |
             QGraphicsItem::ItemIsSelectable |
             QGraphicsItem::ItemSendsGeometryChanges |
             QGraphicsItem::ItemIgnoresParentOpacity
             );
    setAcceptedMouseButtons(Qt::LeftButton);
    setCursor(Qt::ArrowCursor);
}

void ClickablePixmap::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
{
    setCursor(Qt::ArrowCursor);
    m_pressed = false;
    update();
    if( boundingRect().contains(event->pos()) )
        emit clicked();
    event->accept();
}

void ClickablePixmap::mousePressEvent( QGraphicsSceneMouseEvent* event )
{
    setCursor(Qt::ArrowCursor);
    m_pressed = true;
    update();
    QGraphicsPixmapItem::mousePressEvent(event);
}

void ClickablePixmap::paint( QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget )
{
    Q_UNUSED(option);
    Q_UNUSED(widget);

    QRect rect(0,0, boundingRect().width(), boundingRect().height());

    // Create the pushed effet
    if( m_pressed ) {
        rect.adjust(2,2,-2,-2);
    }
    painter->drawPixmap(rect, pixmap());
}

接下来要做的是将此小部件嵌入到容器小部件中,其中包含:

QVBoxLayout

然后你可以在下面添加你的 QLabel。

于 2012-12-21T23:17:00.407 回答