小编pol*_*181的帖子

由于应用程序X挂起(使用C++,Qt,OpenGL)

我的应用程序从网络获取数据并在场景中绘制(场景使用手工制作的OpenGL引擎).

它可以工作几个小时.当我不使用我的桌面时,我的显示器因显示器电源管理器信令(dpms)关闭.然后,当我触摸鼠标或键盘时,显示器打开,应用程序挂起(X也挂起).

如果我这样做 xset -dmps 操作系统不使用dpms并且应用程序工作稳定.

这些问题出现在Centos 6和Archlinux中,但是当我在Ubuntu 12.10下运行应用程序时,它运行得很好!

我尝试了不同的NVidia驱动程序.没有效果.

我尝试使用ssh进行远程登录并使用gdb附加到进程.打开监视器后,我无法在进程表中找到该应用程序.

如何诊断问题?当显示器关闭/打开时会发生什么(在OpengGL环境中)?使用dpms时,Ubuntu是否做了一些特别的事情?

我们猜测问题的原因!当监视器关闭时,我们失去了OpenGL上下文.当监视器唤醒时,应用程序挂起(无上下文).根据操作系统的不同,行为的差异是由于监视器连接不同:Kubuntu的监视器连接VGA电缆.所以(可能)它对X行为没有影响.

c++ linux opengl qt nvidia

40
推荐指数
1
解决办法
1346
查看次数

QFontMetrics 给出等宽字体的奇怪结果

\xd0\xa1an 有人向我解释一下这个测试程序的结果吗?

\n\n
#include <QApplication>\n#include <QDebug>\n#include <QFontMetrics>\nint main(int argc, char *argv[])\n{\n    QApplication app(argc, argv);\n    QFont font;\n    font.fromString("Monospace,14");\n    QFontMetrics fm(font);\n    qDebug() << "W       : " << fm.width(\'W\');\n    qDebug() << "8*W     : " << 8*fm.width(\'W\');\n    qDebug() << "WWWWWWWW: " << fm.width("WWWWWWWW"); // 8*W\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

用 Qt5.11 编译这段代码后,我得到这样的结果:

\n\n
\n
W       :  11\n8*W     :  88\nWWWWWWWW:  92\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

这种等宽字体的一个字符“W”的大小是 11。我预计由 8 个这样的字符组成的字符串的大小应该是 88。但是 QFontmetrics::width 返回 92!

\n

qt qfontmetrics qfont

5
推荐指数
1
解决办法
504
查看次数

带有未定义参数的unique_ptr实例化不会导致错误

#include <memory>
class Data;
std::unique_ptr<Data> p;
//class Data{}; // not working without this
int main(){}
Run Code Online (Sandbox Code Playgroud)

使用g ++ - 5编译此代码会出现这样的错误:

将'sizeof'无效应用于不完整类型'数据'

有人可以解释为什么我取消注释第四行编译会成功吗?据我所知,在第3行编译器没有关于类型数据的完整信息.我们这行只有前瞻性声明.真实声明发生在第4行.

c++

4
推荐指数
1
解决办法
123
查看次数

通过指向 unsigned long long 的指针访问 int 会导致 UB 吗?

int a;
auto *pa = reinterpret_cast<unsigned long long*>(&a);
*pa = 10;
Run Code Online (Sandbox Code Playgroud)

int 和 unsigned long long 类型具有不同的大小。这段代码会产生未定义的行为吗?

c++ undefined-behavior

2
推荐指数
1
解决办法
68
查看次数

标签 统计

c++ ×3

qt ×2

linux ×1

nvidia ×1

opengl ×1

qfont ×1

qfontmetrics ×1

undefined-behavior ×1