Qt 4.8.6中的qlabel mailto链接

时间:2017-05-16 06:17:06

标签: c++ qt

我已按照先前问题(如this

)的说明进行操作

所以现在,如果我将链接放到常规页面,它可以使用默认浏览器打开。但是,如果我想从QT QLabel 4.8.6打开mailto链接,该链接什么都不做。 我做错了什么?

这是代码:

void UpgradeMessageDialog::linkOpen(const QString &link)
{
    QDesktopServices::openUrl(QUrl(link));
}

(这被定义为适当的h文件中的公共插槽)

E4

请注意:我的计算机中设置了默认邮件程序,当我在浏览器中输入mailto:a@b.c时程序打开正常。

2 个答案:

答案 0 :(得分:3)

首先,有两种方法可以处理QLabel中的链接激活。你应该使用其中一个,但我发现你正试图同时使用它们。

这两种方式是:

  • 致电openExternalLinks(true),以便QLabel会使用QDesktopServices::openUrl() 自动打开发送linkActivated()信号的链接。
  • 连接到linkActivated()信号,然后手动打开已连接插槽中的链接(例如,通过调用QDesktopServices::openUrl())。

此外,您使用exec()功能错误。您应该在exec()调用后进行connect()调用,因为exec()正在阻止,因此在关闭对话框后实际上会发生信号连接。

所以你的代码应该是这样的:

umd->ui->label->setText("<a href='mailto:user@foo.com?subject=Test&body=Just a test'>My link</a>");
connect(umd->ui->label, SIGNAL(linkActivated(QString)), umd, SLOT(linkOpen(QString)));
umd->exec();

或者像这样:

umd->ui->label->setTextFormat(Qt::RichText);
umd->ui->label->setTextInteractionFlags(Qt::TextBrowserInteraction);
umd->ui->label->setOpenExternalLinks(true);
umd->ui->label->setText("<a href='mailto:user@foo.com?subject=Test&body=Just a test'>My link</a>");

还有一点建议:将标签初始化代码放入UpgradeMessageDialog构造函数。

UpgradeMessageDialog::UpgradeMessageDialog(QDialog* parent) : QDialog(parent)
{
  ui->label->setTextFormat(Qt::RichText);
  ui->label->setTextInteractionFlags(Qt::TextBrowserInteraction);
  ui->label->openExternalLinks(true);
  ui->label->setText("<a href='mailto:user@foo.com?subject=Test&body=Just a test'>My link</a>");
}

然后您可以这样使用对话框:

QScopedPointer<UpgradeMessageDialog> umd = new UpgradeMessageDialog;
umd->exec();

答案 1 :(得分:0)

#include <QUrl>
#include <QDesktopServices>

myLabel = new QLabel(this);
myLabel->setTextFormat(Qt::RichText);
myLabel->setText("Email:href='mailto:serge@essetee.be'>serge@essetee.be</a>");
myLabel->setOpenExternalLinks(true);

现在您只需点击该链接即可启动标准邮件客户端。