【问题标题】:Qt to .Net integration: resize issueQt 到 .Net 集成:调整大小问题
【发布时间】:2017-03-14 10:08:27
【问题描述】:

我正在编写一个应该集成到 .Net 应用程序的 Qt 小部件。 我使用this 文章为 WPF 编写了一个包装类。 我面临的问题是小部件没有占用分配给它的整个空间。它在附加的图像上很容易看到。

我想知道这个问题是否有一个简单的解决方案,不涉及使用 COM/ActiveX,因为我想让我的类在 .Net 中很容易看到?

【问题讨论】:

  • 您关注的文章通过本机窗口等提供了一条不必要的迂回路线。这是一个性能杀手,不需要。 Qt 可以将您的小部件呈现为QImage,您只需将其连接到 WPF 控件中即可;同样,您可以翻译 WPF 控件中的事件并将它们传递给您的 QWidget
  • @Kuba 很有趣,但这种方法似乎也很间接。
  • 这并不是所有的间接,内部 WPF 或多或少地做同样的事情。现代 UI 几乎渲染为位图,并使用 CPU 或 GPU 合成位图和一些几何图形...
  • @Kuba 实际上在我的情况下它会执行得更慢,因为正如我在对 Elmar 的评论中提到的,我需要 Qt 数据可视化模块,而该模块又使用 OpenGL。并且对于 OpenGL(以及其他图形库)渲染到纹理比渲染到屏幕要慢。

标签: c# c++ .net wpf qt


【解决方案1】:

您将不得不使用 COM 对象和接口来完成工作。没有办法解决这个问题,因为您必须操纵表单来嵌入现有的应用程序。 MSDN 和 stackoverflow 上有很多关于这方面的信息,但这种实现并非没有副作用,即良好的集成外观。

您可以将嵌入式 win32 Qt 应用程序/小部件居中,然后相应地为您的 WPF 容器着色,但由于您仍在忙于编写 Qt 小部件,我建议您宁愿在 WPF 和 c# 中编写整个应用程序,因为这将有一个更好的外观和感觉,以及节省 Qt 商业用途的许可成本。通过使用 WPF,无论如何您都在使您的应用程序依赖于 Windows。如果您使用 Qt 来获得 c++ 性能优势,请编写小型 c++ cli 应用程序并在必要时通过 c# 代码执行它们。

【讨论】:

  • This 文章似乎并没有强迫您只使用 COM。那里说,您可以选择是编写自己的包装器还是使用 ActiveQt。
  • 我完全理解您想要做的事情并且这是可能的,但是您为什么要这样做并让您的生活变得困难?当他们都可以(大部分)做对方可以做的事情时,为什么要使用完全不同的技术?我不是想搞笑,我只是想了解您对事物的看法。
  • 我需要弄清楚将 Qt 小部件嵌入到 .Net 应用程序中有多难以及它会导致什么问题。我需要的是 3D Surface 图形可视化(来自 Qt Data 可视化模块)。我知道有像 SciChart 这样的基于 C# 的解决方案,但它不符合我们的需求。由于该公司无论如何都在考虑购买 Qt 许可证,因此我被要求进行这项小型研究。
  • 这完全可以理解。我在大学时使用过 Qt,它是一个非常通用的框架,有很多很棒的 GUI 小部件。我真的希望你能找到解决办法。
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2011-07-05
  • 2013-04-15
相关资源
最近更新 更多