• 6673阅读
  • 2回复

求助:在Embeded QT 里双屏显示 [复制链接]

上一主题 下一主题
离线keenite
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-17
我想请问一下在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 &region);
    void solidFill(const QColor &color, const QRegion &region);
    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();
}
离线wxj120bw

只看该作者 1楼 发表于: 2011-03-18
看来周末再研究给楼主回复了吧
离线keenite

只看该作者 2楼 发表于: 2011-03-18
谢谢呀....我也是研究了好久了。。。
快速回复
限100 字节
 
上一个 下一个