Russian Qt Forum
Июля 02, 2025, 04:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]  (Прочитано 6758 раз)
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.021 секунд. Запросов: 20.