Я хочу создать пользовательскую кнопку без каких-либо стилей, который просто отображает изображение .png.
Я попытался создать pushButton с помощью метода setIcon, но он использует серебряный стиль pushButton. Я просто хочу отобразить изображение и сделать его кнопкой.
Также я попробовал использовать QAction
newAct = new QAction(QIcon(":/new/prefix1/images/appbar.close.png"),
Но это ничего не отображает без панели инструментов.
Любые идеи, как я могу заставить это работать?
может быть, этот код поможет вам Создайте 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 решения:
Если вы хотите создать подкласс 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"));
В QtCreator вы можете попробовать это:
Работает как кнопка, выглядит как картинка;)
Прежде всего, добавьте файл ресурса, создайте префикс и добавьте нужные файлы. В конструкторе щелкните правой кнопкой мыши и измените таблицу стилей.
background: url(":\filePath");
в качестве альтернативы, вы можете сделать это, добавить ресурс (да, он покажет, что это недопустимая таблица стилей, но не бойтесь): затем отредактируйте код, добавив фон ключевого слова перед URL, чтобы он выглядел следующим образом
background: url(":\filePath");
где путь к файлу — это путь к файлу вашего ресурса, который автоматически определяется, когда вы решаете использовать опцию добавления ресурса.