Как создать эффект фокуса для QTreeView, пока у него нет фокуса?
Я создаю завершитель, как указано выше, который представляет собой комбинацию QTreeView (для контента) и QLabel (для заголовка). Я сам собрал список, наследовал не от QCompleter, а от QWidget.
Completer::Completer( QWidget *p_parent ) : QWidget( p_parent )
{
setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup );
QGridLayout *tableViewLayout = new QGridLayout( this );
tableViewLayout->setSpacing( 0 );
tableViewLayout->setMargin( 0 );
m_title = new QLabel;
.....
tableViewLayout->addWidget( m_title );
m_view = new CompleterView();
m_style = new CompleterStyle();
m_view->setStyle( m_style );
m_view->setItemDelegate( new CompleterDelegate( m_view ) );
m_sourceModel = new CompleterSourceModel( this );
m_proxyModel = new CompleterProxyModel( this );
m_proxyModel->setSourceModel( m_sourceModel );
m_view->setModel( m_proxyModel );
tableViewLayout->addWidget( m_view );
}
Над завершителем находится QLineEdit. Когда я нажму на лампочку или напишу что-нибудь в LineEdit, будет показан завершитель. Теоретически, завершитель должен иметь фокус, потому что я установил в конструкторе выше setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup );
, Но я хочу, чтобы LineEdit всегда был в фокусе, чтобы я мог продолжать писать. Я использовал метод, упомянутый здесь, и фокус остается на LineEdit.
Теперь, как вы видите, выше показан эффект наведения мыши для QTreeView, когда я перемещаю мышь на линию, для этой линии появляется оранжевый фон. Я сделал это по назначению paint
делегата. Теперь я хочу сделать тот же эффект, но с клавиатуры. Я не знаю, как это сделать, потому что у завершителя теперь нет фокуса (фокус остается в LineEdit). Я отлаживал (нажимал клавиши вверх и вниз на клавиатуре), иногда полоса прокрутки сдвигается и координата индекса всегда (-1, -1). Я не знаю почему, потому что как я могу контролировать Completer, в то время как он не имеет фокуса????? (но это еще одна проблема, я должен выяснить).
Как я могу создать такой же эффект здесь с клавиатуры? Не могли бы вы дать мне подсказку или направление для этого?