问题标签 [qwindow]

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 回答
110 浏览

c++ - QWindow 提示不起作用

我试图隐藏 QWindow 对象的栏,但它不起作用。目的是在 MDI 区域中的 QWindows 对象上显示来自 Ogre3D 的场景。

这是主窗口中的代码:

它看起来像这个截图

有人知道出了什么问题吗?谢谢您的支持。

0 投票
0 回答
569 浏览

c++ - 在 Qt 中创建自定义类类型的窗口

这是我在这里的第一个问题,所以我尽量不要听起来很愚蠢!

解释:

我在 Qt 中有一个主窗口,它有一个按钮可以在主窗口中创建(子?)窗口。这可以根据用户的需要进行多次,并且每个子窗口都显示相同的属性/项目集。我认为编写一个类来保存所有这些属性将是一种聪明的方法(这将继承主窗口类),因为子窗口的每个实例都会自动获取属性。我正在使用一个插槽来创建每个实例。

问题:

除了所需的属性之外,我应该向子窗口类添加什么来让 Qt 知道如果我创建了该类型的对象,它应该打开一个窗口?

例如,假设我在一个看起来像这样的头文件中实现了所有子窗口属性:

那么我将如何实现我的插槽?像这样?

我的问题是我没有看到任何代码表明这window是一个单独的窗口。我可以看到它是 type ChildWindow,但是否只包括QDialog给它show()功能?

编辑:

我意识到第一个建议是尝试看看这是否有效,但在不太可能的情况下它有效,我不会学到任何东西,我仍然不知道它为什么有效,如果没有,我会回来在这里问同样的问题。我希望你们能理解。

编辑2:

所以我猜包括QDialog没有做到这一点

编辑 3:

如果我将它添加到ChildWindow构造函数

我是否也必须在插槽定义中做同样的事情?

0 投票
1 回答
845 浏览

python - 在子 multiprocessing.Process (Python3) 中打开 PyQt5 窗口

我正在尝试在新进程中打开第二个窗口,以便不使用 PyQt5 冻结主窗口。multiprocessing.Process出于这个原因,我定义了一个继承自窗口并显示窗口的新类。这是主要代码:

进程被创建并获得一个 PID。调用 run() 函数时,会显示消息“正在打开窗口..”,但没有其他任何反应。没有窗口,没有错误……我不知道发生了什么。先感谢您!

0 投票
1 回答
1563 浏览

qt - 如何拦截和取消窗口的最小化?

我的项目中有一个Window子类,在运行时该实例被创建并完全显示在 QML 端。我知道我可以通过不包含 来防止窗口被最小化WindowMinimizeButtonHintflags:但我实际上需要存在并启用最小化按钮,但能够拦截最小化按钮单击,取消实际最小化,并执行其他操作(仅供参考,我的客户需要这种非标准的窗口行为,而不是我)。

到目前为止,我唯一能够实现的就是处理onWindowStateChanged:事件,检查是否windowState === Qt.WindowStateMinimizedshow()从计时器调用(在事件处理程序中直接调用它什么都不做)。这导致窗口向下移动到系统托盘,然后突然恢复正常。

有没有办法做到这一点,比如OnMinimized可以取消的活动?

编辑:根据 Benjamin T 的回答,我至少是 OSX 解决方案的一部分:

在这个例子中,我能够拦截和取消所有 NSKeyDown 事件(同时让其他事件如鼠标点击等仍然有效)。剩下的问题是我仍然不知道要拦截最小化事件- NSEvent.h 似乎没有任何内容。也许我需要转换到不同类型的事件?

编辑 2 - 工作解决方案:

我无法找到任何方法来正确拦截最小化事件并取消它,所以我的解决方法是拦截窗口上的点击,确定点击是否在最小化按钮(或关闭或缩放按钮)上并取消如果是这样的事件(并向我的 qml 窗口发送点击发生的通知)。我还处理了双击标题栏以缩放窗口并使用 Command-M 键最小化窗口的情况。

第一步是实现一个QAbstractNativeEventFilter. 在您的标题中:

实施:

然后在 main.cpp 中:

0 投票
0 回答
1149 浏览

