2015-04-17 12 views
6

Tôi có một số QTabWidget được gọi là tabWidget. Nó có ba tab: "Cơ bản", "Nâng cao" và "Cấu trúc hiện tại". Các tab được hiển thị trong tiện ích theo thứ tự đó.Làm cách nào để vô hiệu hóa một tab trong QTabWidget?

Tôi muốn tắt tab "Nâng cao" bất cứ khi nào Boolean result là sai. Tôi nghĩ rằng nó sẽ là đơn giản như mã này:

bool result = false; 
if (result == false) 
{ 
    tabWidget->widget(1)->setDisabled(true); 
} 

Thật không may, mã này sẽ không tắt tab, nó vẫn được kích hoạt ngay cả khi tôi kiểm tra xem nó:

tabWidget->tabBar()->isTabEnabled(1); // This returns true 

Tại sao không phải là tab bị vô hiệu hóa? Có cách nào khác để làm điều đó không?

Tôi đang sử dụng Qt 5.4.0.

Trả lời

17

Bạn có thể bật/tắt tab riêng lẻ trong một QTabWidget bằng cách sử dụng chức năng thành viên setTabEnabled(int index, bool enable).

Dựa trên đoạn mã của bạn, nó sẽ trông như thế này:

bool result = false; 
if (result == false) 
{ 
    tabWidget->setTabEnabled(1, false); 
} 
+2

Hoặc ngắn gọn hơn: 'tabWidget-> setTabEnabled (1, result);' – TonyK

1

Bạn không thể, không phải theo cách này.

Bạn phải lặp qua tất cả các trẻ em trong Trang và tắt chúng.

Something như thế này:

QList<QWidget*> list = parentWidget->findChildren<QWidget*>() ; 
foreach(QWidget* w, list) { 
    w->setEnabled(false) ; 
} 
+0

Đây là những gì tôi cần. Nó ngăn chặn sự thay đổi của nội dung tab, nhưng vẫn giữ được khả năng hiển thị của tab. –

0

Bạn có thể vô hiệu hóa các bố trí của tab.

bool result = false; 
if (result == false) 
{ 
    tabWidget->widget(1)->layout()->setDisabled(true); 
} 
Các vấn đề liên quan