2013-04-18 9 views
1

.png 이미지 만 표시하는 스타일을 사용하지 않고 사용자 지정 푸시 버튼을 만들려고합니다.사용자 지정 단추 만들기

나는 setIcon 메서드로 푸시 버튼을 만들려고했지만 이것은 푸시 버튼 실버 스타일링을 사용하여 이미지를 표시하고 버튼으로 만들려고합니다.

또한, 나는

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

QAction

를 사용하여 시도하지만이 도구 모음없이 아무것도 표시되지 않습니다.

어떻게하면이 아이디어를 얻을 수 있습니까?

+0

업데이트 된 답변보기! – saeed

답변

2

아마도이 코드가 도움이됩니다.

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

이 코드를하는 QPushButton을 만들기 그것을 위해 아이콘을 설정하고 사용
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 클래스 생산성 :)로

QtCreator에서
void MyPushButton::setIcon(QPixmap px, int w, int h) 
{ 
    setPixmap(px.scaled(w, h)); 
} 
+0

이것은 작동하지만 클릭하면 스타일이 표시됩니다. 클릭하면 스타일을 삭제할 수 있습니까? – DomX23

+0

@ DomX23 : 아이콘이있는 클릭 가능한 QLabel이 필요합니다. 맞습니까? – saeed

+0

이미지를 표시 할 텍스트가 필요하지 않습니다. .png 이미지에서 맞춤 검색 버튼을 만들려고합니다. – DomX23

0

이 시도 할 수 있습니다 :

  1. 을 당신은 당신의 png 이미지로 라벨을 만듭니다.
  2. 레이블 맨 위에 "background : transparent; border : none;"스타일 시트가있는 QPushButton을 넣습니다. 버튼과 같은

작품, 이미지처럼 보이는;

+0

스타일 시트를 편집하고 {background : transparent; 국경 : 없음;} 그것에, 그것은 그것이 잘못되었다고 말한다. – DomX23

+0

중괄호없이 시도하십시오. – ariwez

2

이 두 솔루션이다) :

  • 하위 클래스 QLabel을 클릭 방출
      () 신호와 서브 클래스로 이미지를로드
    1. 스타일 시트를 QPushButton으로 설정할 수 있습니다. How to change QPushButton icon using stylesheets in Qt app

    헤더 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 - 클래스 QLabel하지만 여기에 대한 클래스입니다.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 방법으로 라벨에 이미지를로드 할 수 있습니다. 다음과 같이 표시 될 수 있습니다.

  • +0

    +1 코멘트가 있습니다. – saeed

    0

    우선 리소스 파일을 추가하고 접두사를 만들고 필요한 파일을 추가하십시오. 디자이너에서 마우스 오른쪽 버튼을 클릭하고 스타일 시트를 변경하십시오. 그 때처럼 보이게하기 위해 URL 앞에 키워드 배경을 추가하여 코드를 편집 :

    background: url(":\filePath"); 
    

    양자 택일로, 당신은 (예 그것이 잘못된 스타일이라고 표시되지만 두려움이 아닌) 자원을 추가,이 작업을 수행 할 수 있습니다 이

    background: url(":\filePath"); 
    

    여기서 파일 경로는 리소스 추가 옵션을 사용할 때 자동으로 감지되는 리소스 파일의 경로입니다.