创建自定义按钮

时间:2013-04-18 09:49:11

标签: c++ qt qaction

我想创建一个自定义的pushButton,没有任何样式,只显示.png图像。

我尝试使用setIcon方法创建一个pushButton,但这使用了pushButton银色样式,我只想显示图像并将其作为一个按钮。

另外,我尝试使用QAction

newAct = new QAction(QIcon(":/new/prefix1/images/appbar.close.png"),

但如果没有工具栏,这不会显示任何内容。

我有什么想法可以让它发挥作用吗?

4 个答案:

答案 0 :(得分:2)

也许这段代码可以帮到你。创建一个QPushButton,为它设置一个图标并使用以下代码:

YourQPushButton->setFlat(true);

更新:

<强> MyPushButton.h:

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H

#include <QLabel>

class MyPushButton : public QLabel
{
    Q_OBJECT
public:
    explicit MyPushButton(QWidget *parent = 0);

signals:
    void clicked();

protected:
    void mouseReleaseEvent(QMouseEvent *ev);

};

#endif // MYPUSHBUTTON_H

<强> MyPushButton.cpp

void MyPushButton::mouseReleaseEvent(QMouseEvent *ev)
{
    emit clicked();
}

使用方法:

MyPushButton btn;
btn.setPixmap(QPixmap(":/rm.png"));
QObject::connect(&btn, SIGNAL(clicked()), qApp, SLOT(quit()));
btn.show();

您甚至可以将此功能添加到MyPushButton课程以提高工作效率:)

void MyPushButton::setIcon(QPixmap px, int w, int h)
{
    setPixmap(px.scaled(w, h));
}

答案 1 :(得分:2)

有两种解决方案:

  1. 子类QLabel发出clicked()信号并将图像加载到该子类
  2. 您可以将样式表设置为QPushButton,如How to change QPushButton icon using stylesheets in Qt app
  3. 如果你愿意继承QLabel的子类 - 这里有一个类:

    标题qspoilerlabel.h:

    #ifndef QSPOILERLABEL_H
    #define QSPOILERLABEL_H
    
    #include <QLabel>
    #include <QEvent>
    
    class QSpoilerLabel : public QLabel
    {
        Q_OBJECT
    public:
    QSpoilerLabel( const QString & text, QWidget * parent = 0 );
    QSpoilerLabel(){}
    
    signals:
        void clicked();
    
    public slots:
        void slotClicked();
    
    protected:
        void mouseReleaseEvent ( QMouseEvent * event );
    };
    
    #endif // QSPOILERLABEL_H
    

    来源qspoilerlabel.cpp:

    #include "qspoilerlabel.h"
    QSpoilerLabel::QSpoilerLabel( const QString & text, QWidget * parent )
    :QLabel(parent)
    {
        connect( this, SIGNAL( clicked() ), this, SLOT( slotClicked() ) );    
    }
    
    void QSpoilerLabel::slotClicked()
    {
    //qDebug()<<"Clicked";
    }
    
    void QSpoilerLabel::mouseReleaseEvent ( QMouseEvent * event )
    {
        emit clicked();
    }
    

    您可以使用setPixmap方法将图片加载到标签。它看起来像这样:

    label->setPixmap((QPixmap::fromImage(QImage(":/new/prefix1/images/appbar.close.png"));
    

答案 2 :(得分:0)

在QtCreator中你可以试试这个:

  1. 您使用png图片制作标签。
  2. 在标签的顶部放置一个带样式表的QPushButton“background:transparent; border:none;“
  3. 像按钮一样工作,看起来像一个图像;)

答案 3 :(得分:0)

首先,添加资源文件,创建前缀并添加所需的文件。在设计器中,右键单击按钮并更改样式表。

    background: url(":\filePath");

或者,你可以这样做,添加资源(是的,它会显示它是一个无效的样式表,但不要害怕):然后通过在url之前添加关键字background来编辑代码,使其看起来像这样

    background: url(":\filePath");

其中文件路径是资源文件的路径,当您决定使用add resource选项时会自动检测该路径。