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

标签 qt window qnx

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

该应用程序使用带菜单栏的 QMainWindowQGLWidget 作为中央小部件。

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

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

非常感谢任何帮助!

最佳答案

Qt 平台插件的实现考虑了平台的功能和限制。看起来 QNX 只支持窗口切换,没有像 Windows 或 Linux 中那样的成熟窗口管理,因此 Qt 应用程序是隐式的,并且可能本质上是全屏的。

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

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

这就是我所说的“自由 float 小部件”的含义:

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

关于qt - 如何根据特定位置和大小在 QNX 上显示 Qt(小部件)应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070727/

相关文章:

c++ - 如何使用 qt 的 QTextStream 编写 QList 存储项?

python - 无论如何,是否可以将事件处理程序绑定(bind)到正在移动的 Tkinter 窗口?

ssh - 你如何在qnx上安装ssh服务器?

gdb - 我怎样才能在 gdb 中调试这个 SIGSEGV?

c - 下面的c程序有什么错误?

c++ - qmake 不会将 .pro 文件中的库添加到 makefile

python - 如何让 pyuic4 自动将标签设置为 "MainWindow"?

linux - tcp 接收窗口更新

c++ - A星算法。获得最佳路径

wpf - 在 WPF 中为 ToolWindow 添加图标