如何显示Qt(小部件)应用程序在QNX基于特定的位置和大小



我试图使我的Qt小部件为基础的应用程序运行在QNX设备上的特定位置和使用QWidget::setGeometry(..)的大小,但它总是得到全屏显示。

该应用程序使用QMainWindow带菜单栏和QGLWidget作为中心小部件。

相同的代码运行在Linux桌面上工作良好,定位基于提供的x &y和提供的大小。

QNX上的窗口系统不支持这个吗?还是Qt不能在QNX上使用窗口系统?还是别的什么?我不明白:(

任何帮助都非常感谢!

Qt平台插件是考虑到平台的能力和限制而实现的。似乎QNX只支持窗口切换,没有像windows或linux那样的完整的窗口管理,因此Qt应用程序是隐式的,可能本质上是全屏的。

如果你不想让它出现在整个屏幕上,只需实现一个空白的主窗口,并通过让它自由浮动来定位中心小部件,而不是放在主窗口内的布局中。

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

这就是我所说的"自由浮动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不再被布局锚定,它可以自由移动到任意位置,它仍然在其容器小部件的范围内绘制,容器小部件只是一个空白小部件集,作为窗口的中心小部件,并且生命周期也自动管理。

最新更新