qt - 具有半透明背景的 Qt 无框窗口,没有错误“UpdateLayeredWindowIndirect failed”

自从一段时间以来,我遇到了一个错误,例如UpdateLayeredWindowIndirect failed for ptDst=...带有圆角的无框窗口:我将主窗口设置为无框并绘制了一个带有圆角的内部小部件。

Qt这里有一个讨论,警告的代码已经添加到这里。他们说:

所以,是的,这一直在默默地失败。半透明(WS_EX_LAYERED)仅适用于无框架顶层窗口是对 Windows 的限制。

但是,我只在我的主顶层窗口上设置了半透明:

那么我该如何做正确并避免错误呢?


印象它的样子: 无框窗圆角

0 投票
1 回答
57 浏览

user-interface - PyQT5:如何连续打开和关闭 3 个窗口

我的 GUI 过程中有问题。我有 3 个窗口,它是主窗口 -> 第二个窗口 -> 第三个窗口,然后退出。单击转到第 2 个窗口的按钮时效果很好,但是如果我单击转到第 3 个窗口的按钮,它会崩溃。

整个过程崩溃,没有说任何错误。

这是我的第一个窗口的代码:

这是第二个窗口的代码:

这是第三个窗口的代码:

有人可以告诉我为什么单击按钮时该过程会在第二个窗口中崩溃以及为什么它无法进入第三个窗口?

0 投票
1 回答
951 浏览

performance - QOpenGLWindow 和 QOpenGLWidget 在性能上有什么区别?

我一直在研究QOpenGLWindowQOpenGLWidget这两个类。在 QOpenGLWindow 的文档中它指出:“与 QOpenGLWidget 不同,QOpenGLWindow 不依赖于小部件模块并提供更好的性能。” 在我当前的项目中,我制作了QMainWindow一个在 Dock Widget 上QDockWidget带有一个的。OpenGLWidget

对于这个项目,我将需要 GL 部分尽可能高效,所以我想知道是否值得尝试将其转换为QOpenGLWindow. 但是,我不知道性能差异是什么。如果它是微不足道的,那么我将保留我目前的格式,如果它有很大的不同,那么我会转换它。

有谁知道性能差异是什么?

0 投票
0 回答
163 浏览

qt - 上下文菜单事件在 QOpenGLWindow 中不起作用

我正在子类化QOpenGLWindow(不是QGLWidgetor QOpenGLWidget)并调用

将其放置在 parent 的布局中QWidget

窗口正确显示并且我可以与之交互,但是container当我在my_opengl_window. 如果我右键单击窗口与其容器之间的细长边距,我会得到一个上下文菜单。

以上显示我my_opengl_window正在接收鼠标点击。我也尝试过e->ignore (),但父母仍然没有收到上下文菜单事件。

此外,setCursorsetToolTip容器小部件没有任何影响。我怀疑这可能是相关的。

如何让这些鼠标事件在QOpenGLWindow容器上工作?

0 投票
1 回答
866 浏览

python - 在 Pyqt5、QWindow 中,showMaximized() 不起作用。为什么?

这是一个很小的简单代码。

在此代码中,self.showMaximized() 不起作用。

即使它那么小,我也不知道为什么。


删除'screen.show()',然后showMaximized() 工作。

0 投票
1 回答
33 浏览

macos - 在 MacOS 上使用 cmd + h 隐藏时无法显示() QWindow

我有一个问题,当它被 MacOS 快捷方式隐藏时,我无法提升我的应用程序窗口。它在所有其他情况下都能正常工作。

在我的应用程序中,我调用了 1 个主 qWindow QWindow* mMainWindow; ,并将以下代码添加到托盘按钮

当我只使用 qtmMainWindow->hide()然后将其升起时,mMainWindow工作正常。当应用程序处于活动状态和隐藏时,方法mMainWindow->isActive()返回正确的状态。truefalse

但是当我在mac“cmd + h”中使用内置隐藏应用程序时,无论应用程序是否隐藏,都会mMainWindow->isActive()返回。true调用我的操作项无济于事,mMainWindow始终保持隐藏状态。

有什么解决方案可以解决这个问题吗?我见过人们推荐使用QWidget而不是QWindow调用widget->activateWindow(),但这不是我可以使用的解决方案。