Qt5.6 RHEL全屏应用程序窗口和子窗口

Posted

技术标签:

【中文标题】Qt5.6 RHEL全屏应用程序窗口和子窗口【英文标题】:Qt5.6 RHEL Fullscreen application window and child window 【发布时间】:2016-04-28 08:30:22 【问题描述】:

我正在编写一个 C++ Qt 应用程序,主窗口占据整个屏幕,子窗口包含模拟控件。

我正在使用 RHEL 7.2 和 Qt 5.6。问题是子窗口虽然在任务列表中可见,但在显示器上不可见。

    clsMainWin::clsMainWin(QRect rctScr, QWidget *parent) : QMainWindow(parent)
                                                    ,ui(new Ui::clsMainWin) 
        ui->setupUi(this);
    //Set-up window container background and size
        setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        setWindowIcon(QPixmap(1,1)));
        setGeometry(rctScr);
    //Display the window container
        showFullScreen();
    #ifdef SIM_WINDOW
        mpobjSimWin = NULL;
    #endif
    
    void clsMainWin::paintEvent(QPaintEvent* pEvt) 
    //Prevent compiler warning!
        pEvt = pEvt;
    //Get painter context
        QPainter objPainter(this);
    //Fill the root area with the chosen colour
        objPainter.fillRect(geometry(),
            QColor(mpobjRoot->strGetAttr(mcszXMLattrColorBg)));
     #ifdef SIM_WINDOW
        if ( mpobjSimWin == NULL ) 
            mpobjSimWin = new clsSimWin(this);
            mpobjSimWin->setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
            mpobjSimWin->raise();  // for MacOS
            mpobjSimWin->activateWindow(); // for Windows
        
    #endif
    

模拟窗口中的构造函数sn-p:

    clsSimWin::clsSimWin(QWidget *parent) : QDialog(parent)
                                   ,ui(new Ui::clsSimWin) 
        assert(parent != NULL);

        ui->setupUi(this);
    //Set the window title
        this->setStyleSheet("background-color: white;");
        setWindowTitle("Data simulator");
    //Set-up window
        Qt::WindowFlags flags = (Qt::Window
                               | Qt::WindowTitleHint
                               | Qt::CustomizeWindowHint)
                              & ~Qt::WindowMaximizeButtonHint;
        setWindowFlags(flags);
        setFixedSize(mcintWindowWidth, mcintWindowHeight);
    //Display the window
        show();
    

这不是所有的代码,但希望足以说明我做了什么以及问题可能出在哪里?

【问题讨论】:

【参考方案1】:

通过将调用移动到构造函数之外的显示方法来修复。

【讨论】:

以上是关于Qt5.6 RHEL全屏应用程序窗口和子窗口的主要内容,如果未能解决你的问题,请参考以下文章

C#创建wpf应用程序,如何不显示标题栏并使窗口全屏?

Electron 应用程序 - 如何在全屏模式下禁用/隐藏任务栏中的窗口

如何以编程方式关闭全屏模式NSWindow?

在 Gnome 3 下使用 Qt,Xfce 和 Unity 一个带有子窗口的全屏窗口不会停留在顶部

C++ 获取全屏窗口的设备上下文

MFC 中的全屏窗口