Articles of qt

Qt 5.0程序在QtCreator中运行,但不在外面

这里是上下文: 我在Windows 7 x64下开发了一个使用Qt的程序。 我已经升级到Qt 5.0.1,QtCreator 2.6.1,编译器VS2010。 现在的状态: 我的程序在QtCreator中运行良好,但是当我在外面尝试时,我收到了一些错误。 我检查了这个问题,给了我一些答案: qtcreator – EXE在qtcreator内部工作正常,但不在外面 因此,我添加了Qt dll,并且帮助,没有更多的丢失图书馆消息。 不过,它不会运行在QtCreator之外(没有更多的错误消息,我只是不运行),所以我添加了qminimal和qwindows DLL的平台目录,这没有帮助。 我也下载并添加libEGL.dll作为sugested ,没有结果。 我卡住了,真的有一点帮助。

Qt在屏幕上正确放置新窗口,重点放在鼠标上,移动到屏幕上

经过几个月的尝试,search,审查代码等我无法find一个解决scheme,以正确定位一个新窗口在QT。 在我最基本的情况下,我只想获得最终的窗口大小,并将其置于鼠标下方。 它将被转移,以确保窗口的任何部分都不在屏幕之外。 我不希望窗口出现,然后移动到位置,这会产生视觉震动,特别是打开桌面FX时。 我遇到的问题,并不是所有问题都有适当的解决scheme: 在之前显示窗口之前,frameGeometry并不总是被填充。 frameGeometry有时是完全错误的,特别是在Windows 7上。 在显示之前,不可能知道sizeHint或size是否会被应用,或者是其他的。 也就是说,尺寸政策并不可预测。 请注意,我知道如何保存/恢复以前创build的窗口的几何。 尽pipeQT缺陷,我也有一个工作解决scheme。 另外请注意,我不能使用窗口pipe理器的默认位置。 对于多监视器设置中的非MDI应用程序,它们的位置非常糟糕(通常甚至不在与鼠标相同的监视器上)。 我也想避免所有小部件和对话框的子类实现解决scheme,因为它不是通用的。 如果这是唯一可能的方式,那么我愿意考虑它(如果事件filter也不是一个选项)。 有没有人有可行的解决scheme?

加快Qt程序的性能:Windows vs Linux

我已经在这里发布了这个问题,但是因为这可能不是Qt特有的,我想我也可以在这里尝试一下我的机会。 我希望这样做不是不恰当的(只要告诉我是否是这样)。 我开发了一个小的科学程序,执行一些math计算。 我试图优化它,以便尽可能快。 现在我几乎完成了对Windows,Mac和Linux用户的部署。 但是我还没能在很多不同的电脑上testing它。 这是我的麻烦:为Windows部署,我已经使用了一台同时安装了Windows 7和Ubuntu 12.04的笔记本电脑(双启动)。 我比较了在这两个系统上运行的应用程序的速度,我惊讶地发现它在Windows上的速度至less是它的两倍! 如果有一个小小的差异,我不会感到惊讶,但是怎么能说明这种差别呢? 这里有一些精确度: 我做这个程序的计算只是一些残酷而愚蠢的math计算,基本上它是在一个被称为十亿次的循环中计算乘积和余弦。 另一方面,计算是multithreading的:我启动了6个QThreads。 笔记本电脑有两个核心@ 1.73Ghz。 起初我以为Windows可能没有使用其中一个内核,但是随后我看着处理器活动,根据小graphics,两个内核都运行在100%。 然后我认为Windows的C ++编译器没有使用Linux的C ++编译器自动完成的优化选项(如-O1 -O2之类的东西),但显然是这样的。 我很困扰,在Windows上,这个应用程序太慢了(2到4次),真的很奇怪。 另一方面,我还没有尝试过与Windows的其他计算机。 不过,你有什么想法,为什么不同? 附加信息:一些数据… 尽pipeWindows似乎在使用两个内核,但我认为这可能与线程pipe理有关,原因如下: 样本计算n°1(此次启动2个QThreads): PC1窗口:7.33s PC1-linux:3.72s PC2-linux:1.36s 样本计算n°2(这个启动3个QThreads): PC1窗口:6.84s PC1-linux:3.24s PC2-linux:1.06s 样本计算n°3(这个启动6个QThreads): PC1窗口:8.35s PC1-linux:2.62s PC2-linux:0.47s 哪里: PC1-windows =我的2核笔记本电脑(@ 1.73Ghz)与Windows 7 PC1-linux =我的2核心笔记本电脑(@ 1.73Ghz)与Ubuntu 12.04 PC2-linux =我的8核心笔记本电脑(@ 2.20Ghz)与Ubuntu 12.04 (当然,PC2的速度并不令人震惊,我不可思议的是PC1-windows和PC1-linux的区别)。 注意:我也尝试在最近的PC上运行程序(4或8核心@ 3Ghz,不记得准确)在Mac OS,速度相当于PC2-linux(或稍快)。 […]

QT Creator – 跨平台编译

编译Windows,Mac和Linux! 唯一的方法就是在每个操作系统上安装QT Creator并编译自己的版本? (目前在Mac OSX下运行QT Creator)

:CallNamedPipe失败。 错误= 2(Qt)

打开一个新的Qt GUI应用程序项目后,我直接运行这个新项目,而不添加任何代码或更改任何设置,但是我总是收到一条错误消息: [错误]:CallNamedPipe失败。 错误= 2 这是在debugging模式下运行相同项目的屏幕截图: 看来,GUI可以成功运行,但我真的不知道这个错误可能来自哪里。 先谢谢你!

如何获得在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(); […]