2013-02-15 19 views
9

Tôi có một phông chữ có một số trọng số phông chữ trong một gia đình (thêm ánh sáng, ánh sáng, thông thường, nửa trắng, đậm, đen). Đối với ví dụ này, tôi đang sử dụng Google Webfont Nguồn Sans Pro miễn phí, nhưng tôi đã có cùng một vấn đề với bất kỳ phông chữ nào có nhiều trọng số (chẳng hạn như Avenir Next, phông chữ hệ thống trong Mac OS 10.8). Trong biểu định kiểu Qt, nếu tôi chỉ định:Có thể chỉ định nhiều hơn các phiên bản "thông thường" và "in đậm" của phông chữ trong Biểu định kiểu Qt không?

QLabel 
{ 
    font-family: Source Sans Pro; 
    font-size: 24px; 
} 

Tôi nhận được kiểu chữ "Thông thường". Nếu tôi chỉ định:

QLabel 
{ 
    font-family: Source Sans Pro; 
    font-weight: bold; 
    font-size: 24px; 
} 

Tôi nhận được phiên bản chữ đậm của phông chữ. Tôi không thể tìm ra bất kỳ sự kết hợp nào sẽ mang lại cho tôi bất cứ điều gì khác hơn là thường xuyên hoặc Bold. Tôi đã thử đặt trọng lượng trực tiếp vào font-family (ví dụ: font-family: Source Sans Pro Light;), tôi đã thử sử dụng Light, Semibold, v.v. trong font-weight: specifier, tôi cũng đã thử sử dụng các số tương đương (Qt documentation cho biết chúng được coi là các giá trị từ 0 đến 99 thay vì đánh số CSS x00). Không có gì hiệu quả.

EDIT: Tôi vừa thử viết một chương trình nhanh để phụ trong các số từ 0 đến 999 cho thuộc tính trọng số phông chữ. Thật thú vị, tôi đã có thể nhận được "ánh sáng" nếu tôi đặt bất cứ thứ gì giữa 0 và 399. 400 đến 407 đã cho tôi "Thường xuyên", 408 đến 599 đã cho tôi ánh sáng một lần nữa, sau đó 600 hoặc cao hơn đã cho tôi semibold. Điều này có vẻ thực sự kỳ lạ, bởi vì bây giờ sử dụng số tôi có thể ít nhất là truy cập "ánh sáng" và "bán kết". Tôi vẫn không thể tìm thấy bất kỳ cách nào để có được trọng lượng "Extra Light" hoặc "Black".

Câu hỏi duy nhất của tôi là, điều này chỉ là không thể nếu không sử dụng mã tùy chỉnh? Tôi có thể lấy font chính xác tôi muốn bằng cách tạo ra một QFont như sau:

QFontDatabase db; 
QFont = db.font("Source Sans Pro", "Semibold", 24); 

Nhưng rõ ràng điều này có nghĩa là tôi không thể sử dụng stylesheets (hoặc tệ hơn, tôi phải viết phân tích cú pháp stylesheet riêng tôi hay quấn một Qt hiện hoặc một cái gì đó). Điều này có vẻ hơi khó tin rằng điều này là không thể với bảng định kiểu. Các phông chữ đa trọng lượng có kém hỗ trợ trong Qt không?

Trả lời

7

Cuối cùng được thu thập thông qua nguồn Qt và tôi nghĩ rằng tôi đã tìm thấy câu trả lời. Trong ngắn hạn, không, nó không thể. Hoặc ít nhất, nó phụ thuộc vào phông chữ, và thậm chí cả nền tảng (tôi đang làm việc trong Mac OS X với Qt 4.8.4).

QFont có cả chữ "trọng số" (được đặt bởi QFont :: setWeight()), là một số từ 0-99. Họ cũng có một "Style Name" được thiết lập bởi QFont :: setStyleName(). Bạn có thể đặt trọng số bằng cách sử dụng trọng lượng phông chữ trong biểu định kiểu, nhưng bạn không thể đặt styleName (Tôi đã xác nhận bằng cách xem nguồn của qcssparser). Có một tham số kiểu phông chữ, nhưng chỉ có thể được sử dụng để đặt bình thường, nghiêng hoặc xiên ... tức là, nó gọi là QFont :: setStyle(), không phải setStyleName().

Ít nhất trong trường hợp của tôi, cách duy nhất để truy cập trọng số nhất định của phông chữ là theo "Tên kiểu", cho nó một chuỗi cụ thể như "Thêm ánh sáng". Rõ ràng, Qt đang thực hiện một số phép thuật bên trong (có lẽ là nền tảng) để chuyển đổi giữa số lượng 0-99 và tên kiểu, và nó dường như không làm tốt. Tôi đã quá bogged xuống trong các nguồn Qt để thực sự tìm ra chính xác nơi lập bản đồ này đã xảy ra.

Để thêm vào sự kỳ quặc, QFont :: setWeight lấy một số từ 0-99 (như tôi đã nêu), nhưng thuộc tính trọng số phông trong biểu định kiểu mất một số từ 100 đến 800, sau đó chia cho 8 và gọi setWeight. Tôi cho rằng đây là kết hợp chặt chẽ hơn với CSS weight numbering system.

Bây giờ tôi chỉ cần tìm ra loại hack tôi sẽ làm gì để giải quyết vấn đề này.Tôi có thể dễ dàng thêm một cái gì đó như font-style-name vào qcssparser, nhưng tôi không muốn vá các nguồn Qt, vì vậy tôi có thể sẽ làm điều gì đó ở cấp ứng dụng.

+4

Hóa ra đây chỉ là vấn đề trong Mac OS X. Tôi có lẽ nên gửi báo cáo lỗi Qt. Nếu bạn chạy chính xác cùng một mã để chọn chính xác cùng một phông chữ TrueType trên Mac và Linux (cả hai sử dụng Qt 4.8.4), bạn sẽ có được kết quả khác nhau. Phiên bản Linux/X11 thực hiện những gì bạn mong đợi. – ScottG

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