【问题标题】:QDesktopServices::openUrl() not working QtQDesktopServices::openUrl() 不工作 Qt
【发布时间】:2018-10-27 05:49:51
【问题描述】:

这是我的代码:

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))));

图片已显示,但未打开浏览器。请帮帮我。

【问题讨论】:

  • 抱歉。菜鸟的错误。

标签: c++ qt qt5 qpushbutton qdesktopservices


【解决方案1】:

你必须使用 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,本次复习以下问题:How to enable C++11 in Qt Creator?,表示您在.pro中添加CONFIG += c++11

【讨论】:

  • 第一个显示:F:\Projects\Calci\main.cpp:94: 警告:lambda 表达式仅适用于 -std=c++11 或 -std=gnu++11 [默认启用] });
  • 第二个:F:\Projects\Calci\main.cpp:94: 警告:lambda 表达式仅适用于 -std=c++11 或 -std=gnu++11 [启用者默认] }); ^
  • 最后一个问题:如您所知,我添加了一个图像,所以现在它显示 F:\Projects\Calci\main.cpp:125: 错误:没有匹配函数调用 'QVBoxLayout::addWidget (QPushButton&)'lay->addWidget(p);
  • 它没有正确显示所以这里是链接:mediafire.com/file/rz8l5qfr25j4i5q/main.cpp
  • 最佳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
相关资源
最近更新 更多