2012-09-06 34 views
15

Tôi muốn sử dụng các biểu tượng Qt Standard (as here). Tôi đã tìm thấy nhiều ví dụ về cách set the icons programmatically (thời gian chạy trong mã).Sử dụng các biểu tượng chuẩn Qt từ bên trong Qt Creator

Tuy nhiên, làm cách nào tôi có thể đặt "tên biểu tượng chuẩn" (ví dụ: application-exit) trong Trình tạo Qt? Điều này blog here nói, tôi chỉ cần đặt chủ đề cho tên tương ứng. Nhưng tôi không có một tài sản chủ đề như vậy, tôi muốn có một popup với một nguồn tài nguyên (ảnh chụp màn hình dưới đây).

Địa điểm đúng là để áp dụng "tên chuẩn" (ví dụ: application-exit)?

Cập nhật từ 2.4.x đến Qt Creator 2.5.2 cung cấp cho tôi thuộc tính "chủ đề" từ blog trên, nhưng vẫn chưa có biểu tượng hiển thị. Điều gì khác là cần thiết để làm cho các biểu tượng hiển thị?

Theme now available with Creator 2.5.2

Ghi chú Qt 4.8.1, bây giờ cập nhật để 2.5.2, Windows 7

Trả lời

12

Biểu tượng chủ đề chỉ được hỗ trợ trên Linux/X11. Trên Windows và OS X, bạn phải cung cấp các biểu tượng của riêng bạn.

Giải pháp cho vấn đề này là đặt tên chủ đề trong QtCreator (như trong ví dụ của bạn). Sau đó, bạn phải cung cấp các biểu tượng của cùng một Bí danh dưới Tiền tố ":/biểu tượng" trong tài nguyên của bạn. Bạn có thể tận dụng các biểu tượng từ các bộ có sẵn trong miền công cộng, ví dụ: biểu tượng Tango nổi tiếng được đặt.

Nếu bạn chỉ nhắm mục tiêu nền tảng Windows, cài đặt chủ đề sẽ không sử dụng được cho bạn. Nếu bạn nhắm mục tiêu cả Linux/X11 và các nền tảng khác, với giải pháp này, bạn sẽ có được các biểu tượng gốc trên một hệ thống và các biểu tượng bạn cung cấp cho mình trên các hệ thống khác.

Bạn có thể tìm thấy một lời giải thích rất tốt về cách để làm điều đó ở đây: http://mithatkonar.com/wiki/doku.php/qt/icons

+1

Trong các hệ điều hành khác, có một lượng lớn các biểu tượng chuẩn được sử dụng trên thanh công cụ, v.v. Và có các chủ đề biểu tượng cho các biểu tượng này. Ví dụ: http://commons.wikimedia.org/wiki/Tango_icons http://gnome-look.org/content/show.php/?content=122078 Như bạn có thể thấy, đây là một khái niệm khá hay vì tất cả các ứng dụng sử dụng các biểu tượng chuẩn này phù hợp với môi trường máy tính để bàn mà người dùng cũng có thể tùy chỉnh. – ypnos

+0

Xin lưu ý rằng các bình luận trước đây của tôi đã được trả lời cho các bình luận đã bị xóa. Xin lỗi vì sự nhầm lẫn. – ypnos

0

Thật không may, tùy chọn này của sắc thái biểu tượng thông qua Qt Designer là không có sẵn trên Windows.

+0

Bạn có nghĩa là nó không hoạt động trong Windows? Bởi vì - như ảnh chụp màn hình ở trên cho thấy - có thể thiết lập chủ đề. Không có sẵn sẽ có ý nghĩa đối với tôi, tùy chọn này không có sẵn. Và đây có phải là lỗi hay đây là quyết định thiết kế của đội Qt? Bất kỳ tài liệu tham khảo đưa ra một số chi tiết hơn? –

1

@ypnos đề nghị một liên kết tuyệt vời với nhiều cách tiếp cận để giải quyết vấn đề. Tôi thích cái cuối cùng - Creating a custom icon theme. Tác giả khẳng định ba Ưu (sẵn cho tất cả các nền tảng, Tuyệt vời thay đổi kích thước, Bao gồm tất cả các biểu tượng cần thiết), và hai Nhược điểm (Không phù hợp với sắc thái biểu tượng hệ thống, Pain in the ass để thực hiện). Ở đây tôi đề xuất các cải tiến để loại bỏ khuyết điểm.

Tôi đã sao chép biểu tượng Tango từ github. Kho lưu trữ https://github.com/ppinard/qtango đã có tệp index.theme. Nhưng chủ yếu, nó mang lại một tập lệnh Python generate_rcc.py, có thể tự động tạo tệp *.qrc. Tôi chỉ phải thay đổi các đối số của subprocess.check_call() từ '--binary''--compress' đến '-binary''-compress'. Tệp được tạo chứa các đường dẫn tuyệt đối, nhưng thật dễ dàng để Tìm thay thế &. Người ta có thể sử dụng kịch bản này cho bất kỳ biểu tượng nào - bước đầu tiên mất thời gian được giải quyết.

Bây giờ, bằng cách sử dụng thuộc tính "Chủ đề", bạn có thể xác định các biểu tượng trong Nhà thiết kế Qt, như đã được hiển thị trong câu hỏi. Đối với những người đang phát triển dưới Linux, hệ thống biểu tượng sẽ hiển thị ngay trong Trình thiết kế (giả sử biểu tượng sử dụng tên biểu tượng chuẩn). Đó là giao diện bản địa (các biểu tượng sẽ được cấu hình trong cài đặt hệ thống của bạn). Điều đó giải phóng bạn khỏi mã hóa ui->action_Open->setIcon(...).

Và tinh chỉnh cuối cùng là đặt chủ đề trước khi thiết lập ui.

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
#ifdef _WIN32 
    QIcon::setThemeName("tango"); 
#endif 

    ui = new Ui::MainWindow; 
    ui->setupUi(this); 

    ... 
    // NO NEED FOR ui->action_Open->setIcon(...) 
} 

Các #ifdef lon nhiên được điều chỉnh để nhắm mục tiêu tất cả các nền tảng cần thiết, hoặc bỏ qua để buộc các biểu tượng giống nhau trên tất cả các nền tảng bao gồm cả Linux.

Kết quả là, cách tiếp cận này tránh tất cả mã hóa mất thời gian và kết quả phù hợp với các biểu tượng hệ thống ít nhất trên Linux.

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