我想请问一下在Embed QT里如何控制两个屏幕显示不同的内容,我现在的开发环境里有/dev/fb0 和 fb1两个framebuffer,只要将图片内容分别输入到这两个framebuffer里就能分别在不同的屏上显示不同的图片内容。
我用的方法是用DBScreen继承了一个LinuxFbScreen 类,然后直接继承里面的connect和InitDevice方法,在显示图片调用时connect没问题,initDevice时就报错segment fault了,以下附的关键部分代码,请您看下有什么问题。
另外我想请问一下QScreen(int display_id)里面的参数是什么?就是环境变量里的display num么?
(我们用的开发板环境是JUMBO2440,linux 2.6.30内核,qt-4.5,EABI-4.3.3编译)
dbscreen.h
#include <QLinuxFbScreen>
#include <QPainter>
//! [0]
class DBScreen : public QLinuxFbScreen
{
public:
DBScreen(int displayId) : QLinuxFbScreen(displayId) {};
~DBScreen() {}
bool initDevice();
void shutdownDevice();
void blit(const QImage &image, const QPoint &topLeft, const QRegion ®ion);
void solidFill(const QColor &color, const QRegion ®ion);
void exposeRegion(QRegion region, int changing);
bool connect(const QString &displaySpec);
private:
QPainter *painter;
QImage *image;
};
dbscreen.cpp
bool DBScreen::initDevice()
{
if (!QLinuxFbScreen::initDevice())
return false;
qDebug("Init device in function success!");
QScreenCursor::initSoftwareCursor();
image = new QImage(deviceWidth(), deviceHeight(), pixelFormat());
painter = new QPainter(image);
return true;
}
//! [0]
bool DBScreen::connect(const QString &displaySpec)
{
if (!QLinuxFbScreen::connect("LinuxFb:tty=/dev/fb0:0")) //此处为方便测试就直接指定了一个设备
{
qDebug("Connect wrong!");
return false;
}
else qDebug(displaySpec.toLatin1());
}
widget.cpp
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QVBoxLayout *verticalLayout;
QLabel *label;
fb=new DBScreen(0);
fb->connect("LinuxFb:tty=/dev/fb0:0");
qDebug("connect success!");
fb->initDevice();
verticalLayout = new QVBoxLayout(this);
verticalLayout->setSpacing(6);
verticalLayout->setContentsMargins(11, 11, 11, 11);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
label = new QLabel(this);
label->setObjectName(QString::fromUtf8("label"));
verticalLayout->addWidget(label);
}
main.c
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
#if defined(Q_WS_S60)
w.showMaximized();
#else
w.show();
#endif
return a.exec();
}