2010-10-14 47 views
5

API Win32 có chức năng PostMessage gửi một thông báo đến cuối hàng đợi tin nhắn GUI được xử lý sau đó từ luồng GUI, trái ngược với SendMessage gửi và xử lý thư đồng bộ với chuỗi cuộc gọi.Tìm kiếm chức năng PostMessage trong Qt

Có giải pháp Qt nào cho chức năng PostMessage không? Một đồng nghiệp đã gợi ý rằng việc triển khai máy chủ/socket của Qt có thể cung cấp cho nó; đó là một cách tiếp cận hợp lý?

Trả lời

8
+0

Tôi chấp nhận câu trả lời này vì nó mô phỏng chặt chẽ 'PostMessage', đó là những gì tôi hỏi. Tuy nhiên, tôi quyết định tôi sẽ sử dụng giải pháp của jkerian (QTimer :: singleShot) vì nó phù hợp hơn với tín hiệu/khe của Qt. Cảm ơn cả hai! –

7

Nhìn vào QTimer::singleShot. Trong trường hợp của bạn, bạn muốn sử dụng nó với giá trị msec của 0, sẽ cung cấp chức năng tương tự. (Điều này được sử dụng thường xuyên để triển khai thực hiện quá trình intialization, cho đến khi vòng lặp sự kiện GUI đang chạy)

6

Tương tự như các giải pháp QTimer, nhưng với lợi thế mà bạn có thể vượt qua đối số, là cách QMetaObject :: invokeMethod:

QString SomeClass::compute(const QString&, int, double); 
... 
QMetaObject::invokeMethod(obj, "compute", Qt::QueuedConnection, 
         Q_RETURN_ARG(QString, retVal), 
         Q_ARG(QString, "sqrt"), 
         Q_ARG(int, 42), 
         Q_ARG(double, 9.7)); 

Các QueuedConnection hàng đợi nó trong vòng lặp sự kiện, DirectConnection sẽ thực hiện nó ngay lập tức.

4

Tất cả các câu trả lời cho đến nay đều tốt, tôi chỉ muốn thêm rằng bạn cũng có thể sử dụng connect() với Qt::QueuedConnection cho loại kết nối.

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