QTableView - выбор строки, фокус на полях

Я хотел бы выбрать все строки в QTableView и только строки. Пользователь не должен знать, что есть ячейки. Я могу установить правильный SelectionMode, но все же:

  • у каждой ячейки есть закругленный угол, когда она выбрана
  • перемещение мыши по QTableView перемещает «фокус» и выделяет ячейку под курсором

Как я могу избежать этой проблемы?


person Dejwi    schedule 20.07.2012    source источник


Ответы (3)


Пожалуйста, попробуйте метод QTableView

setSelectionBehavior(QAbstractItemView::SelectRows);
person liuyi.luo    schedule 21.07.2012
comment
установка поведения на SelectRows и Mode на SingleSelection заканчивается тем, что я могу выбирать строки, но все еще перемещая мышь над QTableView, меняет цвет ячеек под ним. И все же каждая ячейка в выбранной строке имеет закругленные углы. - person Dejwi; 21.07.2012
comment
Установка как поведения, так и режима, подобного этому, временно позволила мне вызвать selectRow (пока пользователь нажал Shift), не выбирая несколько строк, отлично. - person OregonGhost; 21.03.2013


У меня такая же проблема.

В итоге я использовал QTreeView, который поддерживает несколько столбцов (например, таблицу). Поведение перетаскивания по умолчанию позволяет перетаскивать, перемещать и изменять порядок только строк.

Чтобы он выглядел и вел себя как таблица только для взаимодействия со строками, вам необходимо установить следующие свойства:

  • allColumnsShowFocus = true (чтобы вы не видели рамку фокуса вокруг определенного элемента (столбца))
  • headerHidden = false (для включения заголовков таблиц)
  • itemsExpandable = false (можно игнорировать, если все остальные свойства установлены правильно)
  • rootIsDecorated = false (это скрывает дескрипторы раскрытия для topLevelItems)
  • selectionBehavior = SelectRows
  • selectionMode = SingleSelection (или как хотите ...)
  • for moving rows:
    • dragEnabled = true
    • acceptDrops = true
    • showDropIndicator = true
    • editTriggers :: selectedClicked = false
    • all item's item flags:
      • ItemIsSelectable = true
      • ItemIsDragEnabled = true
      • ItemIsDropEnabled = false (поэтому вы не можете перетащить элемент topLevelItem, чтобы он стал дочерним по отношению к другому элементу)
      • ItemIsEnabled = true

Теперь, если вы используете только topLevelItems, treeView ведет себя так, как вы этого хотите.

person Martin Hennings    schedule 08.11.2013