标签: qtnetwork

有没有办法用静态OpenSSL构建静态Qt?

原始问题略有不同,但是一个更重要的问题的一部分.

我试图在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)

c++ qt static openssl qtnetwork

15
推荐指数
1
解决办法
8246
查看次数

是否有可能在OS X上部署没有Qt网络的Qt Quick应用程序?

我有一个使用以下模块的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)

qt qt-quick qtnetwork qt5

13
推荐指数
1
解决办法
1105
查看次数

在Qt中获取Windows上的MAC地址

我试图使用以下代码在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

我应该包含哪些库才能使其工作?

qt4 qtnetwork

12
推荐指数
1
解决办法
1万
查看次数

使用Qt从远程目标获取ping(Windows/Linux)

目前,我使用此代码检索目标系统的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)

c++ qt ping qtnetwork qabstractsocket

9
推荐指数
3
解决办法
1万
查看次数

9
推荐指数
1
解决办法
9977
查看次数

QEventLoop正确用法

我怀疑应该如何使用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()像第一个一样打电话?我在某个地方找到了第二个解决方案,但它对我来说似乎不合适所以我将其修改为第一段代码.

qt qeventloop qtnetwork

8
推荐指数
1
解决办法
1万
查看次数

使用QWebView进行IP别名(Qt/C++)

让我们看看你是否可以解释我的问题.[ 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代理失败?也许其他透明隧道软件试用?

在投入中表示赞赏.提前致谢!

c++ qt qtwebkit qwebview qtnetwork

7
推荐指数
1
解决办法
575
查看次数

使用Qt开发FTPClient时出现问题

我正在尝试使用QT网络实现FTPClient.

如何处理特殊情况,例如在下载网络电缆时拔掉插头,而不是互联网连接等等.

我的FTPClient如何才能了解此类事件,是否有这样的通知可用?

我试图使用像done(bool),ommandFinished(int id,bool error)这样的信号,但我没有得到任何信号.

qt qtnetwork

6
推荐指数
1
解决办法
4667
查看次数

仅在从Qt连接时返回HTTP 406错误的网页

我在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)

qt mod-security qtnetwork

6
推荐指数
1
解决办法
3870
查看次数

在发送之前访问QNetworkRequest数据

有没有办法看到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)

c++ qt qt4 qtnetwork qnetworkrequest

6
推荐指数
1
解决办法
2114
查看次数