2011-12-05 34 views
5

Tôi muốn thiết lập các biểu tượng của một QToolButton sử dụng style sheets, như thế này:Cách đặt biểu tượng của QToolButton bằng cách sử dụng biểu định kiểu?

#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(); 
} 

tôi biên soạn nó như thế này:

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

Thật không may, trên không hoạt động (biểu tượng không phải là được hiển thị).

Nếu tôi sử dụng setIcon, thì biểu tượng được hiển thị chính xác.

Vì vậy, tôi đang làm gì sai? Làm cách nào để đặt biểu tượng của nút bằng cách sử dụng biểu định kiểu?

Những hình ảnh tôi sử dụng là:
button_normal.png button_pressed.png button_disabled.png

PS Hãy lưu ý rằng tôi hỏi câu hỏi tương tự here, nhưng câu trả lời không làm việc một khi văn bản được thiết lập (biểu tượng là tất cả squished và văn bản không nằm bên dưới biểu tượng).

EDIT 1: Tôi cũng đã cố gắng chức năng này (như Kamil Klimek gợi ý):

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; 
} 

nhưng nó cũng không làm việc. Nhấn nút hoặc di chuột, không thay đổi biểu tượng.

+0

bạn đặt hình ảnh không phải là biểu tượng. thử qproperty-icon: url() –

+0

@KamilKlimek Tôi đã thử điều đó, nhưng nó không hoạt động. Nó sẽ thiết lập hình ảnh bình thường, nhưng không được nhấn và di chuột. Tôi nghĩ rằng đó là do lỗi này: https://bugreports.qt.nokia.com/browse/QTBUG-2982?page=com.atlassian.streams.streams-jira-plugin:activity-stream-issue-tab –

+0

rồi bạn phải đặt nó làm hình ảnh hoặc nền! bạn sẽ phải điều chỉnh kích thước bằng CSS. –

Trả lời

8

Cuối ngày hôm đó tôi cố gắng bằng cách nào đó giải quyết vấn đề, nhưng quên gửi giải pháp:

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; 
} 

Đó là không đủ chỉ để thiết lập nền. Nó cũng cần kích thước cố định.

Các vấn đề liên quan