问题标签 [qt]

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 投票
3 回答
3140 浏览

c++ - 插件API设计

所以我有一个基于 QT API 的应用程序,它使用 QPlugin 系统。使用起来相当简单,您定义一个从接口继承的类,当插件加载时,您会得到该类的一个实例。最后,它会归结为dlopen/dlsymLoadLibrary/ GetProcAddress,任何适合操作系统的东西。我在这里没有问题,一切都按预期工作。

所以,正题。有很多功能涉及需要引用主应用程序提供的数据/功能的插件。例如,我的应用程序有一个 GUI,所以我的应用程序中有一个“ plugin::v1::gui”函数,它返回一个QWidget *. 如果我希望插件能够向我的 UI 添加内容,或者甚至让它的对话框成为我的 UI 的子级,它需要一个指向它的指针。

我开始在 Linux 上进行开发并很快遇到这样一个事实,即默认情况下,加载器不会用加载它的应用程序中的符号填充共享对象中的未解析符号。没问题,轻松解决。将“ -rdynamic”添加到我的标志并继续前进。事情运作良好。

现在我发现在 Windows 上似乎没有等价物:(。那么什么是好的解决方案?

到目前为止,我想出的最好的方法是在我的主应用程序中填充一个结构,该结构具有指向插件可能关心的每个对象/函数的指针。然后将其传递给插件的 " init()" 函数,现在它具有指向所有内容的正确指针,但这是一个烦人的解决方案,因为现在每当我添加某些内容时,我都必须在多个地方进行更改。

有更好的解决方案吗?SO 社区是如何处理这个问题的?

0 投票
2 回答
1289 浏览

qt - .ui 中的信号和插槽连接

我已经开始使用 Qt 4。然后我遇到了Qt Designer的问题。
Signal/Slots 编辑器中,我只能设置那里列出的连接,而不是列出所有插槽。

如果我尝试在 .ui 文件中手动添加它,连接将无法正常工作。
如果我将它添加到 ui_*.h 文件中,它可以正常工作,但是当我更改设计时连接会被删除。

有人对我如何解决这个错误有什么好的建议吗?或者换个方式问:
如何让 Qt Designer 列出所有可用的插槽?

0 投票
3 回答
471 浏览

design-patterns - 使用自动删除机制撤消重做

我的应用程序是使用 Qt 在 C++ 中开发的,并且正在使用信号和插槽。

假设我有以下类(伪 C++ 代码):

使用我的应用程序,用户可以添加/删除球员,并为每个球员决定球的颜色和大小。在引擎盖后面,GeneralHandler 负责存储球并删除它们。两名球员使用同一个球是完全可能的。

当一个球员被删除时,如果球不再被使用,GeneralHandler 应该删除它(如果球仍然被另一个球员使用,则保留它)。如果球员正在使用的球被改变,前一个球,如果不再使用,也应该被 GeneralHandler 删除。

到现在为止还挺好。

现在,我想使用命令模式向我的应用程序添加撤消/重做功能,这就是我卡住的地方。可以说我有这样的事情:

我猜 redo() 方法看起来像这样:

如果上面的代码中没有任何其他更改,那么如果其他玩家不再使用之前的 Ball 将被删除。这在实现 undo() 方法时会出现问题:如果前一个球已被删除,我不知道它的特征是什么,并且 undo 命令将无法重新创建它。或者也许我应该存储前一个球,但是撤消/重做命令如何知道这个前一个球是否仍然存在或已被处理程序删除?或者也许应该在撤消命令中实现这种一旦不再使用就删除球的机制?问题是 undo 命令会对许多其他类有很多依赖。另一个问题是此代码将在 DeletePlayer 命令中部分重复,这将不得不执行类似的操作:

我希望我的解释可以理解!

你将如何解决这个问题?我找不到令人满意的解决方案。

谢谢 !

0 投票
2 回答
39634 浏览

c++ - 如何访问 qt 上的父窗口小部件?

我有一个继承的 QTreeWidget(称为 PackList)类,它的父类是 KXmlGuiWindow。如何访问父母的插槽?

我已经尝试了 QTreeWidget 类中的 getParent()->mySlot() 但我有

有人知道正确的方法吗?谢谢

0 投票
1 回答
1563 浏览

linux - 从 QTreeWidgetItem 继承的类中获取数据

我有一个继承自 QTreeWidgetItem 的类,我拦截了点击事件。

当我单击树行时,我需要从 MY QTreeWidgetItem 中获取另一个对象,我该怎么做?

0 投票
1 回答
3041 浏览

c++ - 如何将 QVariant 转换为自定义类?

我在 QTreeWidgetItem 中有一个 QVariant 对象,如何将其转换为我自己的对象?

0 投票
5 回答
27968 浏览

windows - Qmake中win64配置的标识符

Qmake 项目文件中是否有“win64”标识符?Qt Qmake高级文档除了unix/macx/win32之外没有提到。

到目前为止,我已经尝试使用:

结果总是“使用win32”。

我必须为 x32 和 x64 项目使用单独的项目文件,以便它们可以针对正确的库进行编译吗?有没有其他方法可以识别 32 位和 64 位环境?

0 投票
2 回答
2296 浏览

linux - QVariant 和 qRegisterMetaType 问题

我有一个类 Pkg,我需要以 QVariant 的形式使用它。

在我的 Pkg.h 结束时,我有:

这不会产生编译错误,但在我的 main.cpp 中我必须这样做:

这也不会产生错误,但是当我尝试创建 QVariant(Pkg) 时,会出现很多错误,例如:

和错误再次错误......

0 投票
6 回答
23626 浏览

c++ - 混合 Qt 和 Boost

我正在考虑使用 Qt 4 框架在 C++ 中启动一个项目(需要跨平台 GUI)。我从朋友和网上听到了关于 Boost 库的好消息。我已经开始阅读两者,并想在深入之前问一个粗略的问题:这两个开发“系统”是否相互排斥?

我最初的搜索和阅读显示在信号处理、自定义构建系统和其他低级原语中存在一些重叠。

在同一个项目中同时使用它们是否有意义?

0 投票
2 回答
595 浏览

c++ - 如何设置理想的 QPixmapCache::cacheLimit?

我刚刚开始使用 QPixmapCache,我想知道,因为没有太多文档,关于如何根据应用程序运行的系统调整大小。

一些用户可能有很多可用内存,而另一些用户则很少。我不知道最好的设置是什么。

检测系统(空闲)RAM 并调整缓存大小以适应的最佳方法是什么?

http://doc.trolltech.com/4.4/qpixmapcache.html#setCacheLimit