QLabel弹出:点击外面时不关闭

时间:2017-05-13 17:57:44

标签: qt

在QTableView中单击一个单元格时,我使用QLabel作为弹出窗口来显示HTML信息。单击表时,将使用行名称和所需的弹出位置调用以下函数:

void DatabaseTableModel::showPopup (int rowIndex, const QPoint &location) const
{
    QLabel *popup = new QLabel(data_[rowIndex].displayHtml(), 0, Qt::Popup);
    popup->setTextFormat(Qt::RichText);
    popup->setOpenExternalLinks(true);
    popup->move(location);
    popup->show();
}

弹出窗口在正确的位置正确显示,HTML看起来很好。在使用Qt 5.6的Mac上,弹出窗口在弹出窗口外单击时会弹出。

但是,在Windows上(使用Qt 5.7),弹出窗口内部或外部的弹出窗口不会关闭弹出窗口。关于修复的任何想法?

2 个答案:

答案 0 :(得分:1)

我没有看到这个问题的任何其他答案,但我自己找到了答案: 似乎通用小部件弹出窗口已经过时(在实践中),但在QDialog上使用它可以正常工作。以下是修订后的代码:

void DatabaseTableModel::showPopup (int rowIndex, const QPoint &location) const {
    QDialog *popup = new QDialog(0, Qt::Popup | Qt::FramelessWindowHint);
    QVBoxLayout *layout = new QVBoxLayout;
    QLabel *popupLabel = new QLabel(data_.value(rowIndex).displayHtml(), 0);
    layout->addWidget(popupLabel);
    popupLabel->setTextFormat(Qt::RichText);
    popupLabel->setOpenExternalLinks(true);
    popup->setLayout(layout);
    popup->move(location);
    popup->exec();
}

答案 1 :(得分:0)

您应该使用QTooltip::showText。这支持HTML显示并将自动关闭。工具提示旨在向用户显示易失信息,QLabel不是。