Articles of qt

如何获得在Windows上插入USB设备的供应商ID和产品ID

我在Windows平台上使用Qt。 我想获得并显示从我的本地系统插入的USB设备的供应商ID和产品ID。 以下是我的完整源代码从USB设备获取供应商ID和产品ID。 当我运行我的QT应用程序,它不会给我任何错误。 所以我把USB设备插入系统。 但是我的打印语句显示如下结果 qDebug ()<<pDetData->DevicePath; 我得到的结果为0x4 我的源代码中是否有任何实现错误? 如果是这样,请指导我我做错了什么.. 我错过了其他function吗? 是否有可能根据我的源代码从USB设备获得供应商ID和产品ID(我的代码实现)? 请在下面find我的源代码 static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }; HANDLE hInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE,NULL,NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); if ( hInfo == INVALID_HANDLE_VALUE ) { qDebug ()<<"invalid"; } else { qDebug ()<<"valid handle"; […]

QT – 如何通过HTTP下载和保存图像?

我试图用控制台应用程序下载和保存一些图像。 这是我到目前为止,(所有代码正在编译,但运行后,似乎不进入replyFinished()函数…) void Test::start() { std::cout << "start1"; QNetworkAccessManager *manager = new QNetworkAccessManager(); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://www.exylum.mydevil.net/firefox.jpg"))); } void Test::replyFinished(QNetworkReply* reply) { std::cout << "st"; QImage* img2 = new QImage(); img2->loadFromData(reply->readAll()); if(img2->isNull()) std::cout << "oops"; if(img2->save("omg2.jpg", "JPG")) std::cout << "saved"; else std::cout << "dont…"; }

使用QNetworkAccessManager的post()方法上传文件

我在Qt应用程序中遇到了一些麻烦。 特别是与QNetworkAccessManager类。 我正在尝试使用QNetworkAccessManager的post()方法执行二进制文件的简单HTTP上载。 该文档指出,我可以给QIODevice一个指针post(),并且该类将传输在QIODevice中find的数据。 这表明我应该能够给post()一个指向QFile的指针。 例如: QFile compressedFile("temp"); compressedFile.open(QIODevice::ReadOnly); netManager.post(QNetworkRequest(QUrl("http://mywebsite.com/upload") ), &compressedFile); 我正在开发的Windows系统上似乎发生了什么,我的Qt应用程序从QFile中推送数据,但不完成请求; 它似乎坐在那里等待更多的数据显示从文件。 发布请求不是“closures”,直到我手动杀死应用程序,此时整个文件显示在我的服务器端。 从一些debugging和研究中,我认为这是因为QFile的read()操作在到达文件末尾时不返回-1。 我认为QNetworkAccessManager试图从QIODevice中读取,直到它从read()中得到-1,此时它假定没有更多的数据并closures请求。 如果从read()得到的返回码为零,QNetworkAccessManager假定可能有更多的数据到来,所以它一直在等待这个假设的数据。 我已经用一些testing代码证实了,在你读完文件后,QFile的read()操作只返回0。 这似乎与QNetworkAccessManager的post()方法期望QIODevice行为的方式不兼容。 我的问题是: 这是QFile在Windows下工作的方式的某种限制吗? 有没有其他的方式,我应该使用QFile或QNetworkAccessManager通过post()推送文件? 这是不是会起作用,我将不得不find其他方式来上传我的文件? 任何build议或提示将不胜感激。 更新:事实certificate,我有两个不同的问题:一个在客户端和一个在服务器端。 在客户端,我必须确保我的QFile对象在networking事务期间保持闲置状态。 QNetworkAccessManager的post()方法立即返回,但实际上并没有立即完成。 您需要在QNetworkAccessManager的finished()信号上附加一个插槽,以确定POST何时实际完成。 在我的情况下,QFile几乎是永久的保存起来很容易,但是我也为完成的()信号附加了一个插槽,以便检查来自服务器的错误响应。 我将信号附加到插槽中,如下所示: connect(&netManager, SIGNAL(finished(QNetworkReply*) ), this, SLOT(postFinished(QNetworkReply*) ) ); 当我发送文件的时候,我写了这样的post代码(注意:compressedFile是我的类的成员,所以在代码之后不会超出范围): compressedFile.open(QIODevice::ReadOnly); netManager.post(QNetworkRequest(QUrl(httpDestination.getCString() ) ), &compressedFile); QNetworkAccessManager完成(QNetworkReply *)信号触发我的postFinished(QNetworkReply *)方法。 发生这种情况时,closurescompressedFile并删除co​​mpressedFile表示的数据文件是安全的。 为了进行debugging,我还添加了一些printf()语句来确认事务已经完成: void CL_QtLogCompressor::postFinished(QNetworkReply* reply) { QByteArray response […]

Qt QPSQL驱动程序问题

我试图连接postgresql与Qt SQL模块。 我成功地编译了psql驱动程序(src \ plugins \ sqldrivers \ psql)。 但是当我尝试连接postgresql,我得到这个消息; QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL3 QMYSQL QODBC3 QODBC QPSQL7 QPSQL 我在Windows XP SP3中使用PostgreSQL 8.3,Qt 4.7.1和Visual Studio 2008(我也试过,但是没有帮助)

CreateProcess可以启动一个进程,但QProcess不能…为什么?

我正在写一个Windows QT应用程序,需要启动其他应用程序。 如果我使用下面的窗口调用一切工作正常: QString qsExePath = "C:\\Program Files (x86)\\Some Company\\SomeApp.exe"; QString qsCommandLine = ""; DWORD dwLastError = 0; STARTUPINFO startupInfo; ZeroMemory(&startupInfo, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); startupInfo.dwFlags = STARTF_USESHOWWINDOW; startupInfo.wShowWindow = (WORD)1; PROCESS_INFORMATION processInfo; ZeroMemory(&processInfo, sizeof(processInfo)); if (CreateProcess((TCHAR*)(qsExePath.utf16()), (TCHAR*)(qsCommandLine.utf16()), NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo)) { CloseHandle(processInfo.hProcess); CloseHandle(processInfo.hThread); } else { dwLastError = GetLastError(); […]

用Qt编程的USB编程

无论如何,我可以在Qt中做USB编程吗? 我正在使用基于Qt 5.0.0的Qt Creator 2.6,它是最新的与Microsoft Visual Studio 2010编译器一起使用的Qt Creator。 我有一个名叫“ Dreamcheeky雷电导弹发射器 ”的玩具,我需要编程这个基于USB的设备。 我曾尝试过LibUSB,但它搞砸了一切。 它甚至重命名设备端口,我不得不使用USBDview软件撤消一切。 但我想我安装不正确。 我遵循这些指示 。 这是64位的指令,但我得到了32位,因为指令似乎没有很大的区别(而不是下载文件)我跟着它。 这是我下载的 – libusb-win32-bin-1.2.6.0.zip 无论你推荐什么API,都不要紧,甚至libusb,但请告诉我如何正确安装它。 我的操作系统是Windows 7的最终32位。

Qt:QPainter + GDI在相同的部件?

我试图使用这里描述的方法在同一个小部件上使用QPainter和GDI调用。 不幸的是,这个教程似乎已经写在Qt的早期版本上,现在它不能工作。 我设置WA_PaintOnScreen标志并重新实现paintEngine()返回NULL。 然后在paintEvent()创build一个QPainter,使用它,然后使用一些GDI调用来绘制位图。 GDI调用工作正常,但QPainter什么都不做。 我在控制台上得到以下错误: QPainter::begin: Paint device returned engine == 0, type: 1 这是不是支持了? 我该怎么做? 我也尝试在GDI绘画小部件的顶部创build一个额外的小部件,但是由于顶部小部件显示为黑色并阻止了GDI小部件,所以效果不佳。

Qt4自定义窗口框架像在办公室2007年?

有没有办法强制Qt4绘制类似于Office 2007/2010的窗口框架? 我希望我的应用程序在所有的Windows版本中看起来都不一样,只是vista / 7。 也许有一些扩展到QMainWindow? 感谢帮助。

为什么不是QString :: localeAwareCompare()正常工作

一位芬兰客户告诉我,芬兰语的正确sorting(locale aware)是:az,å,ä,ö。 但是QString :: localeAwareCompare()在Windows Vista的Qt 4.4.2中将它返回为:a,ä,å,bo,ö,pz。 #include <qapplication.h> #include <qlocale.h> #include <iostream> #include <tchar.h> int main( int argc, char* argv[] ) { QLocale::setDefault ( QLocale( QLocale::Finnish ) ); QApplication app( argc, argv ); QString s1 = "a"; QString s2 = "ä"; QString s3 = "å"; QString s4 = "b"; QString s5 = "o"; QString […]

如何configurationQt从Linux到Windows目标的交叉编译?

我想要使​​用Linux x86_64主机来交叉编译Qt库(最终是我的应用程序)以获得Windows x86_64目标。 我觉得我很接近,但是我可能对这个过程的某些部分有一个根本性的误解。 我开始在我的Fedora机器上安装所有的mingw包,然后修改win32-g++ qmake.conf文件以适合我的环境。 不过,我似乎被Qt: -platform和-xplatform一些看似明显的configuration选项卡住了。 Qt的文档说,平台应该是主机架构(你正在编译的地方),- -xplatform平台应该是你希望部署的目标平台。 在我的例子中,我设置了-platform linux-g++-64和-xplatform linux-win32-g++ ,其中linux-win32-g ++是我修改的win32-g ++configuration。 我的问题是,执行configuration这些选项后,我看到它调用我的系统的编译器,而不是交叉编译器(x86_64-w64-mingw32-gcc)。 如果我省略-xplatform选项并将-platform设置为我的目标规范(linux-win32-g ++),那么它会调用交叉编译器,但是如果发现某些与Unix相关的函数没有定义,则会发生错误。 以下是我最近一次尝试的一些输出: http : //pastebin.com/QCpKSNev 。 问题: 当从Linux主机交叉编译类似Qt for Windows的应用程序时, 是否应该调用本地编译器? 也就是说,在交叉编译过程中,我们不应该只使用交叉编译器吗? 当我指定-xplatform选项时,我不明白为什么Qt的configuration脚本会尝试调用我的系统的本机编译器。 如果我正在使用mingw交叉编译器,那么我何时需要处理规格文件? 海湾合作委员会的规格文件仍然是我的一个谜,所以我想知道如果这里的一些背景将帮助我。 一般来说,除了在我的qmake.conf中指定一个交叉编译器之外,我还需要考虑什么呢?