Tôi đã làm việc này trong nhiều giờ và không thể tìm ra và cũng không thể tìm thấy bất kỳ trợ giúp trực tuyến nào hoạt động. Về cơ bản ý chính của những gì tôi đang cố gắng thực hiện là có một GUI Qt với một nút và một QTextBrowser. Khi tôi nhấn nút, tôi muốn nó gửi một tin nhắn và sau đó tiếp tục in tin nhắn này sau mỗi 10 giây.Qt: Làm thế nào để sử dụng QTimer để in một tin nhắn đến một QTextBrowser mỗi 10 giây?
Tôi đã tìm tôi sẽ sử dụng QTimer vì có ý nghĩa khi có bộ đếm thời gian để gửi lại tin nhắn mỗi 10 giây. Khi tôi ban đầu thực hiện điều này vào buttonClicked() SLOT của tôi nó gây ra chương trình đóng băng. Tôi đã xem trực tuyến một giải pháp và tìm thấy QApplication :: processEvents().
Vì vậy, về cơ bản trong chức năng của tôi, tôi có một cái gì đó như thế này:
while(1)
{
QTimer *timer;
connect(...) //omitted parameters for this example
timer.start(10000);
ui->diplay->append("Message");
while(timer.isActive())
{
QApplication::processEvents()
}
}
tôi figured nó sẽ thoát ra khỏi timer.isActive() trong khi vòng lặp nhưng nó sẽ không chỉ đơn giản là nó vẫn ở đó.
Vì vậy, tôi đã tìm ra đây là vấn đề về luồng. Vì vậy, tôi đã tìm ra cách sử dụng QThreads nhưng tôi vẫn không thể làm cho nó hoạt động. Về cơ bản khi tôi tạo một thread với một bộ đếm thời gian trên nó và các thread nói với bộ đếm thời gian để bắt đầu, chương trình đóng và giao diện điều khiển nói "Chương trình đã bất ngờ hoàn thành".
Cần phải có một cách dễ dàng để làm điều này nhưng hồ sơ theo dõi của tôi với Qt luôn rằng thứ
UPDATE: Tôi bây giờ sử dụng timer-> singleShot (hẹn giờ, SIGNAL (timeout()), này, SLOT (cập nhật())) ; Nhưng tôi cần chương trình in tin nhắn và đợi 10 giây trước khi nó tiếp tục xử lý. Tôi có nó trong một vòng lặp while nên nó liên tục làm singleShots thay vì cứ 10 giây một lần. Bất kỳ đề xuất? Cảm ơn! –
Có phải gần như tất cả mọi người đã bỏ lỡ một thực tế rằng điều này đang xảy ra trong một vòng lặp (1)? Không có gì lạ khi chương trình bị đóng băng. –