QtWebKit c++连接:无法将QWebView转换为SOCKET

QtWebKit c++ connect: cannot convert QWebView to SOCKET

本文关键字:QWebView 转换 SOCKET c++ 连接 QtWebKit      更新时间:2023-10-16

最近开始为Windows进行一些编程,但我根本无法使程序正常工作。我正在努力实现一个环境,在这个环境中,我主要可以使用HTML作为前端,并使用Javascript控制后端。在Linux上,我已经设法向"JavaScriptCore"添加了一些功能和内容,但Windows对我来说并不友好

目前,我正试图捕捉URL更改事件,允许特殊的URL执行命令,但我收到了以下错误:

error: C2664: 'connect' : cannot convert parameter 1 from 'QWebView *' to 'SOCKET'
There is no context in which this conversion is possible

我没能找到一个关于"QWebView to SOCKET"的搜索结果,所以我不知道该怎么办,只能问你们。

这是我的密码。我不太擅长编程,所以请温柔一点;)

#include <QtGui>
#include <QtWebKit>
#include <QApplication>
#include <QWebView>
#include <iostream>
using namespace std;
void test()
{
    cout << "Hello world";
}
int main(int argc, char** argv) {
    QApplication app(argc, argv);
    QWebView view;
    view.setWindowFlags(Qt::CustomizeWindowHint);
    view.setWindowFlags(Qt::FramelessWindowHint);
    view.setFixedSize(1000,600);
    view.setStyleSheet("background:transparent;");
    view.setAttribute(Qt::WA_TranslucentBackground);
    view.setUrl(QUrl("http://google.com"));
    view.setWindowTitle("test v0.1");
    connect(view, SIGNAL(urlChanged(QUrl)), SLOT(test()));
    view.show();
    return app.exec();
}

试试这个:

QObject::connect(&view, &QWebView::urlChanged, test);

您使用的是旧的连接语法,该语法仅适用于QObject和插槽,test不是插槽,也不是QObject派生类的函数,它是一个自由函数,因此您必须使用自Qt 5以来可用的新语法。

当您不在QObject中时,您无法访问connect(),这就是为什么我的示例使用QObject命名空间在main()中调用它。在您的情况下,正如DNT所指出的,它只是一个碰巧被命名为"connect"的其他函数。

您犯的另一个错误是传递了视图,但connect()使用指针,因此必须使用&运算符来获取指向视图的指针。