问题标签 [qtcore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4417 浏览

c++ - Qt 找不到 Qt5Core Qt5Widgets 等

我从网站下载了离线 Qt 5.1.1(32 位)包。刚刚将它安装在我的 Ubuntu 12.04 机器上。在安装 Qt 之前,我已经安装了 build-essentials。

我在 Qt Creator 中打开了一个新的应用程序/GUI 项目来玩。还没有添加任何东西,所以它只有默认文件。我尝试使用 Creator Build 按钮构建它,但它会引发错误:

:-1: 错误:在搜索 -lQt5Widgets 时跳过不兼容的 /home/Me/Qt5.1.1/5.1.1/gcc/lib/libQt5Widgets.so

:-1: 错误:找不到 -lQt5Widgets <

对 QtCore/Gui 文件做同样的事情。

决定打开 Qt 中包含的示例之一。然后建造它。它也抛出了同样的错误。

怎么了?我的额外阅读中提到了QT += widgets在 .pos 文件中添加一行的内容,但这似乎自动存在于版本检查器中。

我以为这会开箱即用?我错过了什么?

0 投票
0 回答
514 浏览

python - PyQt 窗口焦点右键单击

我有一个非常基本的设置。

一个主对话窗口由:

然后几个命令将其设置为可见:

此对话框窗口小部件之一连接了右键单击菜单。问题:

右键单击 QtGui.QDialog 对话框窗口(应用程序)不会使其“当前”或“活动”......

示例情况: 在屏幕上打开两个并排放置的应用程序窗口:左侧是 Web 浏览器,右侧是我的 QtGui.QDialog 应用程序。Web 浏览器当前处于活动状态(或“焦点”)。将鼠标移到 QtGui.QDialog 应用程序上。右键单击 QtGui.QDialog 不会使其处于活动状态。我必须左键单击 QtGui.QDialog 才能使其处于活动状态。问题:如何通过右键单击获得左键单击功能(在使窗口处于活动状态方面)。

提前谢谢了!

0 投票
2 回答
4879 浏览

c++ - Ncurses 和 Qt 互操作性

拥有基于 Qt 和 ncurses 的应用程序,在等待用户输入时每秒刷新屏幕的最佳方式是什么?(例如显示时钟并获取用户输入)。

我需要 CPU 使用率和应用程序响应能力之间的最佳折衷。

更具体地说,如何获得用户输入并仍然使用QTimer信号槽机制?

使用下面的代码时,计时器不起作用。

0 投票
1 回答
633 浏览

qt - QProcess 调用 QProcess.start() 后退出应用程序

QProcess用来运行其他程序。QProcess.start()但是当我在调试控制台中调用它后退出我的应用程序时:

并且该过程关闭。

但我想在关闭我的应用程序后保持这个进程运行。我如何开始新流程:

我怎么做?

0 投票
2 回答
2810 浏览

c++ - 继承子类不能使用Q_OBJECT

我的类有一个大问题:我将Q_OBJECT在我的子类中使用宏。但是如果我Q_OBJECT在我的子类中定义,它会抛出一个异常。这是一个例外:

我的SubClassOneSubClassTwo继承自BaseClass.

这里有一些代码:(所有#includes 都是正确的)

.cpp 文件来了

主文件

如何Q_OBJECT在我的子类中使用?

0 投票
2 回答
405 浏览

c++ - QTextStream::readLine():无效的返回值

我正在尝试使用以下代码从文件中读取:

这是我文件的内容

但是当我在读取文件后绘制值时,我得到了错误的值(与比较文件中的值完全不同),有时文件无法打开,而且大多数时候它不会读取所有值在文件中。

我想我在某处做错了什么,但我想不通。

0 投票
3 回答
2045 浏览

c++ - QThread::wait() 不使用直接连接不返回

我在使用 Qt 线程和连接时遇到了一些麻烦。我找到了几个关于这个主题的教程和讨论,我按照这个教程创建了线程。但我仍然遇到问题,在线程上调用 wait() 永远不会返回并且 UI 冻结。

之前在这里问过一个类似的问题(第二个示例): 线程之间的 Qt 连接类型:为什么这有效?

在问题的最后一次编辑中,作者提到他已经造成了僵局。我假设,我在我的应用程序中做同样的事情。但我还是不明白,为什么会这样。阅读建议的文章并没有帮助我理解。我刚刚明白了,可能会发生死锁,但我不知道是什么导致了那里或我的情况。

我还创建了一个简化为核心问题的示例。在这个问题的底部找到代码。

所以我的问题是:在我的示例中,死锁的确切原因是什么?有没有不直接连接的解决方案?

我真的很感激任何提示。

谢谢!

编辑:

由于评论,我尝试通过信号发送停止请求,并在线程循环中添加了 QCoreApplication::processEvents() 调用。但主要问题仍然相同。

编辑2:

在对事件循环进行了更多思考之后,我找到了一个可以接受的解决方案:

这实际上有效,工人本身控制如何停止工作。

想出这个之后,我对冻结问题也有一个解释:调用等待似乎使主线程保持忙碌或挂起,因此它不处理任何事件。由于线程对象存在于主线程中,线程的finished() 信号被加入队列但从未被处理。

我的隐含假设,thread.wait() 仍将保持事件循环正常工作,显然是错误的。但是,QThread::wait() 函数有什么用?!?

这只是一个理论,但也许这里有人可以验证或伪造它......

编辑 3(最终解决方案):

在阅读了这篇小文章并实现了一个子类化解决方案之后,我认为这对于这个特定问题来说是更可取的。不需要事件循环,我可以直接调用不同的线程并使用互斥保护。它的代码更少,更易于理解且更易于调试。

我想我只会使用非子类化策略,如果与线程的交互不仅仅是启动和暂停。


我的简化示例

也许我应该指出,我没有删除线程,因为在我原来的应用程序中,我想稍后恢复,所以停止它实际上意味着暂停它。

工人.h:

工人.cpp:

主程序:

0 投票
3 回答
3098 浏览

c++ - 全局对象和创建顺序

我还在学习 C++。我有一个问题。假设您的项目具有始终存在的全局对象,例如ApiManager,所有其他模块都可以访问它(通过#include)。现在我正在这样做:

标题:

资源:

问题是其他对象在初始化时也需要访问,我注意到 C++ 全局对象是按字母顺序创建的。我想知道你是怎么处理的?存在一些技巧吗?例如,在 Free Pascal 世界中,每个类模块都有initializationfinalization部分:

...并且initialization项目模块的顺序可以在项目源中的uses子句中排序(如#include在 C++ 中)。我知道有很多方法可以做到这一点(例如main.cpp用自定义顺序初始化所有内容)但想知道 C++ 世界中的“好习惯”是什么

编辑:由 Q_GLOBAL_STATIC 解决(在 Qt 5.1 中引入,但也适用于 Qt 4.8)但仍有两个问题:

  1. 仍然不知道如何管理构造函数顺序(以及在哪里初始化它)。因为 Q_GLOBAL_STATIC 创建的全局对象不是在应用程序启动时创建的。它们是在首次使用时创建的。所以我需要用我的自定义订单在某个地方(在 main.cpp 中?)“触摸”这些对象。

  2. 文档说 Q_GLOBAL_STATIC 必须在正文 .cpp 文件中调用,而不是在标题中。但是其他类看不到这个对象。所以我创建了静态函数来公开对该对象的引用:

.cpp:

但从这个主题:http : //qt-project.org/forums/viewthread/13977 Q_GLOBAL_STATIC 应该自动公开实例,但它没有

0 投票
1 回答
1863 浏览

c++ - 线程使用 Qt 发送 http 请求

我正在尝试创建一个线程(HttpWorker),在需要时唤醒并发送一个 http 请求。我希望这可以在一个线程中完成。我正在使用 Qt 来实现。

我认为我会这样做的方式是创建一个 MyHttpWorker 类,将其移动到另一个线程,连接插槽/信号等。然后在线程启动时,我将使用QNetworkAccessManager调用 get 请求。我会QWaitCondition在请求发送后暂停线程,并且每当我需要发送另一个线程时我会恢复这个线程。

但是,当我暂停 httpworker 线程时,根本不会调用 FinishedSlot。如果我使用该类来简单地调用一个 http 请求,它就可以毫无问题地执行。所以问题与QWaitCondition(或通常只是冻结线程)有关。

我可以简单地为我拥有的每个请求创建和销毁一个工作线程和一个线程,但是我需要发送大量 http 请求,所以我认为这种方法过于消耗(创建线程并一遍又一遍地销毁它们)。

我很感激我能得到的任何帮助。

这是我的代码:

MyHttpWorker.h

MyHttpWorker.cpp

主文件

0 投票
1 回答
251 浏览

c++ - Qt:发出信号时不调用信号处理程序

我正在做这样的事情:

关于何时触发 SIGNAL 的任何建议都不会调用 SLOT。这是显示菜单的位置:

关于为什么不调用 SLOT 的任何建议?