如何根据特定位置和大小在 QNX 上显示 Qt(小部件)应用程序?

How to show Qt (widgets) app on QNX based on specific location and size?

我正在尝试使用 QWidget::setGeometry(..) 在 QNX 设备上的特定位置和大小上将我的基于 Qt 小部件的应用 运行,但它总是全屏显示。

该应用使用 QMainWindow 菜单栏和 QGLWidget 作为中央小部件。

相同的代码 运行ning 在 Linux 桌面上工作正常,根据提供的 x & y 和提供的大小定位。

QNX 上的窗口系统不支持这个吗?或者是 Qt 不能在 QNX 上使用窗口系统?或者是其他东西?我不明白:(

非常感谢任何帮助!

Qt 平台插件是在考虑平台功能和限制的情况下实现的。似乎 QNX 只支持 window 切换,没有像 windows 或 linux 中那样的完整的 window 管理,因此 Qt 应用程序是隐式的,并且可能本质上是全屏的。

如果您不希望它出现在整个屏幕上,只需实现一个空白的主窗口 window 并通过使其自由浮动而不是将其放置在主窗口内的布局中来定位中央小部件 [=25] =].

但这并不意味着您将能够在屏幕上放置更多应用程序,您只是不会将整个屏幕用于它显示的一个应用程序 window。您可以通过简单地使用多个小部件来伪造多个应用程序并实现您自己的伪造 window 管理器,需要注意的是您仍将使用一个进程,这可能会或可能不会成为问题。

我的意思是 "free floating widget":

class YourWidget : public QWidget {
    Q_OBJECT
public:
    YourWidget(QWidget * p) : QWidget(p) { resize(100, 100); }
    void paintEvent(QPaintEvent *) {
        QPainter p(this);
        p.fillRect(rect(), Qt::black);
    }
};

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0) : QMainWindow(parent) {
        resize(500, 500);
        QWidget * blank = new QWidget;
        setCentralWidget(blank);
        widget = new YourWidget(blank);
        widget->move(rect().center());
    }

    void mousePressEvent(QMouseEvent * e) {
        widget->move(e->pos());
    }
private:
    YourWidget * widget;
};

YourWidget 不再由布局锚定,它可以自由移动到任意位置,它仍然在其容器小部件的范围内绘制,这只是一个空白小部件设置为 window 的中央小部件和生命周期也是自动管理的。