2015-05-07 14 views
6

Tôi muốn thêm phông chữ tùy chỉnh vào ứng dụng của mình và tôi đã thêm vào tệp tài nguyên của mình.Cách nhúng phông chữ tùy chỉnh trong ứng dụng của tôi

Và mã của tôi như sau:

int id = QFontDatabase::addApplicationFont(":/fonts/ae_AlMateen.ttf"); 
QMessageBox::information(this,"Message",QString::number(id)); 

Ngoài ra nội dung của .qrc tập tin.

<RCC> 
    <qresource prefix="/fonts"> 
     <file alias="ae_AlMateen">ae_AlMateen.ttf</file> 
    </qresource> 
</RCC> 

Nhưng vấn đề là các addApplicationFont luôn trả -1.

Lưu ý rằng khi thay đổi :/fonts/ae_AlMateen.ttf thành đường dẫn trực tiếp cũ: C://ae_AlMateen.ttf hoạt động tốt.

Tôi muốn tệp phông chữ được tích hợp với tệp thi hành ứng dụng của mình, để làm cho ứng dụng không cần đính kèm tệp phông chữ với tệp đó.

+0

Mã đúng và hoạt động. Lỗi không nằm trong phần bạn đang hiển thị cho chúng tôi. Bạn có thể tạo một QDir (":/fonts") và xem whats trong thư mục ảo này. Hoặc ttf của bạn bị hỏng. – Greenflow

+0

@Greenflow: Cảm ơn, về phần này "Hoặc ttf của bạn bị hỏng". Tôi đã được cập nhật một phần trong câu hỏi của mình. Đối với 'QDir (":/fonts ")' Tôi không hiểu tôi phải làm gì với nó. –

+1

":/fonts" là một hệ thống tệp ảo. Bạn có thể tạo một đối tượng QDir với nó giống như với bất kỳ thư mục nào khác. Sau đó, bạn có thể xem những gì chương trình của bạn thực sự thấy trong thư mục này, ví dụ: với QDir :: entryList. Nhưng như tôi thấy nó bây giờ, xây dựng của bạn không tìm thấy * .ttf của bạn. Trừ khi cây nguồn của bạn trực tiếp trong c: – Greenflow

Trả lời

0

Ahhh ... bây giờ, sau khi bạn thêm .qrc, tôi hiểu. Dễ dàng giải thích:

<file alias="ae_AlMateen">ae_AlMateen.ttf</file> 

Bạn đã thêm bí danh trong tệp .qrc của mình. Nếu bạn xóa bí danh = "ae_AlMateen", nó sẽ hoạt động như tất cả chúng ta mong đợi ... với phần mở rộng .ttf.

1

Nếu bạn đang sử dụng qml, bạn có thể tải phông chữ trong tệp qml in this way. Tôi khuyến khích điều đó.

Và nếu bạn vẫn muốn tải phông chữ từ tệp cpp, vui lòng đọc this article, nó có thể giúp bạn.

Chỉnh sửa: Mã sau có thể hoạt động trên Qt5.4.1 trên OSX10.10. (Phông chữ được nhúng vào tập tin thực thi)

int id = QFontDatabase::addApplicationFont(":/fonts/fontawesome-webfont.ttf"); 
QMessageBox::information(NULL,"Message",QString::number(id)); // this shows id is 0. 

QFont font; 
font.setFamily("FontAwesome"); 
font.setPointSize(30); 
ui->commandLinkButton->setFont(font); 
ui->commandLinkButton->setText("\uf021"); // this shows the Refresh icon. 

Edit2: tôi đã thực hiện thử nghiệm khác trên Win7 với Qt5.4.1 (msvc2013 64bit). Phông chữ được nhúng trong tệp exe. Mọi thứ đều hoạt động tốt.

+0

Cảm ơn, tôi không sử dụng 'Qml', và tôi đã thấy bài viết đó trước đây và nó không giúp tôi. –

+0

Mã của bạn có thể hoạt động trên Qt5.4.1 trên OSX 10.10. – douyw

+0

Cảm ơn, nhưng mã đó hoạt động nếu ứng dụng hoạt động trong cùng một máy có tệp phông chữ. nhưng tôi muốn tệp phông chữ được tích hợp với tệp thi hành ứng dụng của tôi. –

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