2011-12-05 14 views
5

Chciałbym ustawić QToolButton za ikony za pomocą arkuszy stylów, takich jak to:Jak ustawić ikony QToolButton za pomocą arkusza stylów?

#include <QToolButton> 
#include <QApplication> 

QString FormStyleSheetString(const QString & name) 
{ 
    const QString thisItemStyle("QToolButton:enabled { image: url(" + name + "_normal.png); } " 
          "QToolButton:pressed { image: url(" + name + "_pressed.png); } " 
          "QToolButton:disabled { image: url(" + name + "_disabled.png); } " 
          ); 

    return thisItemStyle; 
} 

int main(int argc, char * argv[]) 
{ 
    QApplication qapp(argc,argv); 

    QToolButton button; 
    button.setStyleSheet(FormStyleSheetString("button")); 
    button.setToolButtonStyle(Qt::ToolButtonTextUnderIcon); 
    button.setIconSize(QSize(200,200)); 
    button.setText("some thing..."); 
    button.show(); 

    return qapp.exec(); 
} 

Skompilowałem to tak:

g++ -O3 -std=c++0x -Wall -Wextra -pedantic test.cpp -lQtCore -lQtGui -I/usr/include/Qt/ -I/usr/include/QtCore/ -I/usr/include/QtGui/ 

Niestety, powyższe nie działa (ikona nie jest pokazane).

Jeśli używam setIcon, ikona jest wyświetlana prawidłowo.

Co więc robię źle? Jak ustawić ikonę przycisku za pomocą arkusza stylów?

ilustracje użyłem to:
button_normal.png button_pressed.png button_disabled.png

PS Zanotuj że zadałem podobne pytanie here, ale odpowiedź nie działa, gdy tekst jest ustawiony (ikona jest wszystko spłaszczony , a tekst nie jest poniżej ikony).

EDIT 1: Próbowałem również tej funkcji (jak sugeruje Kamil Klimek):

QString FormStyleSheetString(const QString & name) 
{ 
    const QString thisItemStyle("QToolButton { qproperty-icon: url(" + name + "_normal.png); }; " 
           "QToolButton:pressed { qproperty-icon: url(" + name + "_pressed.png); }; " 
           "QToolButton:hover { qproperty-icon: url(" + name + "_disabled.png); }; " 
           ); 

    return thisItemStyle; 
} 

ale to również nie działa. Naciśnięcie przycisku lub najechanie nie zmienia ikony.

+0

Ustawiasz obraz, a nie ikonę. spróbuj qproperty-icon: url() –

+0

@KamilKlimek Próbowałem, ale to nie zadziałało. Ustawiłby normalny obraz, ale nie byłby wciśnięty i najechany. Myślę, że to z powodu tego błędu: https://bugreports.qt.nokia.com/browse/QTBUG-2982?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab –

+0

, a następnie musisz ustawić go jako obraz lub tło! będziesz musiał dostosować rozmiar za pomocą CSS. –

Odpowiedz

8

Później tego samego dnia udało mi się jakoś rozwiązać ten problem, ale zapomniał odpowiedzieć rozwiązanie:

QString FormStyleSheetString(const QString & name) 
{ 
    const QString thisItemStyle(
    "QToolButton {\n" 
       " border: none;\n" 
       " background: url(" + name + "_normal.png) top center no-repeat;\n" 
       " padding-top: 200px;\n" 
       " width: 200px;\n" 
       " font: bold 14px;\n" 
       " color: red;\n" 
       "}\n" 
       "QToolButton:hover {\n" 
       " background: url("+name+"_hover.png) top center no-repeat;\n" 
       " color: blue;\n" 
       "}\n" 
       "QToolButton:pressed {\n" 
       " background: url("+name+"_pressed.png) top center no-repeat;\n" 
       " color: gray;\n}"); 

    return thisItemStyle; 
} 

nie było na tyle, aby ustawić tło. Potrzebny był również rozmiar ustalony.