如何使用QT,OpenGL,C ++和Linux改变屏幕分辨率? [英] How to change screen resolution using QT, OpenGL, C++, and Linux?
本文介绍了如何使用QT,OpenGL,C ++和Linux改变屏幕分辨率?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只想做一个全屏幕游戏。我知道如何在Windows上更改分辨率,但如何在Linux下更改分辨率?有没有跨平台的QT解决方案?还有我的GLWidget的边界。如何使窗口小部件覆盖整个窗口?
I just want to make a full screen game. I know how to change resolution on Windows but how do I change the resolution under Linux? Is there a cross platform QT solution for this? Also I've got borders around my GLWidget. How do I make the widget cover the entire window?
我要发布代码:
#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();
}
推荐答案
=http://linux.die.net/man/3/xrrsetscreenconfigandrate =nofollow> xrrsetscreenconfigandrate ,如下所述此处:
You can use xrrsetscreenconfigandrate, as explained 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 %i x %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 %i x %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++
//
这篇关于如何使用QT,OpenGL,C ++和Linux改变屏幕分辨率?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文