Как создать эффект фокуса для 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, в то время как он не имеет фокуса????? (но это еще одна проблема, я должен выяснить).

Как я могу создать такой же эффект здесь с клавиатуры? Не могли бы вы дать мне подсказку или направление для этого?

0 ответов

Другие вопросы по тегам