Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: frostyland от Сентябрь 24, 2010, 10:31



Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: frostyland от Сентябрь 24, 2010, 10:31
Здравствуйте.
ОТображаю диалог с QTreeView, фокус по умолчанию должен быть на дереве, но получаю
(http://content.foto.mail.ru/mail/frost666/heap/i-189.jpg)

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

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

С уважением, ВВК


Название: Re: QTreeView: не работает фокус при отображении диалога.
Отправлено: voronElf от Сентябрь 24, 2010, 11:01
диалог же по exec() вызываешь, переопредели метод и там попробуй выделять строку


Название: Re: QTreeView: не работает фокус при отображении диалога.
Отправлено: frostyland от Сентябрь 24, 2010, 11:13
диалог же по exec() вызываешь, переопредели метод и там попробуй выделять строку
exec не виртуален.
переопределил virtual void showEvent(QShowEvent * event), но и это не помогло.


Название: Re: QTreeView: не работает фокус при отображении диалога.
Отправлено: crossly от Сентябрь 24, 2010, 11:35
если он не виртуален это не значит что его переопределить нельзя..


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО (assaround)]
Отправлено: frostyland от Сентябрь 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);
}
//----------------------------------------------------------------------------------------



Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: LisandreL от Сентябрь 27, 2010, 14:38
Цитировать
   startTimer(50);
   killTimer(event->timerId());
QTimer::singleShot тогда уж.


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: vipet от Сентябрь 27, 2010, 18:00
Попробуй устанавливать не индекс (он, насколько видно из картинки установился как раз нормально), а устанавливать Selection, т.е. выделять первый айтем.


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: Авварон от Сентябрь 27, 2010, 18:41
у вас не стоит ли то, что фокус полиси NoFocus?
а то странно уже что ни 1 из вариантов не работает
и да, таки юзать QTimer ради синглшота плохо в этом случае


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: frostyland от Сентябрь 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); привела к видимому фокусу на всю строку, но выделение все равно приходится делать по-колоночно в цикле.


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: Kolobok от Сентябрь 29, 2010, 09:21
Код:
void	setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )

тоже пробовал?


Название: Re: QTreeView: не работает фокус при отображении диалога [РЕШЕНО]
Отправлено: frostyland от Сентябрь 29, 2010, 09:35
Код:
void	setSelectionBehavior ( QAbstractItemView::SelectionBehavior behavior )
тоже пробовал?
Пробовал. Нихт резулт.