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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]  (Прочитано 6480 раз)
frostyland
Гость
« : Сентябрь 24, 2010, 10:31 »

Здравствуйте.
ОТображаю диалог с QTreeView, фокус по умолчанию должен быть на дереве, но получаю


Пытаюсь программно выделить первую строку при отображении диалога (в конструкторе)
Код:
	pluginTreeView->setCurrentIndex(pluginTreeView->currentIndex()); // маразм какой-то, но иначе не работает 
pluginTreeView->setFocus(Qt::MouseFocusReason);
Тот же код, привязанный для пробы к кнопке, работает.

А как можно все-таки при старте диалога полутить желаемый эффект?

С уважением, ВВК
« Последнее редактирование: Сентябрь 27, 2010, 07:53 от frostyland » Записан
voronElf
Гость
« Ответ #1 : Сентябрь 24, 2010, 11:01 »

диалог же по exec() вызываешь, переопредели метод и там попробуй выделять строку
Записан
frostyland
Гость
« Ответ #2 : Сентябрь 24, 2010, 11:13 »

диалог же по exec() вызываешь, переопредели метод и там попробуй выделять строку
exec не виртуален.
переопределил virtual void showEvent(QShowEvent * event), но и это не помогло.
Записан
crossly
Гость
« Ответ #3 : Сентябрь 24, 2010, 11:35 »

если он не виртуален это не значит что его переопределить нельзя..
Записан
frostyland
Гость
« Ответ #4 : Сентябрь 24, 2010, 11:50 »

если он не виртуален это не значит что его переопределить нельзя..

Согласен, только что это даст? Ничего не даст (я для очистки совести попробовал).
Наиболее вероятное место было событие showEvent, которое вызывается после exec(), но и там не сработало.
---------------------------
Короче, вот такие танцы с бубном:

//----------------------------------------------------------------------------------------
void PlugDialog::showEvent(QShowEvent * event)
{
   startTimer(50);
}
//----------------------------------------------------------------------------------------
void PlugDialog::timerEvent(QTimerEvent* event)
{
   killTimer(event->timerId());
   pluginTreeView->setCurrentIndex(pluginTreeView->currentIndex());
   pluginTreeView->setFocus(Qt::MouseFocusReason);
}
//----------------------------------------------------------------------------------------

« Последнее редактирование: Сентябрь 24, 2010, 12:17 от frostyland » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Сентябрь 27, 2010, 14:38 »

Цитировать
   startTimer(50);
   killTimer(event->timerId());
QTimer::singleShot тогда уж.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #6 : Сентябрь 27, 2010, 18:00 »

Попробуй устанавливать не индекс (он, насколько видно из картинки установился как раз нормально), а устанавливать Selection, т.е. выделять первый айтем.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Сентябрь 27, 2010, 18:41 »

у вас не стоит ли то, что фокус полиси NoFocus?
а то странно уже что ни 1 из вариантов не работает
и да, таки юзать QTimer ради синглшота плохо в этом случае
Записан
frostyland
Гость
« Ответ #8 : Сентябрь 29, 2010, 09:15 »

Попробуй устанавливать не индекс (он, насколько видно из картинки установился как раз нормально), а устанавливать Selection, т.е. выделять первый айтем.

Спасибо. Так и сделал. Тоже корявенько, кстати. QItemSelectionModel выделяет только по одному индексу, во всяком случае, я не нашел способов выделения всей строки, иначе как
Код:
	m_selection->clearSelection();
for(int col=0; col<m_pluginModel->columnCount(); ++col){
m_selection->select(m_pluginModel->index(0, col), QItemSelectionModel::Select);
}
Установка для QTreeView свойства setAllColumnsShowFocus(true); привела к видимому фокусу на всю строку, но выделение все равно приходится делать по-колоночно в цикле.
Записан
Kolobok
Гость
« Ответ #9 : Сентябрь 29, 2010, 09:21 »

Код:
void	setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )

тоже пробовал?
Записан
frostyland
Гость
« Ответ #10 : Сентябрь 29, 2010, 09:35 »

Код:
void	setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
тоже пробовал?
Пробовал. Нихт резулт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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