为什么我的窗口不显示?
Why does my window not show?
我需要写一个GrabWindow
,所以我从QQuickWindow
派生了我的类GrabWindow
:
#include <QtQuickWidgets/QtQuickWidgets>
#include <QString>
class GrabWindow : public QQuickWindow {
Q_OBJECT
public:
explicit GrabWindow(QQuickWindow *parent = nullptr);
public slots:
void capture(QString const &path);
};
// .CPP
#include "grab_window.h"
#include <QImage>
GrabWindow::GrabWindow(QQuickWindow *parent) : QQuickWindow(parent) {
}
void GrabWindow::capture(const QString &path) {
QImage img = this->grabWindow();
img.save(path);
}
我在QML中注册后:qmlRegisterType<GrabWindow>("myapp", 1, 0, "GrabWindow");
在我在 QML 中定义我的窗口之后:
import QtQuick 2.4
import QtQuick.Controls 2.2
import QtQuick.Window 2.3
import myapp 1.0
GrabWindow {
id : translationWindow
width : 1024
height : 768
color: "transparent"
visibility: "FullScreen"
visible: true;
signal capture(string path)
MouseArea {
anchors.fill: parent
onClicked: translationWindow.capture("/home/user/saveTest.jpg")
}
}
但它不会在开始时显示(我知道它是透明的,我的意思是抓取窗口不会开始显示)。如果我不使用Window
或ApplicationWindow
而不是GrabWindow
那么一切正常,我看到的是一个透明的全屏窗口。
怎么了?
不会显示您的GrabWindow
,因为当您设置visible
属性时,它与使用Window
的visible
属性时不同。
你的只是QWindow
的visible
财产.Window
不直接实例化QQuickWindow
,而是实例化一个私有的Qt类QQuickWindowImpl
,该类用自定义属性覆盖visible
属性。 它似乎延迟了稍后QWindow::setVisible
的实际呼叫。
因此,我不认为QQuickWindow
是要继承的。您可以尝试在Component.onCompleted
中执行visible = true
,但我不确定它是否会解决您的问题。
相反,我建议您不要子类化QQuickWindow
而只是创建一个新类型并将其传递给现有Window
。
可能的 API 可能是:
Window {
id: myWindow
//...
MouseArea {
anchors.fill: parent
onClicked: WindowGrabber.grab(myWindow, path) //singleton type
}
}
或
Window {
id: myWindow
//...
WindowGrabber { // regular type
id: windowGrabber
window: myWindow
}
MouseArea {
anchors.fill: parent
onClicked: windowGrabber.grab(path) // you could even add a path property in WindowGrabber and not have it as a function parameter if that makes sense for your use case
}
}
相关文章:
- 使用 while 循环时不显示窗口
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- SDL视频显示窗口:如何连接窗口关闭事件回调
- Qt:缓慢启动时显示窗口内容
- 为什么MessageBox在我创建的桌面中显示窗口,而AllocConsole在上一个桌面中显示它
- 如何显示窗口大小不同的输出图像?通过使用 cv::Mat
- QMLApplicationViewer 多个实例仅首先显示窗口
- 为什么HWND_NOTTOPMOST无法在xp中显示窗口前景
- 基本C++SFML显示窗口错误
- 使用Richedit控件时,基于对话框的Win32 API程序将不会显示窗口
- 显示窗口的极简主义Visual C++应用程序
- Win32:是否可以显示窗口,但在任务栏中隐藏它
- OpenCV-关闭图像显示窗口
- IWebBrowser2在渲染完成后显示窗口
- 防止在调用SDL_SetVideoMode后显示窗口
- 如何使用rad studio显示窗口总数
- Opencv highgui显示窗口
- 使用sfml显示窗口
- 跨平台c++库/库:显示窗口,在屏幕上渲染2D形状,在屏幕上渲染文本
- 用于创建菜单栏的c++ win32程序(程序编译并运行,也显示窗口但不显示菜单栏)