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?