QTableView 去除Item選中的虛線框

  (1)實現如下一個類

  #include "NoFocusDelegate.h"

  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);
  }

  (2)表格構造中添加如下代碼

   table_widget->setItemDelegate(new NoFocusDelegate());


QWidget::setFocusPolicy(); 默認的屬性是Qt::NoFocus,而不是Qt::ClickFocus,但很多情況下恰恰可能需要Qt::ClickFocus.

見Qt文檔:

focusPolicy : Qt::FocusPolicy

This property holds the way the widget accepts keyboard focus.

The policy is Qt::TabFocus if the widget accepts keyboard focus by tabbing, Qt::ClickFocus if the widget accepts focus by clicking, Qt::StrongFocus if it accepts both, and Qt::NoFocus (the default) if it does not accept focus at all.

You must enable keyboard focus for a widget if it processes keyboard events. This is normally done from the widget's constructor. For instance, the QLineEdit constructor calls setFocusPolicy(Qt::StrongFocus).

If the widget has a focus proxy, then the focus policy will be propagated to it.

Access functions:


Qt::FocusPolicy

focusPolicy() const

void

setFocusPolicy(Qt::FocusPolicy policy)

See also focusInEvent(), focusOutEvent(), keyPressEvent(), keyReleaseEvent(), and enabled.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章