Russian Qt Forum
Март 29, 2024, 18:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QtableWidget - выделение строк.  (Прочитано 21884 раз)
wildcat
Гость
« Ответ #15 : Февраль 09, 2012, 15:55 »

Так и надо.. что бы больше одной строки не выделялось
Записан
wildcat
Гость
« Ответ #16 : Февраль 09, 2012, 16:06 »

Вот:
Код
C++ (Qt)
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
     tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);

Спасибо огромное))) Что бы делал без Вас))
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #17 : Ноябрь 24, 2015, 12:06 »

Не хочется открывать новую тему по вопросу выделения ячеек в таблице. Решил, задам свой вопрос здесь. Думаю владелец этой темы будет не против))

У меня следующий вопрос. Как можно в QTableWidget реализовать выделение только строк и столбцов?

Тоесть чтобы ячейка не выделялась, а выделялись только выбранный столбец или выбранная строка. Уже час ищу, ничего не нахожу.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #18 : Ноябрь 24, 2015, 15:25 »

Код
C++ (Qt)
void QAbstractItemView::setSelectionBehavior( QAbstractItemView::SelectionBehavior behavior );
Записан

Qt 5.11/4.8.7 (X11/Win)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #19 : Ноябрь 25, 2015, 14:13 »

Код
C++ (Qt)
void QAbstractItemView::setSelectionBehavior( QAbstractItemView::SelectionBehavior behavior );

Пробовал, не помогает. С помощью этого метода можно устанавливать выделение:
- только столбцов - QAbstractItemView::SelectColumns;
- только строк - QAbstractItemView::SelectRows;
- только ячеек - QAbstractItemView::SelectItems.
Пытался применять этот метод следующим образом:
tabel->setSelectionBehavior(QAbstractItemView::SelectColumns | QAbstractItemView::SelectRows);
, но результата это не дало, на это компилятор бьет предупреждение.
Хоть и приложение запустилось, но выделения остались стандартными.
   
   
   
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #20 : Ноябрь 25, 2015, 14:38 »

Попробуйте скомбинировать QAbstractItemView::SelectRows | QAbstractItemView::SelectColumns
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #21 : Ноябрь 25, 2015, 14:42 »

Попробуйте скомбинировать QAbstractItemView::SelectRows | QAbstractItemView::SelectColumns
Ну как можно такое советовать Непонимающий.
Это же не битовые маски. Тем более постом выше ТС это уже делал.

2 billy4685
На сам деле непонятно чего хочется в итоге.
Записан

Qt 5.11/4.8.7 (X11/Win)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #22 : Ноябрь 25, 2015, 15:22 »

Ну как можно такое советовать Непонимающий.
упс. извиняюсь
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #23 : Ноябрь 25, 2015, 15:27 »

Наверное правильным будет отслеживать нажатие и через QAbstractItemView::setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags flags) выбирать всё перекрестие
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Ноябрь 25, 2015, 15:34 »

Ну видимо хочется выделять "крестиком", жмет ячейку - и сразу выделяются и строка и столбец. Вряд ли такой причудливый запрос будет штатным. Почему бы не отловить itemSelectionChanged и там добавить в selection чего надо? Ну пресечь рекурс конечно.

[OFF]Билли Джонс, Ваша страсть к UI впечатляет  Улыбающийся[/OFF]
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #25 : Ноябрь 25, 2015, 16:11 »

Попробуйте скомбинировать QAbstractItemView::SelectRows | QAbstractItemView::SelectColumns
Ну как можно такое советовать Непонимающий.
Это же не битовые маски. Тем более постом выше ТС это уже делал.

2 billy4685
На сам деле непонятно чего хочется в итоге.

Хочу, чтобы в таблице работало только два метода выделения: 1 и 2; а 3-й и 4-й методы выделения вообще не должны работать (см. рисунки ниже).
То есть, чтобы ячейки в таблице не выделялись при нажатии на них левой клавишей мыши, а выделялись только столбцы или строки, при выборе
щелчком мыши соответственно горизонтальных или вертикальных надписей в таблице (на рисунках 1 и 2 показано красным курсором).
« Последнее редактирование: Ноябрь 25, 2015, 16:19 от billy4685 » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #26 : Ноябрь 25, 2015, 16:23 »

Хм... хотелка ещё та...
Стандартными средствами не сделаешь.

Вот, имхо, самый простой вариант через подмену QItemSelectionModel:
Код
C++ (Qt)
#define VIA_HACK
 
#ifdef VIA_HACK
static inline QObject* getSender( QObject* o )
{
struct _ObjectP_ : QObject
{
_ObjectP_( QObject* p = 0 ) : QObject( p ) {}
QObject* sender() const { return QObject::sender(); }
};
return ( (_ObjectP_*) o )->sender();
}
#endif // VIA_HACK
 
class SelectionModel : public QItemSelectionModel
{
public:
SelectionModel( QAbstractItemModel* model, QObject* parent )
: QItemSelectionModel( model, parent ) {}
void select( const QItemSelection& selection, QItemSelectionModel::SelectionFlags command ) override
{
#ifdef VIA_HACK
if( qobject_cast< QHeaderView* >( getSender( parent() ) ) )
#else
auto sl = selection.indexes();
if( ( sl.first().row() == sl.last().row() &&
sl.first().column() == 0 && sl.last().column() == model()->columnCount() - 1 ) ||
( sl.first().column() == sl.last().column() &&
sl.first().row() == 0 && sl.last().row() == model()->rowCount() - 1 ) )
#endif
QItemSelectionModel::select( selection, command );
}
};
 
SelectionModel selm( tableWidget->model(), tableWidget );
tableWidget->setSelectionModel( &selm );
 

Через хак (VIA_HACK) просто и на все случаи Улыбающийся
« Последнее редактирование: Ноябрь 25, 2015, 17:47 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Ноябрь 26, 2015, 09:33 »

Код
C++ (Qt)
struct _ObjectP_ : QObject
{
_ObjectP_( QObject* p = 0 ) : QObject( p ) {}
QObject* sender() const { return QObject::sender(); }
};
 
Тут мне один академик показал что можно и так
Код
C++ (Qt)
struct _ObjectP_ : public QObject {
using QObject::sender;
};
 
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #28 : Ноябрь 28, 2015, 15:34 »

GreatSnake, Igors спасибо, буду пробовать цеплять это для своего приложения.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.246 секунд. Запросов: 23.