小编ser*_*rgi的帖子

QGLWidget在Windows 7中显示为黑色

我使用Visual Studio 2010在Windows XP(Qt 4.7.2)中编写并测试了一些代码,然后我尝试安装了Windows 7的另一台机器.

该程序打开一个QDialog并创建一个QGLWidget,我在其中显示网络摄像头图像(进行一些处理).在Windows XP中,图像显示正确,在我在Windows 7计算机上测试程序时,QGLWidget变黑并且不显示图像.然而,奇怪的是,当我在窗户周围移动并且它离开屏幕的边界时,当我再次停止移动时,图像会立即显示并且变黑,这使我认为图像被正确接收/处理(有时),并且它可能是QTimer的问题.

相关代码是:

初始化:

void GLVideo::initializeGL()
{   
    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);

    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    // Some OpenCV processing

    // Here I declare the timer, might it be the problem?
    m_timer = new QTimer(this);
    connect( m_timer, SIGNAL(timeout()), this, SLOT(timeOutSlot()) );
    m_timer->start( 33 );

}
Run Code Online (Sandbox Code Playgroud)

每次超时调用的插槽:

void GLVideo::timeOutSlot() 
{
    ReceiveInfo();
    LoadTextures();
}

void GLVideo::LoadTextures() 
{   
    // Get the image from the webcam
    ProcessCamera();

    glBindTexture(GL_TEXTURE_2D, texture);  
    glTexImage2D( GL_TEXTURE_2D, 0, 3, qImage->width(), 
        qImage->height(), …
Run Code Online (Sandbox Code Playgroud)

c++ opengl qt qglwidget

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

Windows 64位和32位之间的共享内存接口

我需要在Windows 7(64位)中编写代码,执行具有共享存储器接口(SMI)的32位程序.更准确地说,我编写的程序写入SMI,32位程序从该SMI读取.

我遇到的第一个问题是我无法访问32位程序的源代码,这是无法解决的问题.第二个问题是SMI存储所写信息的地址.使用以下代码将此指向存储为基指针:

gpSharedBlock->m_pData[uiDataPointer] = (char __based(gpSharedBlock)*)pData;
Run Code Online (Sandbox Code Playgroud)

pData是指向我们正在编写的数据的指针,gpSharedBlock-> m_pData [i]指向存储的第i个元素.

可能从这里你已经注意到了这个问题; W32中的指针是4个字节,而W64中的指针是8个字节.然后,由于存储的值是64位指针,因此32位程序最终读取的值不是所需的值.

我的问题是:有没有办法将64位地址转换为32位地址,以便正在运行的程序读取正确的信息?

我读过WOW64,我想W32程序在它下面运行,但我不知道如何利用它.有任何想法吗?

c++ pointers 32bit-64bit

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

标签 统计

c++ ×2

32bit-64bit ×1

opengl ×1

pointers ×1

qglwidget ×1

qt ×1