标签: qtnetwork

使用Qt开发FTPClient时出现问题

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

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

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

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

qt qtnetwork

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

Qt同步QNetworkAccessManager得到

执行同步QNetworkAccessManager :: get的正确方法是什么?

QT维基提供了一个方法,但指出:"我们不建议在实际应用中使用这个." 该邮件列表提供了一个类似的解决方案的wiki.

qt http-get synchronous qtnetwork

5
推荐指数
1
解决办法
7877
查看次数

如何在QTCPSocket上发送文件及其文件名?

是否有任何简单的方法将文件发送到包含文件名的服务器,以便服务器和客户端中的文件名完全相同?

这是我的代码

寄件人

QString path = QApplication::applicationDirPath()+"/belajardansa.bmp";
QFile inputFile(path);
QByteArray read ;
inputFile.open(QIODevice::ReadOnly);
while(1)
{
    read.clear();
    read = inputFile.read(32768*8);
    qDebug() << "Read : " << read.size();
    if(read.size()==0)
       break;
    qDebug() << "Written : " << socket->write(read);
    socket->waitForBytesWritten();
    read.clear();
}
inputFile.close();
Run Code Online (Sandbox Code Playgroud)

接收器

QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
QBuffer* buffer = buffers.value(socket);

QByteArray read = socket->read(socket->bytesAvailable());
qDebug() << "Read : " << read.size();

QFile file(  ???); // what should I put in the bracket???
if(!(file.open(QIODevice::Append)))
{
    qDebug("File cannot be opened.");
    exit(0);
}
file.write(read);
file.close();
Run Code Online (Sandbox Code Playgroud)

qt qtcpsocket qtcpserver qtnetwork

5
推荐指数
2
解决办法
4548
查看次数

在 Qt 中获取 MAC ID

我正在使用以下代码获取 Qt 中的 MAC ID。

主程序

#include <QtCore/QCoreApplication>
#include "QtNetwork/QNetworkInterface"
#include "QString"

QString getMacAddress()
{
    foreach(QNetworkInterface interface, QNetworkInterface::allInterfaces())
    {
        // Return only the first non-loopback MAC Address
        if (!(interface.flags() & QNetworkInterface::IsLoopBack))
            return interface.hardwareAddress();
        QString text = interface.hardwareAddress();
        qDebug() << text;
    }
    return QString();
}

