通过成员函数保持来自fstream的流

时间:2009-07-10 19:22:07

标签: c++ linux user-interface qt fstream

我正在尝试将流保存到几个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()函数指向屏幕上的第一个可见像素(内存)。我必须实现这一点,因为我的硬件不支持默认的内存映射。

然后我想用屏幕将其显示在屏幕上:

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);

布莱斯

2 个答案:

答案 0 :(得分:5)

您仅在“connect”函数的范围内声明了myscreen_Fb。要么使它成为myscreen类的成员,要么更好地将它作为参数传递给“blit”函数。

答案 1 :(得分:1)

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

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

class myscreen
{
  public:
     myscreen( void );
    ~myscreen( void );

    bool
    connect  ( void );

    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 
                                                   // values you've pulled
}

和myscreen :: blit中的write函数得到第一个像素的ptr。我在这里做了很多假设,因为这个问题有点不清楚。