Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QLabel作为弹出窗口:不';单击“外部”时无法关闭_Qt - Fatal编程技术网

Qt QLabel作为弹出窗口:不';单击“外部”时无法关闭

Qt QLabel作为弹出窗口:不';单击“外部”时无法关闭,qt,Qt,我使用QLabel作为弹出窗口,在QTableView中单击单元格时显示HTML信息。单击表格时,使用行名称和所需的弹出位置调用以下函数: void DatabaseTableModel::showPopup (int rowIndex, const QPoint &location) const { QLabel *popup = new QLabel(data_[rowIndex].displayHtml(), 0, Qt::Popup); popup->set

我使用QLabel作为弹出窗口,在QTableView中单击单元格时显示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上(使用Qt5.7),弹出窗口不会在弹出窗口内部或外部单击时关闭。有什么解决办法吗

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

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

我没有看到这个问题的任何其他答案,但我自己找到了答案: 一般的窗口小部件弹出窗口似乎已经过时了(在实践中),但在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();
}

我没有看到这个问题的任何其他答案,但我自己找到了答案: 一般的窗口小部件弹出窗口似乎已经过时了(在实践中),但在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();
}

我最初尝试过,但所需的HTML包含链接,在QToolTip中不起作用。工具提示在您可以将鼠标移动到链接之前消失。我最初尝试过,但所需的HTML包含链接,在QToolTip中不起作用。工具提示在您可以将鼠标移动到链接之前消失。