2010-01-13 22 views

Trả lời

11

Dường như đường viền chấm xung quanh ô được chọn mà bạn đang cố ẩn là hình chữ nhật lấy nét. Bất kỳ ô đã cho nào cũng có thể tập trung và không được chọn cùng một lúc và ngược lại. Nếu bạn muốn đường viền này không được vẽ, hãy sử dụng một mục đại biểu. Ở đó bạn có thể xóa kiểu dáng State_HasFocus khỏi trạng thái của mục trước khi vẽ nó. Xin vui lòng, xem một ví dụ dưới đây về cách để làm điều này, đó là C++, cho tôi biết nếu bạn có vấn đề chuyển đổi nó để trăn

// custom item delegate class 
class NoFocusDelegate : public QStyledItemDelegate 
{ 
protected: 
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; 
}; 

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItem itemOption(option); 
    if (itemOption.state & QStyle::State_HasFocus) 
     itemOption.state = itemOption.state^QStyle::State_HasFocus; 
    QStyledItemDelegate::paint(painter, itemOption, index); 
} 
... 
// set the item delegate to your table widget 
ui->tableView->setItemDelegate(new NoFocusDelegate()); 

hy vọng điều này giúp, coi

+2

Cảm ơn bạn đã trả lời .. Tôi đã đạt được điều tương tự với setFocusPolicy (QtCore.Qt.NoFocus) vì tôi đã sử dụng qtablewidget .. Tôi không quen thuộc với các đại biểu mặc dù .. Tôi không thể upvote câu trả lời này. Nó nói rằng các điểm danh tiếng phải lớn hơn 15 .. – Jeba

12

Tôi thích làm:

ui->tableWidget->setFocusPolicy(Qt::NoFocus); 

Bạn cũng có thể thay đổi chính sách lấy nét bằng cách sử dụng tab thiết kế.

+1

.. nhưng bạn mất tính năng điều hướng bằng bàn phím bằng cách làm như vậy – swdev

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