如何在 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" 以使用启动器启动程序.
现在可以与所有标题栏、框架和控制按钮完美配合。
我在 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" 以使用启动器启动程序.
现在可以与所有标题栏、框架和控制按钮完美配合。