2015-08-19 25 views
5

Có cách nào để thay đổi màu nền của widget mà không mất phong cách của nó? Vấn đề của tôi là tái sản xuất trên Windows 7/Vista với Aero chủ đề và trên Windows 8 quá. Bạn có thể xem làm thế nào nó sẽ tìm trong Qt Designer:Làm thế nào để giữ chủ đề Windows Aero sau khi thiết lập màu nền của nút trong Qt?

Background colour is the only difference between top and bottom buttons

Ở đây chúng ta có bốn nút: cả hai widget đầu có vẻ tốt (như tất cả các vật dụng khác của chương trình này), nhưng cả hai widget đáy trông cũ. Lý do duy nhất của phong cách cũ này là thiết lập màu nền của các nút này (theo như tôi hiểu, Desktop Window Manager đặt lại kiểu cũ nếu tiện ích không phải là tiêu chuẩn).

Vì vậy, có cách nào để buộc Trình quản lý cửa sổ máy tính để vẽ nút không có màu nền chuẩn không? (Microsoft Office có thể làm điều đó, nhưng tôi không chắc đó là tính năng tiêu chuẩn)

Bạn có thể đề xuất tiện ích mở rộng Qt thay thế bản vẽ tiêu chuẩn của nút theo chủ đề hiện đại (Aero) không? Hoặc có thể bạn biết cách tiêu chuẩn hơn để làm điều đó?

Tôi chỉ tìm thấy một cách để thay đổi màu sắc mà không mất phong cách: để đặt một phần trong suốt tiện ích trên nút (và để làm cho nó minh bạch cho các nhấp chuột). Bạn có thể xem kết quả tại đây (khung của tôi là lớn hơn nó là cần thiết - đó là cho cuộc biểu tình, tôi cũng cần phải hiệu chỉnh màu sắc để bù lại tính minh bạch, nhưng nó không phải là quan trọng):

Workaround (semi-transparent frame is above buttons)

Nó hoạt động, nhưng Tôi không thích "giải pháp" này. Bạn có ý tưởng tốt hơn?

+1

Thật không may, [Windows sẽ không hỗ trợ điều đó] (http://stackoverflow.com/q/18745447/1329652), vì vậy bất kỳ giải pháp nào bạn đưa ra đều phải là của riêng bạn. Điều tốt nhất bạn có thể làm là vẽ nút trên hình ảnh/pixmap, sau đó tô màu theo cách bạn muốn. –

Trả lời

1

Vì vậy, có cách nào để buộc Trình quản lý cửa sổ máy tính để vẽ nút không có màu nền chuẩn không? (Microsoft Office có thể làm điều đó, nhưng tôi không chắc chắn nó là tính năng tiêu chuẩn)

Bạn có thể viết riêng của bạn QProxyStyle và sử dụng các chức năng WinAPI để vẽ nút với phong cách aero và màu nền tùy chỉnh. Bạn có thể xem các nguồn Qt để xem, làm thế nào nó được thực hiện cho aero. Nhưng đó là nhiệm vụ rất phức tạp.

Biểu định kiểu không được thiết kế để sử dụng với bất kỳ hoạt ảnh nào (như hoạt ảnh di chuột trong aero).

Bạn có thể đề xuất tiện ích mở rộng Qt thay thế bản vẽ tiêu chuẩn của các nút theo chủ đề hiện đại (chủ đề Aero) không? Hoặc có thể bạn biết cách tiêu chuẩn hơn để làm điều đó?

Không có cách tiêu chuẩn. Nếu bạn muốn sử dụng các bảng định kiểu mà không có các vấn đề khó lường như vậy - bạn cần phải sử dụng kiểu "Fusion" thay vì bất kỳ kiểu gốc nào. Phong cách "Fusion" là cơ sở tốt để tùy biến QSS. See documentation

Cơ hội khác - là sử dụng QtQuick thay vì tiện ích.

+0

Cảm ơn bạn vì những ý tưởng và liên kết này! Unfortunatelly "Fusion" phong cách và Aero chủ đề trong Windows là khác nhau. Bạn có thể vui lòng làm rõ cách 'QtQuick' có thể trợ giúp ở đây không? – Ilya

+0

'QtQuick' là một phần mới của khung công tác Qt được tạo cho phát triển GUI đa nền tảng hiện đại. Bạn có thể đọc tài liệu và mẫu của Qt. –

2

Tôi thấy rằng bạn đang sử dụng bảng định kiểu để sửa đổi màu nền của các nút. Tôi đã phải đối mặt với cùng một vấn đề một thời gian trước đây. Ngay sau khi bạn áp dụng biểu định kiểu, nút sẽ mất hiệu ứng thứ 3 và bạn cũng không thấy hiệu ứng di chuột. Việc tôi thực hiện trên đó là hủy sử dụng bảng định kiểu và sử dụng QPalette để đặt màu.Ví dụ:

QPalette bluePalette(button->palette()); // original palette 
bluePalette.setColor(QPalette::Button, QColor(Qt::blue)); //colour you want 
button->setPalette(bluePalette); 
+1

Cảm ơn bạn vì ý tưởng này! Thật không may phong cách Aero là "mạnh mẽ hơn" hơn 'setPalette()'. Tôi đã kiểm tra ý tưởng này trước đó: trong chủ đề cổ điển, chúng tôi có nút màu xanh, nhưng trong chủ đề Aero chúng ta chỉ có thể thấy nút có màu nền mặc định. Có vẻ như, Desktop Window Manager chỉ bỏ qua bảng màu của widget. – Ilya

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