我需要一个小部件,我可以在其中放置各种可点击的图标,并在这些图标下使用 QLabel 一些文本。
这是一张图片:
我知道这需要一些调整和子分类。最好的方法是什么?我知道那些可点击的图标将显示在 QGraphicsView 上。
我建议你使用 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。