如何在 RPi3 上的交叉编译应用程序的主窗口上显示边框和标题栏?

How do I show Border Frame and Title Bar on MainWindow on Cross Compiled Application on an RPi3?

我在 Ubuntu 18 上使用基于 5.9.5 的 QT Creator 4.5.2 来构建专为 Raspberry Pi 3 运行 Stretch(交叉编译)设计的应用程序。

我可以在 RPi3 上启动应用程序,但主窗口是全屏的,没有控制按钮也没有标题栏,我似乎不知道如何更改它。我已经尝试了 .show()、.showMaximized() 和 .showFullScreen(),它们都产生了与没有框架或控制按钮的全屏应用程序相同的结果。

我可能在这里遗漏了什么?为简洁起见,这里是 main.cpp 和 mainwindow.h 文件的缩写版本:

注释掉的行是我尝试过的 .show 函数,所有这些函数似乎都产生相同的结果。注意:代码中其他任何地方都没有对任何 .show 函数的其他引用。

main.cpp:

#include "mainwindow.h"
#include <QDialog>
#include <QApplication>
#include <QScreen>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QScreen *screen = QGuiApplication::primaryScreen();
    QRect  screenGeometry = screen->geometry();
    int height = screenGeometry.height();
    int width = screenGeometry.width();
    MainWindow w;
    w.resize(height-100, width-100);
    w.setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowFullscreenButtonHint | Qt::WindowTitleHint);
    //w.show();
    //w.showMaximized();
    w.showFullScreen();
    return a.exec();
}

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QObject>
#include <QCloseEvent>
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private slots:
    void closeApp();
};

#endif // MAINWINDOW_H

经过一番摸索,发现是QT Creator中没有为交叉编译的RPI3设置两个环境变量。这是我解决它的方法:

在 QT Creator 中,我转到模式选择器 -> 项目。然后转到我的 Raspberry Pi 3 的 运行 设置。在 运行 环境部分,我单击了获取设备环境。然后在设备环境中我根据https://forum.qt.io/topic/83929/qxcbconnection-could-not-connect-to-display/16的推荐添加了以下两个环境参数:

Variable Value

DEVICE :0

XAUTHORITY /home/pi/.Xauthority

我在 RPi 上使用 bash 脚本启动程序,因此可以使用 sudo 启动程序(我也将使用 pigpio)并将命令行参数“-platform xcb”添加到启动器脚本。因此,在项目 运行 设置中,我还将 Raspberry PI 运行 项目设置的 运行 部分更改为 /home/pi/Desktop/runapp.sh" 以使用启动器启动程序.

现在可以与所有标题栏、框架和控制按钮完美配合。