【问题标题】:How do I show Border Frame and Title Bar on MainWindow on Cross Compiled Application on an RPi3?如何在 RPi3 上的交叉编译应用程序的 MainWindow 上显示边框和标题栏?
【发布时间】:2019-01-28 12:27:38
【问题描述】:

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

我可以在 RPi3 上启动应用程序,但 MainWindow 是全屏的,没有控制按钮也没有标题栏,我似乎不知道如何更改它。我已经尝试过 .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();
}

主窗口.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 中的所有示例似乎都没有在 Raspberry PI 上生成框架窗口。这很奇怪。有人有想法吗?

标签: c++ qt-creator mainwindow


【解决方案1】:

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

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

变量值

设备:0

XAUTHORITY /home/pi/.Xauthority

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

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

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2015-04-24
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    相关资源
    最近更新 更多