- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我创建了一个带有 html 链接的 QMessageBox:
QTMessageBox msgBox(Utility::UI::topLevelWidget());
msgBox.setText("<a href=\"http://www.example.cz/?url=www%25www\">Link</a>");
msgBox.exec();
如果我左键单击该链接,则会打开一个新的 Web 浏览器选项卡。问题是打开了 url http://www.example.cz/?url=www**%2525**www
而不是 http://www.example.cz/?url=www**%25**www
如何防止此类行为?
更新:如果我右键单击链接,选择“复制链接”并将其粘贴到浏览器中,链接就可以了。
最佳答案
那是因为 %
的 html 编码是 %25
。所以 %25
-> %2525
。
为什么 Qt 会自动对链接进行编码?
在QMessageBox中,有一个QLabel。标签使用 Qt::TextFormat Qt::AutoText by default .因此,它会在您的文本中检测到它是 html 编码的并生成链接。
QLabel 发送信号 linkActivated(const QString& link)或使用 QDesktopServices::openUrl() ,取决于它的 bool 值 openExternalLinks .
QMessageBox 似乎将 openExternalLinks
设置为 true。
因为链接将用作 QUrl 的输入, 它将被解析。这就是双重编码的原因。
可以通过使用其静态方法 void QDesktopServices::setUrlHandler
来修改 QDesktopServices::openUrl()
的行为。我实现并测试了它的预期行为:
MyUrlHandler urlHandler;
QDesktopServices::setUrlHandler( "http", &urlHandler, "handleUrl" );
QMessageBox msgBox;
msgBox.setText( "<a href=\"http://www.example.cz/?url=www%25www\">Link</a>" );
msgBox.show();
使用类MyUrlHandler
:
class MyUrlHandler : public QObject
{
Q_OBJECT
public:
MyUrlHandler(QObject* parent=0):QObject(parent){}
public slots:
void handleUrl(const QUrl &url)
{
QDesktopServices::openUrl( QUrl::fromEncoded( url.toString().toAscii() ) );
}
};
技巧很简单,我将链接地址直接设置为 QUrl
实例作为已经有效的 url。
但不幸的是,它会全局修改行为。
关于c++ - QMessageBox - url编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32607343/
我学习 PyQt5(这对我来说看起来很复杂),我想知道为什么 QMessageBox.Yes(或否)有一些特殊的值(value),对我来说它是 16384。这就是我的意思: from PyQt5 im
我似乎发现了 Qt 5.1 的一个烦人的问题。 假设你有一个系统托盘图标(QSystemTrayIcon)并且你隐藏了你的表单(QDialog),所以: this->hide(); 然后,当表单隐藏时
import time import sys, threading from PyQt4 import QtGui, QtCore from PyQt4.QtGui import QApplicati
我创建了一个与全屏应用程序一起运行的程序。我希望我的程序中的 QMessageBox 显示在全屏运行的应用程序的顶部。 平台是 Windows 7,我使用的是 Qt。 我试过了: QMessageBo
我需要显示简单的错误消息 QMessageBox::critical( nullptr, "My Title", "Text"); 但是对话框显示为空标题。 我做错了什么? PS:操作系统:MacO
我正在构建一个 Qt Symbian 项目,我想向用户显示应在几秒钟后自动关闭的通知。我已经看到诺基亚在他们的用户界面中经常使用它。 现在我正在使用下面的代码,以便用户可以关闭 QMessageBox
如何显示带有三角形感叹号符号的 QMessageBox::warning,如下所示? 我在QMessageBox::warning中找不到任何选项,我只得到红色的圆形符号。 最佳答案 三角形图标应该是
尽管设置了 setStandardButtons(0);它不会关闭 msgBox。 QMessageBox msgBox; msgBox.setText("My List"); msgBox.setS
我想创建一个简单的“关于”对话框,但注意到 QMessageBox::about 不会根据标题的长度调整其大小(由于字体较大,标题通常会更长...... .至少在我的桌面环境中),仅针对内容。有没有办
有没有办法显示一个具有可选择文本的QMessageBox,以便用户能够使用鼠标或键盘以某种方式选择和复制其内容?我知道我可以创建做到这一点的标签,但不确定消息框。 MS Windows 中的标准消息框
我想在计算时使用QMessageBox来阻止其父QDialog。我遇到了类似的事情,但这不起作用。 msgBox = QtWidgets.QMessageBox() msgBox.setWindowT
我正在使用 Qt 框架,但对它有点生疏。 我有两个 QStrings first 和 last 我想在 QMessageBox 中显示它们,但不知道如何包含多个参数。 这就是我必须用 on 参数对其进
我有一个看似简单的任务,但我正在疯狂地尝试解决这个问题。 我正在尝试编写 C++ QT 程序。我需要做的就是在 QMessageBox 中显示一些信息。我在与我的程序相同的目录中有一个文本文件,其中包
基本上我正在学习 Qt C++ 的基础知识,我试图同时打开两个不同的 QMessageBox,但它们相互重叠。我想知道是否有可能将它们并排放置。非常感谢任何关于如何这样做的意见。 额外信息:我使用 Q
我想使用 QMessageBox 向用户宣布一个短暂的等待间隔。 QMessageBox* box(new QMessageBox(QMessageBox::Information,"Parser",
我使用的是 Ubuntu Linux。我使用了 pyuic4 命令并创建了一个 .py 文件,然后向其中添加了一个消息框。如下所示: from PyQt4 import QtCore, QtGui t
我在 QMessageBox 上通过 QMessageBox::addButton() 方法添加了 3 个按钮。如果单击按钮,是否可以防止关闭消息框?默认情况下,每个按钮都会关闭窗口,但我不想为一个按
#include int main(int argc, char** argv) { QApplication app(argc, argv); // first QMess
我有一个问题,对你们中的一些人来说答案很明显,但我就是想不出来。 QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html有两种显示方式,
我正在尝试通过在 lambda 函数中调用其 show 函数来显示 QMessageBox,如下所示: connect(ui->graphButton, &QAbstractButton::click
我是一名优秀的程序员,十分优秀!