c++ - 使用 Qt OpenGL 进行文本裁剪

标签 c++ qt opengl clipping

我目前正在使用 Qt5.1 并尝试在 QGLWidget 中绘制一些 OpenGL 内容:

void Widget::paintGL() {
    startClipping(10, height()-110,100,100);

    qglColor(Qt::red);
    glBegin(GL_QUADS);
        glVertex2d(0,0);
        glVertex2d(500,0);
        glVertex2d(500,500);
        glVertex2d(0,500);
    glEnd();

    qglColor(Qt::green);
    this->renderText(50, 50, "SCISSOR TEST STRING");

    endClipping();
}

四边形被正确裁剪,但文本没有。 我尝试了三种实现 startClipping 方法的方法:剪刀测试、将视口(viewport)设置为裁剪区域以及使用模板缓冲区。 它们都不起作用,整个字符串都被绘制出来,而不是在裁剪区域的边缘被切断。

现在我的问题是:这种行为是 Qt 的错误还是有什么我错过了或者我可以尝试的另一种可能性?

最佳答案

经过一周的尝试,我突然发现了一种非常简单的方法来实现我一直在寻找的东西。 使用 QPainter它的方法而不是 QGLWidget 的 renderText() 只是让文本剪辑工作:

QPainter *painter = new QPainter();
painter->begin();

painter->setClipping(true);

painter->setClipPath(...);   // or
painter->setClipRect(...);   // or
painter->setClipRegion(...);

painter->drawText(...);

painter->end();

关于c++ - 使用 Qt OpenGL 进行文本裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17722166/

相关文章:

c++ - A a; 之间有什么区别吗?和 A = A()?

c++ - cin流错误

Qt开发以及OpenGL与QML页面的必要性

c++ - 将 GLEW 添加到项目 (CMake)

c++ - 如何使用 qDebug 打印包含换行符的 QString

c++ - OpenGL 中的调色板动画

c++ - :bad_alloc in passing vector reference to pointer to vector in constructor

java - 使用 undefined symbol 加载 JNI 时崩溃

c++ - QScrollArea 不能按预期与 QWidget 和 QVBoxLayout 一起工作

qt - 在 Qt 中显示子窗口时暂停功能