【发布时间】: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 “信号和槽机制是类型安全的:信号的签名必须与接收槽的签名匹配。(实际上,槽的签名可能比它接收到的信号,因为它可以忽略额外的参数。)“你没有得到连接,因为它是一个错字,而不是因为签名不完全匹配。
标签: c++ windows qt sockets qtwebkit