如何根据具体位置和大小在QNX上显示Qt(小部件)应用?

时间:2015-10-11 22:18:36

标签: qt window qnx

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

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

在Linux桌面上运行的相同代码运行正常,基于提供的x& y以及提供的尺寸。

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

Qt平台插件在实现时考虑了平台功能和限制。好像QNX只支持窗口切换,没有像Windows或Linux那样完整的窗口管理,因此Qt应用程序是隐式的,可能本质上是全屏的。

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

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

这就是我所说的“自由浮动小部件”:

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