我正在尝试将流保存到几个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 ®ion)
{
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);
布莱斯
答案 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 ®ion)
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。我在这里做了很多假设,因为这个问题有点不清楚。