2016-02-04 13 views
10

Bất kỳ cách nào tốt để tạo hộp kiểm chỉ đọc, nhưng cũng không chuyển sang màu xám (khó nhìn thấy).Cách làm cho QCheckBox chỉ đọc, nhưng không chuyển sang màu xám

  1. Tôi đã sử dụng setEnabled(bool) mà làm việc, nhưng các hộp kiểm sau đó là chuyển sang màu xám và hầu như không thể đọc được
  2. tôi có thể phản ứng trên một tín hiệu chuyển đổi và thiết lập lại nhà nước. Nhưng tôi sẽ cần một loại cờ để xác định xem hộp là chỉ đọc và sau đó đặt lại trạng thái kiểm tra, có nghĩa là tôi cần tạo lớp CheckBox của riêng mình.
  3. setCheckable không hoạt động, hoặc, nó không cho phép tôi để thiết lập một nhà nước kiểm tra tại tất cả:

    cb = this->ui->cb_RealWorld->isCheckable(); 
        this->ui->cb_RealWorld->setCheckable(true); 
        this->ui->cb_RealWorld->setChecked(someValue); 
        this->ui->cb_RealWorld->setCheckable(cb); 
    

Vì vậy, điều tốt nhất mà tôi có là sử dụng bật/tắt và chấp nhận chuyển sang màu xám Phong cách.

------- Sửa -------

Tiếp theo stylesheet examples Tôi đã hy vọng tôi có thể thiết lập các phong cách của một hộp kiểm khuyết tật như một trong một kích hoạt. Thất bại cho đến nay để làm như vậy. Cụ thể hơn: Thay đổi biểu tượng như trong examples không hoạt động đối với tôi, có thể do tôi đang sử dụng Windows và các biểu tượng không có sẵn theo đường dẫn như trong ví dụ.


PS: liên quan, nhưng không có câu trả lời ở đây

Disabling a QCheckbox in a tricky way
Qt - How to disable QCheckBox while retaining checked state?

+0

Bạn có ý nghĩa gì với 'chỉ đọc'? Một hộp kiểm không ghi lại thông tin mà chỉ là trạng thái của một cái gì đó. – Poriferous

+0

Chỉ đọc: Người dùng không thể thay đổi trạng thái hộp kiểm, như trong QLineEdit, nơi việc sử dụng không thể thay đổi văn bản chỉ đọc –

+1

Btw, tôi không hiểu ý kiến. Nhưng đừng bận tâm. –

Trả lời

10

Tiếp nối bên dưới mã của tôi:

this->ui->cb_RealWorld->setAttribute(Qt::WA_TransparentForMouseEvents); 
this->ui->cb_RealWorld->setFocusPolicy(Qt::NoFocus); 
+0

Cảm ơn, chỉ để thêm vào điều này. Bạn để hộp kiểm là "đã bật" và "có thể kiểm tra". Điều này chỉ làm cho nó để kiểm soát bỏ qua các sự kiện chuột và không thể có tập trung. – gimp3695

5

Đây là giải pháp Devopia như là một chức năng:

void SetReadOnly(QCheckBox* checkBox, bool readOnly) 
{ 
    checkBox->setAttribute(Qt::WA_TransparentForMouseEvents, readOnly); 
    checkBox->setFocusPolicy(readOnly ? Qt::NoFocus : Qt::StrongFocus); 
} 
Các vấn đề liên quan