2012-02-29 33 views
12

Tôi đang tạo một chương trình nhỏ bằng Qt với thanh menu (menuBar) bằng C++ và tôi muốn biết cách làm xám (ví dụ: vô hiệu hóa) một mục của menu khi một biến nhất định được kích hoạt. Có thể không?Cách tô xám mục menu trong Qt

Trả lời

14

Nếu bạn biết một chỉ số của QAction tương ứng:

QMenu::actions.at(i).setEnabled(false); 

T.B. Vui lòng được nhắc bên dưới, setEnabled(bool)setDisabled(bool) là các vị trí (như vậy là toggle()), vì vậy chúng có thể được kết nối với tín hiệu cho thấy cần phải thay đổi tính sẵn có của hành động.

+2

Bạn có thể thêm vào câu trả lời của bạn rằng 'setEnabled (bool) 'và' setDisabled (bool) 'là các khe (như vậy là' toggle() '), do đó chúng có thể được kết nối với một tín hiệu cho thấy cần phải thay đổi tính khả dụng của hành động. –

+0

Thanx @LucTouraille! –

+2

Nếu biến thay đổi thường xuyên (thường xuyên hơn trình đơn được hiển thị), nó có thể là khôn ngoan để chuyển đổi nó chỉ để đáp ứng với 'tín hiệu: QMenu :: aboutToShow()'; không có điểm trong việc thay đổi một cái gì đó đó là vô hình anyway. – MSalters

5

Tìm kiếm chỉ mục của hành động không nhất thiết phải thuận tiện. Nếu bạn đã xây dựng giao diện với trình soạn thảo biểu mẫu của QtCreator thì bạn sẽ có một hành động cho từng mục menu. Tên của họ dựa trên văn bản mà bạn đầu tiên đưa ra cho các hành động. Ví dụ: nếu bạn tương tác nhập một mục trình đơn có tiêu đề Foo Bar thì một hành động có tên actionFoo_Bar được tạo cho bạn. Chỉ cần gõ ui-> action trong trình soạn thảo mã và xem những gì "hoàn thành tên" QtCreator sẽ đề xuất.

Trong trường hợp này tôi sẽ xem xét một cuộc gọi như thế này:

ui->actionFoo_Bar.setEnabled(false); 

Bạn thậm chí có thể làm cho mục trình đơn biến mất với

ui->actionFoo_Bar.setVisible(false); 
Các vấn đề liên quan