2015-01-15 15 views
6

Tôi đã tạo thư viện mạng dựa trên Qt để sử dụng với các ứng dụng không chạy vòng lặp sự kiện Qt và không nhất thiết phải là các ứng dụng Qt. Điều này có thể được thực hiện bằng cách tạo một cá thể QCoreApplication trong một chuỗi theo câu trả lời từ Is it possible to create local event loops without calling QApplication::exec()?Cảnh báo ngăn chặn "QApplication không được tạo trong chủ đề chính()"

Điều này làm việc hoàn hảo, nhưng nó làm cho Qt khó chịu (tôi đoán là tôi sẽ cố gắng thao tác GUI bên ngoài chủ đề chính sẽ không hoạt động, nhưng tôi không), và vì vậy nó in một cảnh báo: WARNING: QApplication was not created in main() thread.

Tôi muốn chặn cảnh báo đó nếu không sẽ được in trên bảng điều khiển X11 và rất có thể khiến người dùng của tôi nhập một loạt các thiếu sót không cần thiết. Tuy nhiên, tôi muốn chỉ vô hiệu hóa lỗi NÀY, vì tôi sử dụng qDebug cho một số mục đích hợp pháp và muốn xem các cảnh báo trong tương lai. Có cách nào để làm điều này, giống như một số loại Qt #pragma?

EDIT:

Một câu hỏi tương tự đã được hỏi trước đây: Qt console application "WARNING: QApplication was not created in the main() thread", nhưng câu trả lời là về cơ bản chỉ là một xét mã mà không bất kỳ ý tưởng có ý nghĩa để ngăn chặn cảnh báo.

+1

Tôi nghĩ rằng vấn đề phát sinh do bạn đang chạm vào API Qt (trong chuỗi chính, hoặc chỉ trong * một số * chuỗi) trước khi tạo QApplication. Bạn không thể làm điều đó (modulo công cụ đó là nghĩa vụ phải được thực hiện trước khi QApplication). Đặc biệt, bạn đang tạo QObjects. – peppe

+0

hmm, tạo ra một vấn đề về trứng gà thú vị, bởi vì lớp tôi sử dụng để tạo ra chuỗi 'QCoreApplication' chính là một' QObject' vì nó cần sử dụng tín hiệu để giao tiếp với các socket trong các chuỗi con. –

+1

Vâng, chỉ cần chia nó? Giữ lớp đó với logic và tạo một lớp khác để tạo ra QCoreApplication và một đối tượng của lớp của bạn. – peppe

Trả lời

8

Sự cố phát sinh do bạn đang chạm vào API Qt (trong chuỗi chính hoặc chỉ trong một số chủ đề) trước khi tạo QApplication. Bạn không thể làm điều đó. Cụ thể, bạn đang tạo QObject thuộc một số loại, được đặt ở đâu đó trong Qt mà Qt chính nó nên xem là chuỗi main.

Các API Qt duy nhất bạn được phép sử dụng trước khi tạo QApplication là các API được ghi rõ ràng để an toàn trong trường hợp đó.

Vì vậy: đừng làm vậy. Tạo QCoreỨng dụng làm điều đầu tiên, sau đó bạn được tự do di chuyển.

+0

Tái cấu trúc mã của tôi trong biểu mẫu này cũng giải quyết được rất nhiều vấn đề lạ và liên tục mà tôi có với các kết nối giữa các đối tượng trong các chuỗi khác nhau. Tôi chắc chắn sẽ không bỏ qua cảnh báo này nữa. –

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