Создать пользовательскую кнопку

Я хочу создать пользовательскую кнопку без каких-либо стилей, который просто отображает изображение .png.

Я попытался создать pushButton с помощью метода setIcon, но он использует серебряный стиль pushButton. Я просто хочу отобразить изображение и сделать его кнопкой.

Также я попробовал использовать QAction

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

Но это ничего не отображает без панели инструментов.

Любые идеи, как я могу заставить это работать?

1

Решение

может быть, этот код поможет вам Создайте 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));
}
2

Другие решения

Есть 2 решения:

  1. Подкласс QLabel для генерации сигнала clicked () и загрузки изображения в этот подкласс
  2. Вы можете установить свою таблицу стилей на QPushButton примерно так Как изменить значок QPushButton, используя таблицы стилей в приложении Qt

Если вы хотите создать подкласс 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

В QtCreator вы можете попробовать это:

  1. Вы делаете ярлык с вашим изображением PNG.
  2. Сверху надписи вы помещаете QPushButton с таблицей стилей «background: transparent;
    граница: нет; «

Работает как кнопка, выглядит как картинка;)

0

Прежде всего, добавьте файл ресурса, создайте префикс и добавьте нужные файлы. В конструкторе щелкните правой кнопкой мыши и измените таблицу стилей.

    background: url(":\filePath");

в качестве альтернативы, вы можете сделать это, добавить ресурс (да, он покажет, что это недопустимая таблица стилей, но не бойтесь): затем отредактируйте код, добавив фон ключевого слова перед URL, чтобы он выглядел следующим образом

    background: url(":\filePath");

где путь к файлу — это путь к файлу вашего ресурса, который автоматически определяется, когда вы решаете использовать опцию добавления ресурса.

0
По вопросам рекламы [email protected]