2013-05-05 49 views
5

Tôi đã có một Nút nhấn trong chương trình của mình sau khi nhấp vào nút đó để thực hiện nhiều phép tính. Tôi muốn vô hiệu hóa nó trong thời gian này khi tính toán được thực hiện để không cho phép chương trình bị treo nhưng phương pháp của tôi không hoạt động.QT - Cách vô hiệu hóa Nút ấn

void MainWindow::on_pushButton_clicked() 
{  
ui->pushButton->setEnabled(false); 

for() { CALCULATION } 

ui->pushButton->setEnabled(true); 
} 

Chức năng setEnabled (false); sẽ không làm mất nút bấm và tôi có thể bấm vào nó bao nhiêu lần tôi muốn.

+0

setEnabled() phải hoạt động – Blood

+1

Đã kiểm tra. Điều này làm việc cho tôi. – gongzhitaao

Trả lời

4

Sự cố với mã này nằm trong thiết kế của vòng lặp tin nhắn. Trong khi xử lý một thông báo (trong trường hợp này là trình xử lý nhấn nút), không có thông báo nào khác được xử lý, bao gồm cả những thông điệp được sử dụng để phản ánh các thay đổi đối với trạng thái của chúng. Bây giờ, trong chức năng của bạn, bạn vô hiệu hoá nút và kích hoạt nó một lần nữa trước khi nó có thể được cập nhật.

Lưu ý rằng thực hiện tính toán dài là trình xử lý tin nhắn UI là một ý tưởng tồi, vì nó khóa toàn bộ giao diện người dùng. Thay vào đó, hãy sử dụng một mô hình không đồng bộ như một chuỗi công nhân hoặc thực hiện phép tính trong các bước bằng bộ hẹn giờ. Sau đó, bạn cũng có thể thấy nút bị vô hiệu hóa.

7

Tính toán của bạn được thực hiện trong chuỗi chính, do đó, ui của bạn bị chặn cho đến khi tính toán hoàn tất. Ui sẽ không được làm mới trong quá trình tính toán và bạn đặt lại nút ở cuối tính toán. Vì vậy, không có thay đổi trong ui trong quá trình tính toán.

+0

Làm cách nào để buộc cập nhật trước khi bắt đầu tính toán? –

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