2013-07-31 17 views
11

Tôi đang sử dụng Qt5.1 và tôi đang cố tạo QApplication không có màn hình. Tôi cần phải vẽ văn bản với QPainter, vì vậy tôi cần phải sử dụng QApplication (hoặc QGuiApplication), nếu không tôi sẽ nhận được một segfault.Qt 5.1 QApplication Without Display - QXcbConnection: Không thể kết nối để hiển thị

Ứng dụng này làm việc tốt trong Qt4.8, nhưng thất bại trong Qt5.1 trên một phiên bản không đầu của Ubuntu với các lỗi:

"QXcbConnection: Could not connect to display".

Trong Qt 4.8, tôi đã có thể sử dụng các nhà xây dựng sau với GUIenabled = false để tạo ra một QApplication mà không đòi hỏi một màn hình:

QApplication::QApplication (int & argc, char ** argv, bool GUIenabled)

Trong Qt5.1, các nhà xây dựng cho QApplication không còn có cờ GUIenabled.

Tôi đã quét mã nguồn một thời gian ngắn, và dường như có một lá cờ trong hàm tạo QApplication, nhưng nó không có giấy tờ tùy theo các tùy chọn có thể được sử dụng trong cờ đó. Sử dụng "false" không hoạt động.

Làm cách nào để tạo QApplication mà không có màn hình? Có một phương pháp thay thế để nói QApplication GUIenabled = false? Ngoài ra, tôi có thể tạo một QCoreApplication mà sẽ không segfault khi vẽ văn bản với QPainter trên một QImage?

+0

Tôi đã gặp sự cố này sau khi xóa (các) tệp trong/tmp. – Geremia

Trả lời

15

Có, đó là một điều Qt 3 (?) Đã biến mất trong Qt 5. Hãy thử chạy ứng dụng của bạn với tùy chọn dòng lệnh -platform offscreen thay thế.

Lưu ý rằng bạn không cần QApplication hoặc liên kết đến QtWidgets chỉ dựa vào một QImage, sử dụng QGuiApplication (và liên kết đến QtGui) là đủ.

+2

Với tùy chọn dòng lệnh 'QGuiApplication' và' -platform offscreen', tôi gặp lỗi: 'Không thể tải plugin nền tảng" tắt màn hình ". Các nền tảng có sẵn là: xcb' Tôi đã biên dịch Qt từ nguồn tĩnh. Đó có phải là vấn đề không? – Vincent

+0

Tôi quản lý để có được '-platform offscreen' để làm việc, nhưng sau đó tôi nhận được lỗi' QFontDatabase: Không thể tìm thấy thư mục font '/ ***/lib/fonts' - là Qt được cài đặt đúng không? Tôi đã thử '-platform minimal', nhưng có cùng lỗi. – Vincent

+0

Điều đó nghe có vẻ giống như một vấn đề trong bản dựng của bạn hoặc một lỗi trong Qt. Thử đặt biến 'qT_QPA_FONTDIR' env thành đường dẫn bên phải của thư mục đó. Tôi đoán rằng plugin 'offscreen' không hoàn toàn sử dụng fontconfig ... – peppe

1

Nếu bạn muốn tạo ứng dụng không có GUI, bạn cần sử dụng QCoreApplication thay vì QApplication.

+0

Tôi không thể sử dụng QCoreApplication vì tôi cần vẽ văn bản với QPainter. Nếu tôi sử dụng QCoreApplication, tôi nhận được một lỗi phân đoạn khi tôi cố gắng để vẽ văn bản trong một QImage, vì vậy tôi cần phải sử dụng QApplication hoặc QGuiApplication. – Vincent

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