我有一个QTableView,当鼠标悬停在弹出窗口上时会弹出该内容。在大多数情况下它运行良好,但有时当我移动鼠标时,弹出窗口变得透明。我已经完成了代码,但仍然没有找到原因。 正确的案例和不正确的案例如下所示。
与此弹出窗口相关的代码如下所示:
bool eventFilter(QObject *watched, QEvent *event){
if(viewport() == watched){
if(event->type() == QEvent::MouseMove){
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
QModelIndex index = indexAt(mouseEvent->pos());
if(index.isValid()){
showPopup(index);
}
else{
popup->hide();
}
}
else if(event->type() == QEvent::Leave){
popup->hide();
}
}
else if(popup == watched){
if(event->type() == QEvent::Leave){
popup->hide();
}
}
return QTableView::eventFilter(watched, event);d
}
void showPopup (const QModelIndex &index) const {
if(index.column() == 1){
QRect r = visualRect(index);
popup->move(viewport()->mapToGlobal(r.bottomLeft()));
QString showString = index.data(Qt::DisplayRole).toString();
for (int i = 0; i<8; i++){
showString = showString.replace(17+18*i,1,QChar(' '));
}
popupLabel->setText(showString);
popup->adjustSize();
popup->show();
}
else {
popup->hide();
}
}
可能有用的线索是当我改变时
if(event->type() == QEvent::Leave){
popup->hide();
}
到
Popup->hide();
弹出窗口始终是透明的。完整项目位于git@github.com:bigbigda/DbgGUI.git