添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

通过成员函数保持fstream中的一个流开放

0 人关注

我试图在几个Qt成员函数中保持一个流向文件/dev/fb0(linux framebuffer)的开放。 目标是使用myscreen::connect函数来打开framebuffer

bool myscreen::connect()
std::fstream myscreen_Fb;
myscreen_Fb.open("/dev/fb0")
QImage* image;
image = new QImage(w, h, QImage::Format_RGB888);
QScreen::data = image->bits();

这将理想地打开帧缓冲区并创建一个新的QImage,作为被写入屏幕的数据的内存缓冲区。 然后我的 "图像 "将通过bits()函数指向屏幕上第一个可见的像素(内存)。 我必须要实现这一点,因为我的硬件不支持默认的内存映射。

I would then like to blit it to the screen with:

void myscreen::blit(const QImage &img, const QPoint &topLeft, const QRegion &region)
QScreen::blit(img, topLeft, region);
write(myscreen_Fb, image.bits(), image.size());

我似乎不能让指向第一个可见像素的指针打开使用,并从GCC得到关于myscreen_Fb没有在范围内声明的投诉。 有什么想法吗?

我做了建议的修改,并在类中声明了该函数,但得到了这个错误,这让我很抓狂。

error: expected constructor, destructor, or type conversion before '.' token

它指的是包含的行。

vopuscreenFd.open("/dev/fb0", fstream::out);

Bryce

c++
linux
user-interface
qt
fstream
bryce
bryce
发布于 2009-07-11
2 个回答
Chris Arguin
Chris Arguin
发布于 2009-07-11
已采纳
0 人赞同

你只在 "connect "函数的范围内声明了 myscreen_Fb。要么让它成为myscreen类的成员,要么更好的是把它作为一个参数传递给 "blit "函数。

我最终确实注意到了这一点。 我试图打开文件,并将指针设置为类内的第一个帧缓冲区地址,但不是在任何成员函数中,我相信这是有效的,但并不完全确定,我似乎得到了许多错误,但正在通过它们。
BuckFilledPlatypus
BuckFilledPlatypus
发布于 2009-07-11
0 人赞同

这是因为 myscreen_Fb 事实上没有在 blit 函数的范围内声明。 这里你在connect()函数中声明了它。

将 myscreen_Fb 声明为 myscreen 类的一个成员变量。 它将被类的那个实例中的所有函数访问。

class myscreen
  public:
     myscreen( void );
    ~myscreen( void );
    connect  ( void );
    blit     ( const QImage &img, 
               const QPoint &topLeft, 
               const QRegion &region)
  private: 
    std::fstream myscreen_Fb;

关于这个问题。"我似乎不能让第一个可见像素的指针打开使用",你在这里到底是什么意思? 我所能推测的是,你的意思是使用你在connect中创建的图像ptr来使用blit,这也还不是一个成员变量,所以也许你想这么做。

bool myscreen::connect()
    std::fstream myscreen_Fb;
    myscreen_Fb.open("/dev/fb0")
    QImage* image;
    image = new QImage(w, h, QImage::Format_RGB888);
    //QScreen::data = image->bits();   //don't need this?
    blit( image, "topleft ref", "region ref");     //add this, replacing 
                                                   // "topleft ref" and
                                                   // "region ref" with correct