2009-10-20 21 views
17

Thuộc tính động của Qt có thực sự động với bảng định kiểu?Các bảng định kiểu Qt có thực sự xử lý các thuộc tính _dynamic_ không?

Tôi có ví dụ cơ bản từ stylesheets và tính năng động:

/*stylesheet:*/ 
*[field_mandatory="true"] { background-color: "yellow";} 

Và tôi có điều này xảy ra trong thời gian chạy đâu đó trong các mã:

/*code:*/ 
myWidget->setProperty("field_mandatory", field->isFilled()); 

Không có gì thay đổi trong giao diện người dùng, khi khách sạn này thay đổi khi chạy.

Có ai có ý tưởng phải làm để cập nhật công cụ biểu định kiểu của Qt khi thay đổi thuộc tính hoặc thậm chí có khả năng xử lý các loại trường hợp này không?

Btw. Tôi đang sử dụng Qt 4.4

+0

Có lẽ bạn cần nó để được Q_PROPERTY? – cheez

Trả lời

6

Tôi đã tìm thấy một cách nhanh chóng, mặc dù một chút hackish, cách cập nhật kiểu dáng của tiện ích.

myWidget->style()->unpolish(myWidget); 
myWidget->ensurePolished(); 

Thực hiện việc này sau khi thay đổi thuộc tính giữ mối tương quan giữa dữ liệu thuộc tính và giao diện người dùng.

+0

Điều này đã không làm việc cho tôi với PyQt 4.7.2 (Qt 4.6.2) Đề xuất của Ton van den Heuvel đã làm. –

+0

Điều này phù hợp với tôi! Tôi đang chạy Qt 4.7 và thay đổi thành thuộc tính "enabled" thông qua 'QWidget :: setEnabled (bool)' không thay đổi giao diện của widget thông qua '[enabled =" false "]' và '[enabled = tương ứng "true"] 'các phần trong biểu định kiểu. Sử dụng ở trên làm việc như một say mê. Tôi chỉ bọc chúng trong một hàm 'rePolish (QWidget *)' và gộp các lời gọi đến hàm đó trong suốt mã của tôi bất cứ nơi nào trạng thái được kích hoạt thay đổi. – kurige

+1

Là một lưu ý phụ: Ai downvoted câu trả lời ở trên ... "Nó không làm việc cho tôi" nói chung không phải là một lý do đủ tốt để downvote. – kurige

2

Tôi đã thử điều này cũng không có may mắn và khi tôi tìm thấy văn bản sau trong tài liệu, tôi đã từ bỏ. Xem The Style Sheet Syntax:

Cảnh báo: Nếu giá trị của Qt thay đổi sở hữu sau khi style sheet đã được thiết lập, nó có thể là cần thiết để lực một tính toán lại style sheet. Một cách để đạt được điều này là không đặt tờ kiểu dáng và đặt lại.

3

Các công trình sau đây cho tôi để đảm bảo một restyling thích hợp của các widget:

myWidget->setStyle(QApplication::style())

Buộc một tính toán lại các stylesheets theo đề nghị của mdcl không làm việc cho tôi. Tôi đang sử dụng Qt 4.5.3.

+0

Điều này đã làm việc cho tôi bằng cách sử dụng PyQt 4.7.2 (Qt 4.6.2). Một sự xấu hổ thực sự rằng công cụ này không hoạt động tốt đến vậy. Bạn sẽ có thể chỉ cần gọi EnsurePolished() và được thực hiện với nó. –

18

Qt có sự giới thiệu sau đây trong FAQ của họ:

style()->unpolish(theWidget); 
style()->polish(theWidget); 

Họ cũng nói rằng bạn có thể thiết lập lại các stylesheet bằng cách làm như sau nhưng nó là tốn kém hơn:

setStyleSheet(styleSheet()); 
Các vấn đề liên quan