1

这是我的代码:

QPixmap map(":/Medal.jpg");
QIcon ico(map);
ico.addPixmap(map);
QPushButton *p = new QPushButton;
p->setIcon(ico);
QString link = "http://www.google.com";
QObject::connect(p, SIGNAL(clicked()),window,SLOT(QDesktopServices::openUrl(QUrl (link))));

图片显示了,但没有打开浏览器。请帮帮我。

4

1 回答 1

2

您必须使用 lambda 函数:

#include <QApplication>
#include <QDesktopServices>
#include <QPushButton>
#include <QUrl>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton p("Click me");
    QString link = "http://www.google.com";
    QObject::connect(&p, &QPushButton::clicked, [&link](){
        QDesktopServices::openUrl(QUrl(link));
    });
    p.show();

    return a.exec();
}

或与std::bind()

#include <QApplication>
#include <QDesktopServices>
#include <QPushButton>
#include <QUrl>
#include <functional>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton p("Click me");
    QString link = "http://www.google.com";
    QObject::connect(&p, &QPushButton::clicked, std::bind(QDesktopServices::openUrl, QUrl(link)));
    p.show();

    return a.exec();
}

笔记:

您需要在 Qt 中启用 C++11,本次审查以下问题:如何在 Qt Creator 中启用 C++11?,这表示您CONFIG += c++11在 .pro中添加

于 2018-05-17T04:43:06.990 回答