如何在没有焦点的情况下为QTreeView创建焦点效果?

时间:2018-11-15 13:10:13

标签: qt qtreeview qcompleter

enter image description here

我正在如上所述创建一个完成程序,它是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始终具有焦点,因此我可以继续写。我使用了here中提到的方法,并且重点仍然放在LineEdit上。

现在您看到上面的QTreeView有鼠标悬停效果,当我将鼠标移到一行上时,该行有橙色背景。我在委托的函数paint中做到了。现在,我想做同样的效果,但来自键盘。我不知道该怎么做,因为完成者现在不再有焦点了(焦点保留在LineEdit中)。我调试了(按下键盘上的上下键),有时滚动条移动并且索引坐标始终为(-1,-1)。我不知道为什么,因为在没有焦点的情况下如何控制完成器? (但这是另一个问题,我应该弄清楚)。

如何在这里通过键盘创建相同的效果?您能给我一个提示或方向吗?

0 个答案:

没有答案