Отключите выбор строки или столбца, щелкнув заголовок в QTableWidget - PullRequest
1 голос
/ 24 марта 2011

У меня есть QTableWidget, и я хочу отключить поведение при выборе строки или столбца при нажатии на заголовок строки или столбца.

Кто-нибудь знает, как отключить это поведение?

Edit: Заголовки должны оставаться активными, потому что необходима функция onClick.

Ответы [ 7 ]

2 голосов
/ 27 марта 2011

tableWidget->setSelectionMode(QAbstractItemView::NoSelection); Это свойство содержит режим выбора, в котором работает представление. SelectionMode

Или, может быть, вам нужно tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows ) Это свойство содержит поведение выбора, используемое представлением. SelectionBehavior

1 голос
/ 18 июля 2016

Возможно, вы захотите отключить слот selectColumn от секцииPressed сигнала заголовка, что-то вроде строчек:

disconnect(horizontalHeader(), SIGNAL(sectionPressed(int)),this, SLOT(selectColumn(int)));
1 голос
/ 04 марта 2012

Есть несколько способов сделать это

  1. Простой способ, который не так хорош :) (и зависит от реализаций Qt, как и все :): в табличном представлении его горизонтальный заголовок sectionPressed (int) связан с таблицей selectColumn (int) , так что вы можете просто отключить их :( (то же самое верно для вертикального заголовка)
  2. Вы можете реализовать виртуальное представление таблицы selectionCommand (const QModelIndex &, const QEvent * event) interface и вернуть " no selection ", если событие равно 0 ( так как это 0, то при нажатии на область заголовка)
  3. И, наконец, лучшее и оригинальное решение: вы можете иметь и затем установить свои собственные selectionModels как для таблицы, так и для ее заголовка (или заголовков) и заново реализовать поведение выбора по своему усмотрению.
1 голос
/ 20 мая 2011
QTableWidget::setSortingEnabled(true);

Это исключает описанное вами поведение выбора столбца и обменивает его на сортировку по столбцу!

0 голосов
/ 28 октября 2018

Я знаю ответ на этот вопрос.

disconnect(yourTableWidget->horizontalHeader(), SIGNAL(sectionPressed(int)),yourTableWidget, SLOT(selectColumn(int)));
0 голосов
/ 30 августа 2018

Если Qt для Python приемлем, для меня это сработало:

def setModel(self, model): super().setModel(model) self.horizontalHeader().sectionPressed.disconnect()

Видимо, сигнал был подключен в setModel. Я просто отключился от всего.

0 голосов
/ 24 марта 2011

вы можете попробовать установить false на функцию setClickable

QTableWidget::horizontalHeader()->setClickable(false);

Если это работает, то вы можете сделать то же самое для [verticalHeader] [2]

[2]: http://doc.qt.nokia.com/latest/qtableview.html#verticalHeader "verticalHeader"

...