Qt:我应该使用哪个 object/item 来创建可点击的图标

Qt: Which object/item should I use to create clickable icons

我正在尝试为 rpg(角色扮演游戏)(npc/任务/物品等)编写一个编辑器。我需要创建一个带有代表 npc 图像的 "white background" 的图标。它应该是可点击的(当它被点击时,当前选中的npc的图标ID将根据选择设置)。

我已经设法构建了一个弹出对话框来显示所有图标,但无法设法找到创建可点击图标的方法。我应该实施哪个 class 才能使其正常工作?

可点击的图标可以使用 QPushButton or QToolButton:

QPushButton* button = new QPushButton;
button->setIcon(QIcon("/path/to/my/icon"));

我做过类似的事情,但不想要看起来像按钮的东西,也不想进入样式覆盖或特殊绘画。相反,我创建了一个派生自 QLabel 的 ClickableLabel class。

代码的相关部分是:

class ClickableLabel : public QLabel
{
protected:

    virtual void mouseReleaseEvent (QMouseEvent *evt)
    {
        emit clicked (evt->button ());
    }

signals:

    void clicked (int button);

...rest of class definition...
}

您可以根据需要调整信号参数。

可点击的 QLabel :https://wiki.qt.io/Clickable_QLabel

与 QPixmap 一起使用:http://doc.qt.io/qt-4.8/qlabel.html#pixmap-prop

页眉

class ClickableLabel : public QLabel
{
Q_OBJECT
public:
    explicit ClickableLabel( const QString& text="", QWidget* parent=0 );
    ~ClickableLabel();
signals:
    void clicked();
protected:
    void mousePressEvent(QMouseEvent* event);
};

来源

ClickableLabel::ClickableLabel(const QString& text, QWidget* parent)
    : QLabel(parent)
{
setText(text);
}

ClickableLabel::~ClickableLabel()
{
}

void ClickableLabel::mousePressEvent(QMouseEvent* event)
{
    emit clicked();
}