How to change screen resolution using QT, OpenGL, C ++ and Linux?

I just want to make a full screen game. I know how to change the permission on Windows, but how to change the permission on Linux? Is there a solution for cross-platform QT โ€‹โ€‹for this? I also have borders around my GLWidget. How to make the widget close the entire window?

I will just send the code:

#include <QtOpenGL> class GLWidget : public QGLWidget { public: void initializeGL() { glClearColor(0.0f, 0.0f, 1.0f, 0.0f); glClearDepth(1.0f); } void paintGL() { glClear(GL_COLOR_BUFFER_BIT); } void resizeGL(int width, int height) { int side = qMin(width, height); glViewport((width - side) / 2, (height - side) / 2, side, side); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-0.5f, +0.5f, -0.5f, +0.5f, 4.0f, 15.0f); glMatrixMode(GL_MODELVIEW); } }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QDesktopWidget *desktop = app.desktop(); QWidget window; GLWidget *glWidget = new GLWidget; QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(glWidget); window.setLayout(mainLayout); window.setWindowTitle("Hello GL"); window.resize(QSize(640, 480)); window.show(); window.showFullScreen(); return app.exec(); } 
+6
source share
1 answer

You can use xrrsetscreenconfigandrate as described here :

 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<X11/Xlib.h> #include<X11/extensions/Xrandr.h> Display *dpy; Window root; int num_sizes; XRRScreenSize *xrrs; XRRScreenConfiguration *conf; short possible_frequencies[64][64]; short original_rate; Rotation original_rotation; SizeID original_size_id; int main(int argc, char *argv[]){ // // CONNECT TO X-SERVER, GET ROOT WINDOW ID // dpy = XOpenDisplay(NULL); root = RootWindow(dpy, 0); // // GET POSSIBLE SCREEN RESOLUTIONS // xrrs = XRRSizes(dpy, 0, &num_sizes); // // LOOP THROUGH ALL POSSIBLE RESOLUTIONS, // GETTING THE SELECTABLE DISPLAY FREQUENCIES // for(int i = 0; i < num_sizes; i ++) { short *rates; int num_rates; printf("\n\t%2i : %4i x %4i (%4imm x%4imm ) ", i, xrrs[i].width, xrrs[i].height, xrrs[i].mwidth, xrrs[i].mheight); rates = XRRRates(dpy, 0, i, &num_rates); for(int j = 0; j < num_rates; j ++) { possible_frequencies[i][j] = rates[j]; printf("%4i ", rates[j]); } } printf("\n"); // // GET CURRENT RESOLUTION AND FREQUENCY // conf = XRRGetScreenInfo(dpy, root); original_rate = XRRConfigCurrentRate(conf); original_size_id = XRRConfigCurrentConfiguration(conf, &original_rotation); printf("\n\tCURRENT SIZE ID : %i\n", original_size_id); printf("\tCURRENT ROTATION : %i \n", original_rotation); printf("\tCURRENT RATE : %i Hz\n\n", original_rate); // // CHANGE RESOLUTION // printf("\tCHANGED TO %ix %i PIXELS, %i Hz\n\n", xrrs[1].width, xrrs[1].height, possible_frequencies[1][0]); XRRSetScreenConfigAndRate(dpy, conf, root, 1, RR_Rotate_0, possible_frequencies[1][0], CurrentTime); // // SLEEP A WHILE // usleep(6000000); // // RESTORE ORIGINAL CONFIGURATION // printf("\tRESTORING %ix %i PIXELS, %i Hz\n\n", xrrs[original_size_id].width, xrrs[original_size_id].height, original_rate); XRRSetScreenConfigAndRate(dpy, conf, root, original_size_id, original_rotation, original_rate, CurrentTime); // // EXIT // XCloseDisplay(dpy); } // // gcc -o Xrandr Xrandr.cc -lX11 -lXrandr -lstdc++ // 
+3
source

Source: https://habr.com/ru/post/919992/


All Articles