Die Verwendung von Qopenglwidget in einem Fenster mit einer benutzerdefinierten Titelleiste verursacht ein schwarzes RecC++

Programme in C++. Entwicklerforum
Anonymous
 Die Verwendung von Qopenglwidget in einem Fenster mit einer benutzerdefinierten Titelleiste verursacht ein schwarzes Rec

Post by Anonymous »

Ziel ist es, eine App unter Windows zu haben, die QMainWindow mit einer benutzerdefinierten Titelleiste und einem QOPENGLWIDGE . Fenster:

Also, zurück auf plattformspezifische Win32 wm_nccalcsize

Code: Select all

#include 
#include 
#include 
#include 
#include 

class MyGLWidget : public QOpenGLWidget {
Q_OBJECT
protected:
void initializeGL() override { QOpenGLContext::currentContext()->functions()->glClearColor(1.0f, 0.0f, 1.0f, 1.0f); }
};

class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow() { setCentralWidget(new MyGLWidget); }
protected:
bool nativeEvent(const QByteArray& eventType, void* message, qintptr* result) override
{
MSG* msg = reinterpret_cast(message);
switch (msg->message) {
case WM_NCCALCSIZE: {
NCCALCSIZE_PARAMS* params = (NCCALCSIZE_PARAMS*)(msg->lParam);
params->rgrc[0].right -= 8;  // Sizes hard-coded for brevity
params->rgrc[0].left += 8;
params->rgrc[0].bottom -= 8;
*result = 0;
return true;
}
// case WM_NCHITTEST omitted for brevity
}
return false;
}
};

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}

#include "main.moc"
< /code>
Titlebar.pro:
QT += core gui openglwidgets widgets
SOURCES += main.cpp
Auf den meisten Maschinen ergibt dies das gewünschte Ergebnis:



Ersetzen Sie die Qopenglwidget mit einem normalen Qwidget und es sieht bei allen Maschinen richtig aus. MainWindow :: NativeEvent () und setze qt :: CustomizeWindowHt auf dem Fenster stattdessen und das Problem des schwarzen Rechtecks ​​verschwindet, aber das oben genannte dicke weiße Rahmenproblem tritt stattdessen stattdessen auf. /> Gibt es eine Möglichkeit, Qt :: CustomizeWindowHint zu verwenden, der das Problem des weißen Rahmens vermeidet, ohne den nativen Event () ? v6.2.0 unter Windows 10 V21H1. Bestimmte OpenGL -Treiber.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post