QtWebKit c++ 连接:无法将 QWebView 转换为 SOCKET
Posted
技术标签:
【中文标题】QtWebKit c++ 连接:无法将 QWebView 转换为 SOCKET【英文标题】:QtWebKit c++ connect: cannot convert QWebView to SOCKET 【发布时间】:2014-11-08 21:33:14 【问题描述】:最近开始为 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();
【问题讨论】:
您的 void test() 看起来不像 QObject 派生类中的插槽方法。 Qt 不会为此创建连接元数据。此外,信号和槽函数的签名必须匹配。 @DNT - 我认为当连接到接受较少参数的函数时,多余的信号参数会被丢弃。 还有一件事:错误消息清楚地表明连接调用被解释为对网络套接字连接函数的调用,而不是您打算调用的 Qt 函数。 @ddriver 每当我打错字,写入不匹配的签名时,我从 QObject::connect 收到一个错误,并且没有发生连接(Qt 4.7.1)。根据文档,必须指定参数类型,并且在 QObject::connect 调用中的信号和槽规范中必须相同。还没有到 Qt 5.x,所以我听从你的意见。 @DNT - 来自 Qt 4.7 DOC “信号和槽机制是类型安全的:信号的签名必须与接收槽的签名匹配。(实际上,槽的签名可能比它接收到的信号,因为它可以忽略额外的参数。)“你没有得到连接,因为它是一个错字,而不是因为签名不完全匹配。 【参考方案1】:试试这个:
QObject::connect(&view, &QWebView::urlChanged, test);
您正在使用仅适用于 QObject
s 和插槽的旧连接语法,test
不是插槽,它不是 QObject
派生类的函数,它是一个免费函数,所以你必须使用自 Qt 5 起可用的新语法。
当您不在QObject
中时,您无权访问connect()
,这就是为什么我的示例使用QObject
命名空间在main()
中调用它。在您的情况下,正如 DNT 所指出的那样,它只是恰好被命名为“connect”的其他一些功能。
您犯的另一个错误是您传递了视图,但 connect()
使用指针,因此您必须使用 &
运算符来获取指向视图的指针。
【讨论】:
关于连接问题另见***.com/questions/26422154/…以上是关于QtWebKit c++ 连接:无法将 QWebView 转换为 SOCKET的主要内容,如果未能解决你的问题,请参考以下文章
CentOS 7 Python ImportError:无法导入名称QtWebkit,即使它在我的PyQt4站点包目录中