int main(int argc, char *argv[])
{
    getMacAddress();
    QCoreApplication a(argc, argv);
    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

我在控制台中什么也没得到?指导我谢谢...

qt qtnetwork

5
推荐指数
1
解决办法
7904
查看次数

PyQt:使用QApplication.quit时偶尔会出现段错误

注意:我也在PyQt邮件列表上发布了这个 - 如果有一个好的答案,我会在这里回答我自己的问题.

我在执行时遇到偶然的段错误问题 QApplication.quit(),可能与libQt5Network.so和/或QtWebkit有关.

首先,我正在使用的3个测试系统:

  • Arch Linux,PyQt 5.2,Qt 5.2.0,Python 3.3.3
  • Ubuntu 13.10,PyQt 5.0.1,Qt 5.0.2,VM中的Python 3.3.2
  • Windows 7,PyQt 5.2,Qt 5.2.0,Python 3.3.3

到目前为止,这些崩溃从未发生在Arch上,经常出现在Ubuntu上,而且在Windows中时常发生.(虽然Windows只是一个猜测,我只是得到这个python.exe不再工作 foo.)

原来的崩溃

我首先注意到一个大(ger)项目qutebrowser中的问题,它在键入时给了我这个堆栈跟踪:quit(在Ubuntu上):

#0  0xb5c296fc in QMutex::lock() () from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#1  0xb3bdd97d in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#2  0xb3bdf0d0 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#3  0xb3bd4418 in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#4  0xb3bd8b1e in ?? () from /usr/lib/i386-linux-gnu/libQt5Network.so.5
#5  0xb5dedf10 in QMetaObject::activate(QObject*, int, int, void**) ()
   from /usr/lib/i386-linux-gnu/libQt5Core.so.5
#6  0xb5dee48b in …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt segmentation-fault qtnetwork

5
推荐指数
1
解决办法
1136
查看次数

如何从QNetworkAccessManager和QNetworkRequest获取服务器QSslCertificate?

我通过发送请求QNetworkAccessManager::createRequest(Operation, QNetworkRequest, outgoingData).我需要验证SSL证书的指纹是否符合我的预期.不幸的是,结果QNetworkReply返回peerCertificate带有空签名的a.

文档说明如下:

由于在握手阶段设置了对等证书,因此可以安全地从连接到sslErrors()信号或encrypted()信号的插槽访问对等证书.

如果返回空证书,则可能意味着SSL握手失败,或者它可能意味着您连接的主机没有证书,或者它可能意味着没有连接.

所以错误可能是连接已经关闭.我不能使用QNetworkAccessManager::sslErrors()Signal,因为使用SSL代理时不会发出此信号(这是我想要阻止的).

我如何获得服务器的SSL证书?是否有更多可以访问的信号以及证书仍然可用的位置?是否有其他方式可以获得证书?

更新:

现在我可以通过对QNetworkAccessManager::finished(QNetworkReply*)Signal 做出反应来获得正确的证书.遗憾的是,发送AJAX-Request时不会发出此信号.对我来说,必须检查这些请求的指纹.有任何想法吗?

c++ connection qt qt4 qtnetwork

5
推荐指数
0
解决办法
595
查看次数

可以time.sleep(secs)挂起QNetworkAccessManager异步请求吗?

QNetworkAccessManager可以异步执行请求,并time.sleep(secs)可以暂停执行给定的秒数.我对以下代码感到困惑.是t2这里总是超过10秒?

如果不在time.sleep(secs)此处使用代码,则getWebPageSRC在固定的时间内调用完成的插槽,大约大约3秒.

我现在已经测试了几次,发现t2总是大于10秒.有谁能解释为什么?

de myMethod(self):
    ...
    reply.finished.connect(self.getWebPageSRC)
    self.t=time.clock()
    time.sleep(10)

def getWebPageSRC(self):
    t2=time.clock()-self.t
    print(t2)
Run Code Online (Sandbox Code Playgroud)

PS,因为QNAM异步工作,我认为它在另一个线程中工作,因此有自己的事件循环,所以time.sleep(secs)挂起所有线程的所有Qt事件循环或只是它内部的线程的事件循环?在主线程中休眠会挂起所有其他线程的事件循环吗?

python qt pyqt qtnetwork qt-signals

5
推荐指数
1
解决办法
226
查看次数

在Qt中发出HTTP请求

我是Qt的新手.我为VS2008安装了Qt并与我的VS2010集成.我只是想知道如何发出HTTP请求.我读过有关QtNetwork但QtHttp很有用的内容.

我也知道libcurlcurlpp,但我在安装它时遇到了问题,并使它与Qt一起工作.

你推荐什么,QtNetwork还是curlpp?如果是QtNetwork,请你给我一个示例函数或一段代码(以及要使用的类).如果curlpp(libcurl),你能指点我到哪里可以找到为Qt安装它的步骤(或亲切解释)吗?

非常感谢你.

qt libcurl visual-studio-2010 curlpp qtnetwork

4
推荐指数
2
解决办法
2273
查看次数

QT显示从网络访问管理器获得的图像

我正在尝试显示使用networkaccess manager获取的get请求中获取的图像.我能够编译甚至能够运行它.但是我无法在Qlabel中显示图像.

QNetworkAccessManager* nam;

void MainWindow::on_pushButton_clicked()
{
    nam = new QNetworkAccessManager(this);
    QUrl url("http://i.imgur.com/Uw7Fk.jpg");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
    if (reply->error() == QNetworkReply::NoError)
    {
        QImageReader imageReader(reply);
        imageReader.setAutoDetectImageFormat (false);
        QImage pic = imageReader.read();
        ui->label_2->setPixmap(QPixmap::fromImage(pic));

     }


}
Run Code Online (Sandbox Code Playgroud)

请告诉我哪里出错了.

c++ qt qt4 qnetworkaccessmanager qtnetwork

4
推荐指数
1
解决办法
2939
查看次数

Qt中的slot函数是否在另一个线程上运行?

在以下函数中,管理器将发出finished(QNetworkReply*)信号,然后getCategories(QNetworkReply*)将调用插槽函数.

    void getCategories()
    {
        connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(getCategories(QNetworkReply*)));

        for(int i = 0; i < stores.size(); ++i)
        {
            request.setUrl(QUrl(QString("http://www.example.com/%1").arg(stores[i].store_id)));

            manager.get(request);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果在第一次调用slot函数时发出第二个信号,Qt是否会启动另一个线程来运行slot函数作为对第二个信号的响应?如果是这样,是否有一些方法让第二次调用slot函数等到第一次调用结束?

更新:

我的意思是插槽功能有可能同时运行吗?

c++ qt qtnetwork qt-signals qtcore

4
推荐指数
2
解决办法
4142
查看次数