Tôi có một phương pháp được gọi từ cả hai số QThreads
và chuỗi chính. phương pháp này đôi khi có thể mất một thời gian dài để làm tính toán của nó trong một vòng lặp vì vậy tôi đặt QCoreApplication::processEvents()
và điều này ngăn cản GUI từ đóng băng. Tại một số điểm tôi đã thay đổi QCoreApplication::processEvents()
cho QApplication::processEvents()
nhưng điều đó khiến GUI bị đóng băng (im khá chắc chắn thats những gì đã được fereezing nó vì kể từ khi tôi đặt QCoreApplication::processEvents()
lại nó không đông lạnh một lần nữa) Tôi có quyền nghĩ rằng gọi QApplication::processEvents()
từ cả hai chủ đề chính và QThreads có thể đóng băng GUI?Tôi có nên sử dụng QCoreApplication :: processEvents() hoặc QApplication :: processEvents()?
Trả lời
Không, processEvent() sẽ chỉ được gọi khi bạn có sự kiện đang chờ xử lý thực sự. Bạn có thể thấy điều này hữu ích: How to make Qt work when main thread is busy?
Bạn sẽ tốt hơn khi di chuyển quá trình chạy dài ra khỏi chuỗi chính, do đó bạn không cần phải gọi processEvents()
. Trong quá trình chạy dài, bạn có thể phát ra bất kỳ tín hiệu nào bạn cần để gui có đủ thông tin để thực hiện cập nhật, v.v. processEvents
, tuy nhiên, là thường là một cái nạng cho thiết kế kém.
Tôi sẽ thử QtConcurrent :: run. Tôi có thể thực hiện các thao tác GUI trong đó hay tôi vẫn phát ra các tín hiệu như trường hợp của một hoạt động GuQ QThread –
chỉ có thể được thực hiện trong chuỗi chính. QtConcurrent là một ý tưởng hay, đặc biệt nếu bạn có thể chia công việc của bạn để sử dụng nhiều lõi. –
- 1. Tôi có thể sử dụng Clojure REPL cùng với Qt Jambi bằng cách nào?
- 2. Tôi nên sử dụng IEnumerable hoặc IList?
- 3. Tôi có nên sử dụng bí danh hoặc alias_method không?
- 4. Tôi có nên sử dụng em hoặc px không?
- 5. Tôi có nên sử dụng một LINQ DataContext hoặc nhiều?
- 6. Tôi có nên sử dụng `import os.path` hoặc` import os`?
- 7. Tôi có nên sử dụng DataInputStream hoặc BufferedInputStream
- 8. Numpy: Tôi có nên sử dụng newaxis hoặc Không?
- 9. Tôi có nên sử dụng đôi hoặc nổi không?
- 10. tôi có nên sử dụng urandom hoặc openssl_random_pseudo_bytes không?
- 11. Tôi có nên sử dụng @EJB hoặc @Inject
- 12. Tôi có nên sử dụng byte hoặc int không?
- 13. Tôi có nên sử dụng AppDomain.CurrentDomain.BaseDirectory hoặc System.Environment.CurrentDirectory không?
- 14. Tôi có nên sử dụng nav hoặc ul
- 15. Tôi có nên sử dụng Phobos hoặc Tango không?
- 16. Tôi có nên sử dụng int hoặc UInt16 không?
- 17. Tôi có nên sử dụng eval() hoặc call_user_func() không?
- 18. Tôi có nên sử dụng ipairs hoặc vòng lặp cho
- 19. Tôi muốn sử dụng NumPy/SciPy. Tôi có nên sử dụng Python 2 hoặc 3 không?
- 20. Tôi có nhiệm vụ Rails: tôi có nên sử dụng tập lệnh/runner hoặc cào không?
- 21. Tôi có nên sử dụng jQuery.each() không?
- 22. Tôi có nên sử dụng ProGuard không?
- 23. Tôi có nên sử dụng ScriptSharp
- 24. Tôi có nên sử dụng HttpRuntime.Cache không?
- 25. Tôi có nên luôn sử dụng dịch vụ hoặc tôi có thể sử dụng kho trực tiếp không?
- 26. Khi nào tôi nên sử dụng Bảng chỉ mục của Oracle? Hoặc, khi tôi không nên?
- 27. enum hoặc xác định, cái nào tôi nên sử dụng?
- 28. Tôi nên sử dụng cái nào? decimal.Add() hoặc "+"
- 29. django - khi nào tôi nên sử dụng media_root hoặc static_root?
- 30. Một destructor - tôi nên sử dụng xóa hoặc xóa []?
Tôi sẽ thử QtConcurrent :: run. Tôi có thể thực hiện các hoạt động GUI trong đó hay tôi vẫn phát ra các tín hiệu như trường hợp của chuông báo QKet –
@yan: Bạn nên phát ra tín hiệu vì nó sẽ nằm trong một luồng riêng biệt. Hoặc bạn có thể sử dụng công cụ QFuture để trợ giúp, điều này sẽ làm rất nhiều việc tạo và phát ra tín hiệu cho bạn. –