How to create focus effect for QTreeView while it does not have focus?

328 views Asked by At

enter image description here

I am creating a completer as above, which is combination of QTreeView (for the content) and QLabel (for the title). I built the list myself, did not inherit from QCompleter, but from 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 );
}

Above the completer is a QLineEdit. When I click on the bulb or write something in the LineEdit, the completer will be shown. Theoretically, the completer should have focus because I set in the constructor above setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup );. But I want the LineEdit always has focus, so i can continue to write. I used the method mentioned here and the focus remains at LineEdit.

Now as you see there is mouse over effect for the QTreeView above, when I move the mouse over a line, there is a orange background for that line. I did it in function paint of delegate. Now I want to do the same effect but from keyboard. I don't know how to do it because the completer has now no focus anymore (focus remains in LineEdit). I debugged (pressed up and down key on the keyboard), sometimes the scrollbar shifts and the index coordinate is always (-1, -1). I don't know why because how can I control the Completer meanwhile it does not has focus ????? (but that is another problem, i should figure out).

How can I create the same effect here from the keyboard? Could you give me a hint or a direction for that?

0

There are 0 answers