原始问题略有不同,但是一个更重要的问题的一部分.
我试图在Windows上使用静态OpenSSL将Qt 5.2构建为静态.
我的最终目标是发送一个二进制文件而无需提供libeay32.dll和ssleay32.dll.但是,在我看来,这是不可能的.我使用静态openssl库构建了静态Qt,但似乎Qt完全忽略了提供的lib并且总是搜索DLL.
这个答案还表明QtNetwork总是搜索DLL并忽略其他所有内容,但它也声明"两个选项是将OpenSSL编译成Qt ......"但似乎并非如此.
有人能提供明确的答案吗?
这是我的Qt配置(为了便于阅读而增加了换行符):
configure -static -qmake -opensource -nomake examples -opengl desktop
-platform win32-msvc2010 -openssl -I C:\git\openssl\build\include
-L C:\git\openssl\build\lib OPENSSL_LIBS="-llibeay32 -lssleay32 -lgdi32"
Run Code Online (Sandbox Code Playgroud) 我有一个使用以下模块的Qt Quick应用程序
QT = core gui qml quick widgets \
core-private gui-private \
multimedia printsupport`
Run Code Online (Sandbox Code Playgroud)
我在OS X上部署.现在我的主要二进制文件以及许多Qt Qtick插件显示出对Qt Network的依赖.
otool -L /path/to/My.app/Contents/MacOS/My
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55471.14.18)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1056.16.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
@executable_path/../Frameworks/QtQuick.framework/Versions/5/QtQuick (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (compatibility version 5.4.0, current version 5.4.2)
@executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore (compatibility version 5.4.0, current version 5.4.2)
/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility …Run Code Online (Sandbox Code Playgroud) 我试图使用以下代码在Windows XP上获取mac地址:
QString getMacAddress()
{
QString macaddress="??:??:??:??:??:??";
#ifdef Q_WS_WIN
PIP_ADAPTER_INFO pinfo=NULL;
unsigned long len=0;
unsigned long nError;
if (pinfo!=NULL)
delete (pinfo);
nError = GetAdaptersInfo(pinfo,&len); //Have to do it 2 times?
if(nError != 0)
{
pinfo= (PIP_ADAPTER_INFO)malloc(len);
nError = GetAdaptersInfo(pinfo,&len);
}
if(nError == 0)
macaddress.sprintf("%02X:%02X:%02X:%02X:%02X:%02X",pinfo->Address[0],pinfo->Address[1],pinfo->Address[2],pinfo->Address[3],pinfo->Address[4],pinfo->Address[5]);
#endif
return macaddress;
}
Run Code Online (Sandbox Code Playgroud)
这里的代码建议如下:http://www.qtforum.org/post/42589/how-to-obtain-mac-address.html#post42589
我应该包含哪些库才能使其工作?
目前,我使用此代码检索目标系统的ping.但是它到目前为止只能在linux下工作,它可能依赖于语言环境设置.添加对Windows的支持可能会更复杂.是否有一种简单的方法或库来获取目标系统的ping?我主要使用Qt,所以如果我可以使用QSockets,那将是理想的.
#ifndef _WIN32
QProcess ping;
ping.start("ping", QStringList() << "-c 1" << m_sHostName);
if(ping.waitForFinished(250) ) {
while(ping.canReadLine()) {
QString line = ping.readLine();
if(line.contains("time=")) {
int iStart = line.indexOf("time=") + 5;
int iStop = line.indexOf(" ms");
QStringRef latency(&line, iStart, iStop-iStart);
m_vNetwork_s.append(time_s);
m_vLatency_ms.append(QString(latency.toLocal8Bit()).toDouble());
break;
}
}
}
#endif
Run Code Online (Sandbox Code Playgroud) 如何获取我的台式机的主机名?
像这样,获取Symbian OS的系统信息:
http://developer.nokia.com/community/wiki/Get_device_information_using_Qt
我怀疑应该如何使用QEventLoop.我有两段代码,它们都适合我(获取Web资源下载).
第一:
QNetworkAccessManager *manager = new QNetworkAccessManager( this );
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", "Mozilla Firefox");
connect(manager, SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
manager->get( request ) ;
QEventLoop loop;
connect(manager, SIGNAL(finished(QNetworkReply*)),&loop, SLOT(quit()));
loop.exec();
Run Code Online (Sandbox Code Playgroud)
第二个:
QNetworkAccessManager *manager = new QNetworkAccessManager( this );
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", "Mozilla Firefox");
manager->get( request ) ;
QEventLoop loop;
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
loop.exec();
Run Code Online (Sandbox Code Playgroud)
我想知道的是我应该使用哪一个.我的意思是,在信号被激活后,事件循环是否在第二个中退出?或者我必须quit()像第一个一样打电话?我在某个地方找到了第二个解决方案,但它对我来说似乎不合适所以我将其修改为第一段代码.
让我们看看你是否可以解释我的问题.[ C++ with Qt 5.2,使用Qt Creator ]
情况:我有一台PC,其中有几个本地IP地址分配给同一个接口(IP别名).路由器对于每个本地IP具有关于带宽,NAT,连接等的不同配置.我正在将这种本地IP切换集成到一些Qt应用程序中,特别是使用QWebView提供良好浏览体验的应用程序.
我需要的是:能够更改哪个本地IP QWebView用于获取其请求.
我唯一能做到的 - 只是一个补丁 - 是使用STUNNEL通过不同的本地IP将localhost端口映射到远程主机,并使用QNetworkProxy使QWebView使用这些localhost端口作为代理.事情是,由于某种原因代理这样显然会产生一些问题:用户无法看到几个YouTuve视频,只看到静态背景和" 发生错误 ".使用NetworkProxyFactory :: setUseSystemConfiguration(true)时不会发生这种情况,因为每个视频都可以完美地看到.
问题是:如何使用Qt管理IP别名?如果那是不可能的,您是否知道为什么通过STUNNEL代理失败?也许其他透明隧道软件试用?
在投入中表示赞赏.提前致谢!
我正在尝试使用QT网络实现FTPClient.
如何处理特殊情况,例如在下载网络电缆时拔掉插头,而不是互联网连接等等.
我的FTPClient如何才能了解此类事件,是否有这样的通知可用?
我试图使用像done(bool),ommandFinished(int id,bool error)这样的信号,但我没有得到任何信号.
我在http://mlecturedownload.com/test-qt.php上设置了测试页面,其中包含以下代码:
<?php
$foo = $_GET['foo'];
if ($foo == "0" || $foo == "1") {
echo $foo;
} else {
echo "Invalid foo";
}
Run Code Online (Sandbox Code Playgroud)
在Web浏览器中转到此页面并修改foo的值可以正常工作,并且使用curl也可以正常工作.但是当我从Qt发送请求时,我得到一个HTTP 406错误代码,这意味着"不可接受".以下是我提出请求的方式:
void MainWindow::on_send_clicked()
{
QString url = "http://mlecturedownload.com/test-qt.php?foo=1";
QNetworkRequest request;
request.setUrl(QUrl(url));
nam->get(request); // nam is a QNetworkAccessManager
}
Run Code Online (Sandbox Code Playgroud)
这是从Wireshark获得的整个HTTP请求和响应
GET /test-qt.php?foo=1 HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Accept-Language: en-CA,*
User-Agent: Mozilla/5.0
Host: mlecturedownload.com
HTTP/1.1 406 Not Acceptable
Date: Sat, 19 Jan 2013 17:14:37 GMT
Server: Apache
Content-Length: 275
Keep-Alive: timeout=5, max=75
Connection: Keep-Alive
Content-Type: …Run Code Online (Sandbox Code Playgroud) 有没有办法看到QNetworkAccessManager::post(QNetworkRequest,QByteArray)在客户端呼叫期间(或之后)发送(或已发送)的数据?
换句话说,我希望看到完整的原始HTTP请求:
POST /somepage.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
name=need&just=tosee
Run Code Online (Sandbox Code Playgroud)