コード例 #1
0
//! [3]
void View::addItems()
{
    int officeCount = officeTable->rowCount();

    int imageOffset = 150;
    int leftMargin = 70;
    int topMargin = 40;

    for (int i = 0; i < officeCount; i++) {
        ImageItem *image;
        QGraphicsTextItem *label;
        QSqlRecord record = officeTable->record(i);

        int id = record.value("id").toInt();
        QString file = record.value("file").toString();
        QString location = record.value("location").toString();

        int columnOffset = ((i / 3) * 37);
        int x = ((i / 3) * imageOffset) + leftMargin + columnOffset;
        int y = ((i % 3) * imageOffset) + topMargin;

        image = new ImageItem(id, QPixmap(":/" + file));
        image->setData(0, i);
        image->setPos(x, y);
        scene->addItem(image);

        label = scene->addText(location);
        QPointF labelOffset((150 - label->boundingRect().width()) / 2, 120.0);
        label->setPos(QPointF(x, y) + labelOffset);
    }
}
コード例 #2
0
ファイル: stitcherview.cpp プロジェクト: FXIhub/hawk
bool StitcherView::loadImage(QString s){
  Image * a =  sp_image_read(s.toAscii(),0);
  ImageItem * item = new ImageItem(a,s,this,NULL);
  addImage(item);    
  item->update();
  return true;
}
コード例 #3
0
void ImageModel::AddImage(const cv::Mat image, const QString fileName)
{
    QFileInfo fileInfo(fileName);
    QString name = fileInfo.fileName();
    // find image if already in list and remove before append new one;
    ImageItem* child = this->findImage(fileName);
    if(child)
    {
        child->remove();
    }
    int channelsCount = image.channels();
    if(channelsCount>1)
    {
        ImageItem* multichannelImage = new ImageItem(name, fileName);
        vector<cv::Mat> imageChannels;
        cv::split(image, imageChannels);
        QHash<int, QString> ChannelsStrings;
        ChannelsStrings[0] = QString("Red");
        ChannelsStrings[1] = QString("Green");
        ChannelsStrings[2] = QString("Blue");
        ChannelsStrings[3] = QString("Alpha");
        for(int i = 0; i<channelsCount; i++)
        {
            ImageItem* child = new ImageItem(imageChannels[i], name+QString(" ")+ChannelsStrings[i], fileName, i);
            multichannelImage->appendChild(child);
        }
        this->AddItem(multichannelImage);
    }
    else
    {
       ImageItem* item = new ImageItem(image, name, fileName, 0);
       this->AddItem(item);
    }
}
コード例 #4
0
void ImageItemView::slotDelete() {
    QModelIndexList selected = selectedIndexes();

    if (selected.isEmpty()) {
        return;
    }

    QStringList names;
    for (QModelIndexList::iterator it = selected.begin(); it != selected.end(); it++) {
        ImageItem* itm = (ImageItem*) ((ImageItemModel*) model())->itemFromIndex(*it);
        if (itm) {
            names << tr("Name: %1, ID: %2")
                    .arg(itm->getImage()->getName())
                    .arg(itm->getImage()->getId());
        }
    }

    if (QMessageBox::Yes == QMessageBox::warning(this,
            tr("Really Delete?"),
            tr("Really delete this Images?\n%1")
            .arg(names.join(", ")),
            QMessageBox::Yes | QMessageBox::No)) {
        emit deleteRequest(selected);
    }
}
コード例 #5
0
void ImageStripScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
{
    ImageItem* item = static_cast<ImageItem*>(itemAt(event->scenePos()));
    
    if(item)
        emit sigImageActivated(item->path());
}
コード例 #6
0
ファイル: blurpicker.cpp プロジェクト: HoraceLee/Tacters
void BlurPicker::setupScene()
{
    QSize size = BlurPicker::size();
//    scene()->setSceneRect(-size.width()/2,-size.height()/2,size.width(),size.height());
    scene()->setSceneRect(-500, -309, 1000, 618);

    QStringList names;
    names << ":/images/LEDLabel.png"; //id=0  led
    names << ":/images/timerLabel.png";//id=1 定时器
    names << ":/images/ThermometerLabel.png"; //id=2 温度
    names << ":/images/temAndHumLabel.png";//id=3  温湿度
    names << ":/images/shockLabel.png";//id=4  震动
    names << ":/images/rfidLabel.png";//id=5 RFID
    names << ":/images/portLabel.png";//id=6 串口通信
    names << ":/images/motorLabel.png";//id=7 步进电机
    names << ":/images/lightLabel.png";//id=8 光线
    names << ":/images/LCDLabel.png";//id=9 LCD
    names << ":/images/interruptLabel.png";//id=10 中断
    names << ":/images/infarredLabel.png";//id=11 红外线
    names << ":/images/enterLabel.png";//id=12  按键
    names << ":/images/audioLabel.png";//id=13 蜂鸣器
    names << ":/images/compLabel.png";//id=14  综合

    for (int i = 0; i < names.count(); i++) {
        QPixmap pixmap(names[i]);
        //QGraphicsPixmapItem *icon = scene()->addPixmap(pixmap);
        ImageItem *icon = new ImageItem(i,QPixmap(names[i]),this);
        scene()->addItem(icon);
        // ZValue,层叠次序
        icon->setZValue(1);
        icon->setGraphicsEffect(new BlurEffect(icon));
        m_icons << icon;
    }
}
コード例 #7
0
QString ImageItem::path() const
{
  QStringList names;

  ImageItem *parent = m_parentItem;
  while (parent && parent->type() != Root) {
    names.prepend(parent->name());
    parent = parent->parent();
  }

  return names.join("/") + "/";
}
コード例 #8
0
void ImageItemView::slotIndexActivated(const QModelIndex& idx) {
    if (!idx.isValid()) {
        emit currentImageChanged(0);
        return;
    }

    ImageItem* itm = (ImageItem*) (((ImageItemModel*) model())->itemFromIndex(idx));

    if (!itm) {
        emit currentImageChanged(0);
    } else {
        emit currentImageChanged(itm->getImage());
    }
}
コード例 #9
0
ファイル: view.cpp プロジェクト: rodety/Clinica
 void View::addItems()
 {
     int imageOffset = 140;
     int leftMargin = 40;
     int topMargin = 40;

     if(comportamiento == 0)
     {
         query.prepare("select imagen_pk from e_imagen where (url = '"+carpeta+"' and reporte_operatorio_pk IS NULL)");
         qDebug()<<"Entro a NULL"<<endl;

     }
     else
     {
         query.prepare("select imagen_pk from e_imagen where (url = '"+carpeta+"' and reporte_operatorio_pk = '"+documento+"')");
         qDebug()<<"Entro a "<<documento<<endl;
         //qDebug("select imagen_pk from e_imagen where (url = '"+carpeta.toStdString()+"' and reporte_operatorio_pk = '"+documento.toStdString()+"')");

     }
     int i = 0;
     query.exec();
     while(query.next())
     {
         QGraphicsTextItem *label = new QGraphicsTextItem;
         int id = query.value(0).toInt();
         QString file = query.value(0).toString()+".JPG";
         qDebug()<<"Agregando al visor"<<file<<endl;
         QFileInfo fileInfo(file);
         //fecha de creacion de archivo
         QString location = fileInfo.created().toString();
         int columnOffset = ((i / 3) * 37);
         int x = ((i / 3) * imageOffset) + leftMargin + columnOffset;
         int y = ((i % 3) * imageOffset) + topMargin;
         ImageItem *image = new ImageItem(id, QPixmap(file));
         image->setData(0, i);
         image->setPos(x, y);
         scene->addItem(image);
         label = scene->addText(location);
         QPointF labelOffset((150 - label->boundingRect().width()) / 2, 120.0);
         label->setPos(QPointF(x, y) + labelOffset);
         i++;
         //Guardando los punteros para luego eliminarlos;
         QPair<QGraphicsTextItem*, ImageItem*> par_punteros;
         par_punteros.first = label;
         par_punteros.second = image;
         punteros.push_back(par_punteros);
     }
 }
コード例 #10
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onAddConstraintDialogClosed() {
    QStandardItemModel * model = qobject_cast<QStandardItemModel *>(constraintsTree->model());
    AddConstraintDialog * d = qobject_cast<AddConstraintDialog *>(sender());
    QList<QPair<int,ImageItem *> > points = d->selectedPoints();
    if(points.isEmpty()) {
        delete d;
        return;
    }
    QStandardItem *parentItem = model->invisibleRootItem();
    QStandardItem * itemName = new QStandardItem("Type");
    // This seems a bit too much
    QList<QVariant> point_details;
    QList<QVariant> item_details;
    for(int i = 0; i<points.size(); i++) {
        ImageItem * item = points[i].second;
        QPointF pos  = item->getControlPoints()[points[i].first];
        item_details.append(QVariant::fromValue(item));
        point_details.append(QVariant::fromValue(pos));
    }
    //  itemName->setData(QVariant::fromValue(d));
    itemName->setData(QVariant::fromValue(item_details),Qt::UserRole + 1);
    itemName->setData(QVariant::fromValue(point_details),Qt::UserRole + 2);
    itemName->setData(QVariant::fromValue((int)d->constraintType()),Qt::UserRole + 3);
    QStandardItem * itemValue;
    if(d->constraintType() == RadialLineConstraint) {
        itemValue = new QStandardItem("Radial Line");
    } else {
        itemValue = new QStandardItem("Centered Circle");
    }
    parentItem->appendRow(QList<QStandardItem *>() << itemName <<  itemValue);
    parentItem = itemName;
    for(int i = 0; i<points.size(); i++) {
        itemName = new QStandardItem(points[i].second->identifier() + "." + QString::number(points[i].first+1));
        itemValue = new QStandardItem("");
        parentItem->appendRow(QList<QStandardItem *>() << itemName <<  itemValue);
    }
    if(d->constraintType() == RadialLineConstraint) {
        itemName = new QStandardItem("Angle");
    } else {
        itemName = new QStandardItem("Radius");
    }
    itemValue = new QStandardItem("");
    parentItem->appendRow(QList<QStandardItem *>() << itemName <<  itemValue);

    constraintsTree->expandAll();
    constraintsTree->resizeColumnToContents(0);
    constraintsTree->resizeColumnToContents(1);
}
コード例 #11
0
ファイル: ImageViewer.cpp プロジェクト: detiq-t/detiq-t_old
void ImageViewer::init(const imagein::Image* img, int x, int y)
{
  /* Get info about the image */
  QImage qimg = getQImage(img);
  QSize size = (qimg).size();

  int height = size.height();
  int width = size.width();
  int sup = max(height, width);

  /* Compute the numeric attributs of our object */
  _scale = sup > WIDGET_S ? (double) WIDGET_S / (double) sup : 1.0;

  _dx = (WIDGET_S - width * _scale) / 2;
  _dy = (WIDGET_S - height * _scale) / 2;

  _supx = width * _scale;
  _supy = height * _scale;


  /* Creats the scene */

  QPixmap i;
  i.convertFromImage(qimg);
  i = i.scaled(width * _scale, height * _scale);

  //QGraphicsPixmapItem* im = new QGraphicsPixmapItem(i);
  ImageItem* im = new ImageItem(i);
  im->setOffset(_dx, _dy);

  QObject::connect(im, SIGNAL(clickListenned(int, int)), this, SLOT(slotPositionReception(int, int)));

  addItem(im);
  _rect = new QGraphicsRectItem(0, 0, _scale * RECT_W, _scale * RECT_H);

  QPen b;
  b.setColor(Qt::red);

  _rect->setPen(b);

  addItem(_rect);
  _rect->setX(_dx);
  _rect->setY(_dy);

  updatePos(x * _scale, y * _scale);
}
コード例 #12
0
ファイル: main.cpp プロジェクト: Suneal/qt
void MainWindow::setDirectory(const QString &path)
{
    QDir dir(path);
    QStringList files = dir.entryList(QDir::Files | QDir::Readable | QDir::NoDotAndDotDot);
    foreach(const QString &file, files) {
        QImageReader img(path + QLatin1String("/")+file);
        QImage image = img.read();
        if (!image.isNull()) {
            {
                ImageItem *item = new ImageItem(image);
                item->setPos(0, 0);
                item->setFlags(QGraphicsItem::ItemIsMovable);
                standardGestures->scene->addItem(item);
            }
            {
                ImageItem *item = new ImageItem(image);
                item->setPos(0, 0);
                item->setFlags(QGraphicsItem::ItemIsMovable);
                globalViewGestures->scene->addItem(item);
            }
            {
                GestureImageItem *item = new GestureImageItem(image);
                item->setPos(0, 0);
                item->setFlags(QGraphicsItem::ItemIsMovable);
                graphicsItemGestures->scene->addItem(item);
            }
        }
    }
コード例 #13
0
void QCustomTreeWidget::launchItem(QTreeWidgetItem *qItem)
{
    Item *item = dynamic_cast<QCustomTreeWidgetItem*>(qItem)->branch()->item();
    switch (item->type())
    {
        case Item::tSound:  {
                                SoundItem *soundItem = dynamic_cast<SoundItem*>(item);
                                // we send a signal to play the music (and do some other things)
                                emit fileToPlay(soundItem->fileName(),soundItem->duration());
                                break;
                            }
        case Item::tImage: {
                                ImageItem *imageItem = dynamic_cast<ImageItem*>(item);
                                new ImageWindow(imageItem->fileName(),this);
                                break;
                             }
        default:            break;
    }
}
コード例 #14
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onLoadControlPointsClicked() {
    QString file = QFileDialog::getOpenFileName(0,tr("Load Control Points from File"), QString(),  tr("Image Control Points (*.hicp)"));
    if(file.isEmpty()) {
        return;
    }
    QFile fp(file);
    if(!fp.open(QIODevice::ReadOnly)) {
        return;
    }
    QList<QGraphicsItem *> graphicsItems = _stitcherView->items();
    QTextStream in(&fp);
    QString dumb;
    int nImages;
    in >> dumb >> dumb  >> nImages;
    for(int i = 0; i<nImages; i++) {
        QString id;
        double dx,dy;
        in >> dumb >> id;
        ImageItem * item = NULL;
        for(int j = 0; j < graphicsItems.size(); j++) {
            item = qgraphicsitem_cast<ImageItem *>(graphicsItems[j]);
            if(item && item->identifier() == id) {
                break;
            } else {
                item = NULL;
            }
        }
        int nPoints;
        in >> dumb >> dumb  >> nPoints;
        for(int j = 0; j<nPoints; j++) {
            in >> dumb >> dx;
            in >> dumb >> dy;
            if(item) {
                item->addControlPoint(QPointF(dx,dy));
            }
        }
    }
    fp.close();
}
コード例 #15
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onItemChanged(QStandardItem * item) {
    if(item->isEnabled() == false) {
        return;
    }
    if(item->flags() & Qt::ItemIsUserCheckable) {
        bool value = (item->checkState() == Qt::Checked);
        QString property = item->data(Qt::UserRole + 2).toString();
        ImageItem * imageItem = item->data(Qt::UserRole + 3).value<ImageItem *>();
        imageItem->setProperty(property.toAscii().constData(),value);
        loadGeometry();
    } else if(item->flags() & Qt::ItemIsEditable) {
        qDebug("item changed");
        if(!item->data().isValid()) {
            item = item->parent();
        }
        if(!item->data().isValid()) {
            qFatal("Can't reach here");
        }
        QVariant var = item->data();
        if(var.type() == QVariant::Double) {
            double value = item->text().toDouble();
            QString property = item->data(Qt::UserRole + 2).toString();
            if(property.endsWith("_theta") || property.endsWith("_alpha")) {
                /* convert from degrees */
                value /= 180/M_PI;
            }
            if(property.endsWith("_dy")) {
                /* swap axis */
                value = -value;
            }
            ImageItem * imageItem = item->data(Qt::UserRole + 3).value<ImageItem *>();
            //      item->setText(QString("%0").arg(value));
            imageItem->setProperty(property.toAscii().constData(),value);
            qDebug("New value for %s = %f",property.toAscii().data(),value);
            loadGeometry();
        }
    }
}
コード例 #16
0
ファイル: blurpicker.cpp プロジェクト: HoraceLee/Tacters
void BlurPicker::setIndex(qreal index)
{
    m_index = index;

    qreal baseline = 0;
    for (int i = 0; i < m_icons.count(); ++i) {
        ImageItem *icon = m_icons[i];
        qreal a = ((i + m_index) * 2 * M_PI) / m_icons.count();
        qreal xs = 380 * qSin(a);
        qreal ys = 230 * qCos(a);
        QPointF pos(xs, ys);
       // pos = QTransform::scale(0,0.2).map(pos);
//        pos = QTransform().rotate(-20).map(pos);
        pos = QTransform().rotate(-5).map(pos);
        pos -= QPointF(40, 40);
//        pos -= QPoint(10,10);
        icon->setPos(pos);
        baseline = qMax(baseline, ys);
        static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline);
    }

    scene()->update();
}
コード例 #17
0
void ImageModel::AddMultichannelImage(const cv::Mat image,const QString fileName)
{
    QFileInfo fileInfo(fileName);
    QString name = fileInfo.fileName();
    ImageItem* multichannelImage = new ImageItem(image, name, fileName);
    int channelsCount = image.channels();
    if(channelsCount>1)
    {
        QHash<int, QString> ChannelsStrings;
        ChannelsStrings[0] = QString("Blue");
        ChannelsStrings[1] = QString("Green");
        ChannelsStrings[2] = QString("Red");
        ChannelsStrings[3] = QString("Alpha");
        vector<cv::Mat> imageChannels;
        cv::split(image, imageChannels);
        for(int i = 0; i<channelsCount; i++)
        {
            ImageItem* child = new ImageItem(imageChannels[i], name+QString(" ")+ChannelsStrings[i], fileName, i);
            multichannelImage->appendChild(child);
        }
    }
    this->AddItem(multichannelImage);
}
コード例 #18
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onStitchClicked() {
    QList<QGraphicsItem *> it = _stitcherView->items();
    if(it.size() < 2) {
        return;
    }
    QRectF combined;
    for(int i = 0; i < it.size(); i++) {
        if(QString("ImageItem") == it[i]->data(0)) {
            /* we have an image item */
            ImageItem * ii = qgraphicsitem_cast<ImageItem *>(it[i]);
            combined = combined.united(ii->sceneBoundingRect());
        }
    }
    /* we're gonna assume they all have the same scaling */
    combined =  _stitcherView->selectedImage()->mapRectFromScene(combined);
    qDebug("Combined with relative positions:");
    Image * a = sp_image_alloc(combined.width(),combined.height(),1);
    for(int i = 0; i < it.size(); i++) {
        if(QString("ImageItem") == it[i]->data(0)) {
            QPointF p =  it[i]->mapToScene(0,0);
            QPointF local_p = _stitcherView->selectedImage()->mapFromScene(p);
            qDebug("x = %f y = %f",local_p.x()-combined.x(),local_p.y()-combined.y());
        }
    }
    for(int x = 0; x<sp_image_x(a); x++) {
        for(int y = 0; y<sp_image_y(a); y++) {
            int mask = 0;
            Complex value = sp_cinit(0,0);
            QPointF p =  _stitcherView->selectedImage()->mapToScene(QPointF(combined.x()+x,combined.y()+y));
            for(int i = 0; i < it.size(); i++) {
                if(QString("ImageItem") == it[i]->data(0)) {
                    /* we have an image item */
                    ImageItem * ii = qgraphicsitem_cast<ImageItem *>(it[i]);

                    QPointF local_p = it[i]->mapFromScene(p);
                    if(it[i]->contains(local_p)) {
                        /* we're in business */
                        value = sp_cadd(value,sp_image_get(ii->getImage(),local_p.x(),local_p.y(),0));
                        mask++;
                    }
                }
            }
            if(mask) {
                sp_cscale(value,1.0/mask);
            }
            a->detector->image_center[0] = -combined.x();
            a->detector->image_center[1] = -combined.y();
            a->detector->image_center[2] = 0;
            sp_image_set(a,x,y,0,value);
            sp_image_mask_set(a,x,y,0,mask);
        }
    }
    ImageItem * item = new ImageItem(a,QString(),_stitcherView,NULL);
    _stitcherView->addImage(item);
    item->update();
}
コード例 #19
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onLoadGeometryClicked() {
    QString file = QFileDialog::getOpenFileName(0,tr("Load Geometry from File"), QString(),  tr("Image Geometry (*.hig)"));
    if(file.isEmpty()) {
        return;
    }
    QFile fp(file);
    if(!fp.open(QIODevice::ReadOnly)) {
        return;
    }
    QList<QGraphicsItem *> graphicsItems = _stitcherView->items();
    QTextStream in(&fp);
    QString dumb;
    int nImages;
    in >> dumb >> dumb  >> nImages;
    for(int i = 0; i<nImages; i++) {
        QString id;
        double dx,dy,dz,theta;
        in >> dumb >> id;
        ImageItem * item = NULL;
        for(int j = 0; j < graphicsItems.size(); j++) {
            item = qgraphicsitem_cast<ImageItem *>(graphicsItems[j]);
            if(item && item->identifier() == id) {
                break;
            } else {
                item = NULL;
            }
        }
        in >> dumb >> dx;
        in >> dumb >> dy;
        in >> dumb >> dz;
        in >> dumb >> theta;
        if(item) {
            item->setDx(dx);
            item->setDy(dy);
            item->setDz(dz);
            item->setTheta(theta);
        }
    }
    fp.close();
    loadGeometry();
}
コード例 #20
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::loadGeometry() {
    /*
       This is a prefix to distinguish Hawk Geometry properties from the
       normal widget properties
    */
    const QString tag("HawkGeometry_");
    QList<QGraphicsItem *> ii  = _stitcherView->items();
    QMap<QString,ImageItem *> sortMap;
    for(int i = 0; i<ii.size(); i++) {
        if(ImageItem * imageItem = qgraphicsitem_cast<ImageItem *>(ii[i])) {
            if(imageItem->isVisible()) {
                sortMap.insert(imageItem->identifier(),imageItem);
            }
        }
    }
    QList<ImageItem *>sortedItems = sortMap.values();
    QStandardItemModel * model = qobject_cast<QStandardItemModel *>(geometryTree->model());
    model->clear();
    model->setHorizontalHeaderLabels(QStringList() << "Parameter" << "Value" << "Locked");

    for(int i = 0; i<sortedItems.size(); i++) {
        ImageItem * imageItem = sortedItems[i];
        const QMetaObject *metaobject =  imageItem->metaObject();
        int count = metaobject->propertyCount();
        QStandardItem * itemName = new QStandardItem(imageItem->identifier());
        QStandardItem * itemValue = new QStandardItem();
        QStandardItem * itemLocked = new QStandardItem();
        itemLocked->setFlags(itemLocked->flags() & ~Qt::ItemIsEditable);
        QStandardItem *parentItem = model->invisibleRootItem();
        itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);
        itemValue->setFlags(itemValue->flags() & ~Qt::ItemIsEditable);
        if(model->findItems(itemName->text()).empty()) {
            parentItem->appendRow(QList<QStandardItem *>() << itemName <<  itemValue << itemLocked);
            parentItem = itemName;
        } else {
            parentItem = model->findItems(itemName->text()).first();
        }
        for (int j=0; j<count; ++j) {
            QMetaProperty metaproperty = metaobject->property(j);
            const char *name = metaproperty.name();
            if(!QString(name).startsWith(tag)) {
                continue;
            }
            QVariant var =  imageItem->property(name);
            Qt::ItemFlags itemValueFlags = Qt::ItemIsSelectable|Qt::ItemIsEnabled;
            if(metaproperty.isWritable()) {
                itemValueFlags |= Qt::ItemIsEditable;
            }
            if(var.type() == QVariant::Double) {
                double value = var.toDouble();
                if(QString(name).endsWith("_theta") || QString(name).endsWith("_alpha")) {
                    /* convert to degrees */
                    value *= 180/M_PI;
                }
                if(QString(name).endsWith("_dy")) {
                    /* swap axis */
                    value = -value;
                }
                QStandardItem * itemName = new QStandardItem(_stitcherView->propertyNameToDisplayName(name,tag));
                QStandardItem * itemValue = new QStandardItem(QString("%0").arg(value));
                itemValue->setData(value,Qt::UserRole + 1);
                itemValue->setData(QString(name),Qt::UserRole + 2);
                itemValue->setData(QVariant::fromValue(imageItem),Qt::UserRole + 3);
                itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);
                itemValue->setFlags(itemValueFlags);
                QStandardItem * itemLocked = new QStandardItem();
                itemLocked->setFlags(itemLocked->flags() & ~Qt::ItemIsEditable);
                /* check for lock property */
                QString lockedPropertyName = name + QString("_locked");
                if(imageItem->property(lockedPropertyName.toAscii().data()).isValid()) {
                    bool locked = imageItem->property(lockedPropertyName.toAscii().data()).toBool();
                    itemLocked->setCheckable(true);
                    itemLocked->setData(locked,Qt::UserRole + 1);
                    itemLocked->setData(QString(lockedPropertyName),Qt::UserRole + 2);
                    itemLocked->setData(QVariant::fromValue(imageItem),Qt::UserRole + 3);
                    if(locked) {
                        itemLocked->setCheckState(Qt::Checked);
                        itemValue->setEnabled(false);
                    }
                }
                /* Temporarily disable Dz and Alpha */
                if(itemName->text() == "Dz" ||
                        itemName->text() == "Alpha") {
                    itemLocked->setCheckState(Qt::Checked);
                    itemName->setEnabled(false);
                    itemValue->setEnabled(false);
                    itemLocked->setEnabled(false);
                    itemName->setToolTip("Currently disabled");
                    itemValue->setToolTip("Currently disabled");
                    itemLocked->setToolTip("Currently disabled");
                }
                parentItem->appendRow(QList<QStandardItem *>() << itemName << itemValue << itemLocked);
            }
        }
    }
    geometryTree->expandAll();
    geometryTree->resizeColumnToContents(0);
    geometryTree->sortByColumn(0,Qt::AscendingOrder);
}
コード例 #21
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onOptimizeGeometryClicked() {
    geometrically_constrained_system * gc = geometrically_constrained_system_alloc();

    /* create positioned images */
    QMap<ImageItem *, positioned_image *> pos_image_map;
    QList<QGraphicsItem *> graphicsItems = _stitcherView->items();
    for(int i = 0; i < graphicsItems.size(); i++) {
        if(ImageItem * item = qgraphicsitem_cast<ImageItem *>(graphicsItems[i])) {
            positioned_image * p = create_positioned_image(item->getImage());
            set_image_position(p,DeltaX,item->dx());
            if(!item->dxLocked()) {
                geometrically_constrained_system_add_variable(gc,create_geometry_variable(p,DeltaX));
            }
            set_image_position(p,DeltaY,item->dy());
            if(!item->dyLocked()) {
                geometrically_constrained_system_add_variable(gc,create_geometry_variable(p,DeltaY));
            }
            set_image_position(p,Zoom,1.0/item->dz());
            if(!item->dzLocked()) {
                geometrically_constrained_system_add_variable(gc,create_geometry_variable(p,Zoom));
            }

            set_image_position(p,Theta,item->theta());
            if(!item->thetaLocked()) {
                geometrically_constrained_system_add_variable(gc,create_geometry_variable(p,Theta));
            }
            set_image_position(p,Alpha,item->alpha());
            if(!item->alphaLocked()) {
                geometrically_constrained_system_add_variable(gc,create_geometry_variable(p,Alpha));
            }

            pos_image_map.insert(item,p);
        }
    }


    QStandardItemModel * model = qobject_cast<QStandardItemModel *>(constraintsTree->model());
    int total_points = 0;
    for(int i = 0; i<model->rowCount(); i++) {

        QStandardItem * it = model->item(i,0);
        geometric_constraint c =  geometric_constraint_init((GeometryConstraintType)it->data(Qt::UserRole + 3).toInt(),0);
        QList<QVariant> item_details = it->data(Qt::UserRole + 1).value<QList<QVariant> >();
        QList<QVariant> point_details = it->data(Qt::UserRole + 2).value<QList<QVariant> >();
        total_points += item_details.size();
        for(int i = 0; i<item_details.size(); i++) {
            ImageItem * item = item_details[i].value<ImageItem *>();
            QPointF pos = point_details[i].value<QPointF>();
            positioned_image * a = pos_image_map.value(item);
            control_point cp = create_control_point(a,pos.x(),pos.y());
            geometric_constraint_add_point(&c,cp);
        }
        geometrically_constrained_system_add_constraint(gc,c);
    }
    if(total_points < gc->n_variables+gc->n_constraints) {
        QMessageBox::warning(this,"Geometry Optimization","<p>Too few control points."
                             " The number of control points must be equal or greater to the degrees of freedom.</p>"
                             "<p>Optimization aborted!</p>");
        return ;
    }
    if(model->rowCount()) {
        geometry_contraint_minimizer(gc);
    }
    _stitcherView->clearConstraintFits();
    for(int i = 0; i<model->rowCount(); i++) {
        QStandardItem * it = model->item(i,0);
        for(int j = 0; j<it->rowCount()-1; j++) {
            it->child(j,1)->setText(QString("%0").arg(gc->constraints[i].error[j]));
        }
        it->child(it->rowCount()-1,1)->setText(QString("%0").arg(gc->constraints[i].best_fit));
        _stitcherView->drawConstraintFit(gc);
    }

    for(int i = 0; i<gc->n_variables; i++) {
        ImageItem * item = pos_image_map.keys(gc->variables[i].parent).first();
        if(gc->variables[i].type == DeltaX) {
            item->setDx(gc->variables[i].parent->pos[DeltaX]);
        }
        if(gc->variables[i].type == DeltaY) {
            item->setDy(gc->variables[i].parent->pos[DeltaY]);
        }
        if(gc->variables[i].type == Zoom) {
            item->setDz(1.0/gc->variables[i].parent->pos[Zoom]);
        }
        if(gc->variables[i].type == Theta) {
            item->setTheta(gc->variables[i].parent->pos[Theta]);
        }
        if(gc->variables[i].type == Alpha) {
            item->setAlpha(gc->variables[i].parent->pos[Alpha]);
        }
    }
    loadGeometry();
}
コード例 #22
0
ファイル: imagehandlers.cpp プロジェクト: jshattoc/mythtv
/*!
 \brief Change name of an image/dir
 \details Renames image/dir in Photographs storage group, synchronises image database
 and thumbnail cache and notifies clients. A new thumbnail will be generated by next client
 request.
 \param id File/dir id
 \param newBase New filename
 \return QStringList Error message or "OK"
*/
QStringList ImageHandler::HandleRename(QString id, QString newBase)
{
    // Sanity check new name
    if (newBase.isEmpty() || newBase.contains("/") || newBase.contains("\\"))
        return QStringList("ERROR") << "Invalid name";

    // Find image in DB
    ImageDbWriter db;
    ImageList images, dirs;
    db.ReadDbItemsById(images, id);

    // Either single id not found or multiple comma-delimited ids received
    if (images.size() != 1)
    {
        LOG(VB_FILE, LOG_NOTICE,
            QString("Image: Image %1 not found in Db").arg(id));
        qDeleteAll(images);
        return QStringList("ERROR") << "Unknown File";
    }

    // Get filepath for solitary image
    ImageItem *im = images[0];
    QString absFilename = ImageSg::getInstance()->GetFilePath(im);

    if (absFilename.isEmpty())
    {
        delete im;
        return QStringList("ERROR") << "File not found";
    }

    // Rename file
    QFileInfo info = QFileInfo(absFilename);
    QDir dir = info.absoluteDir();
    QString newName = im->IsDirectory()
            ? newBase : QString("%1.%2").arg(newBase, info.suffix());

    if (!dir.rename(im->m_name, newName))
    {
        LOG(VB_FILE, LOG_ERR, QString("Image: Rename of %1 -> %2 failed")
            .arg(im->m_name, newName));
        delete im;
        return QStringList("ERROR") << "Rename failed";
    }

    LOG(VB_FILE, LOG_DEBUG, QString("Image: Renamed %1 -> %2")
        .arg(im->m_fileName, newName));

    ImageList dummy;

    if (im->IsDirectory())
    {
        // Cleanup thumbdir/thumbnails
        // Thumb generator now owns the image object
        QStringList mesg = ImageThumb::getInstance()->DeleteThumbs(dummy, images);

        // Notify clients of deleted ids, images, thumbs
        gCoreContext->SendEvent(MythEvent("IMAGE_DB_CHANGED", mesg));

        // Dir name change affects path of all sub-dirs & files and their thumbs
        QStringList scan;
        scan << "IMAGE_SCAN" << "START";
        return ImageScan::getInstance()->HandleScanRequest(scan);
    }

    // Retain old image for cleanup
    ImageItem *newIm = new ImageItem(*im);

    // Update db
    newIm->m_name = newName;
    newIm->m_fileName = QDir::cleanPath(QDir(newIm->m_path).filePath(newName));
    db.UpdateDbFile(newIm);
    delete newIm;

    // Clean up thumbnail
    // Thumb generator now owns the images objects
    QStringList mesg = ImageThumb::getInstance()->DeleteThumbs(images, dummy);
    // Item is modified, not deleted
    mesg.swap(0,1);

    // New thumbnail will be created by client request

    // Notify clients of changed image & thumbnail
    gCoreContext->SendEvent(MythEvent("IMAGE_DB_CHANGED", mesg));

    return QStringList("OK");
}
コード例 #23
0
ImageItem* ImageModel::findImage(QString fileName)
{
    ImageItem* root = static_cast<ImageItem*>(_root);
    return root->findImage(fileName);
}
コード例 #24
0
ファイル: mainwindow.cpp プロジェクト: Dearg7/graphics-editor
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui->setupUi(this);
    this->resize(800,680);
    this->setWindowState(Qt::WindowMaximized);
    ImageItem *image = new ImageItem();

    //create ColorSelection
    ColorSelection *CS1 = new ColorSelection(Qt::black);
    ColorSelection *CS2 = new ColorSelection(Qt::white);
    QObject::connect(CS1,SIGNAL(changeColor(QColor)),image,SLOT(setColor1(QColor)));
    QObject::connect(image->getPipette(),SIGNAL(changeColor1(QColor)),CS1,SLOT(setColor(QColor)));
    QObject::connect(CS2,SIGNAL(changeColor(QColor)),image,SLOT(setColor2(QColor)));
    QObject::connect(image->getPipette(),SIGNAL(changeColor2(QColor)),CS2,SLOT(setColor(QColor)));
    QHBoxLayout *Hlayout = new QHBoxLayout();
    Hlayout->addStretch(5);
    Hlayout->addWidget(CS1);
    Hlayout->addWidget(CS2);
    Hlayout->addStretch(5);

    //Create slider
    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setMaximum(100);
    slider->setMinimum(1);
    slider->setValue(10);
    QObject::connect(slider,SIGNAL(valueChanged(int)),image,SLOT(setSize(int)));


    QVBoxLayout *Blayout = new QVBoxLayout();
    Blayout->addWidget(slider);
    Blayout->addLayout(Hlayout);
    QWidget *wdg = new QWidget();
    wdg->setLayout(Blayout);
    // Create Dock
    //
    //
    QDockWidget *dock = new QDockWidget(tr("Настройка"),this);
    dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
    dock->setFeatures(QDockWidget::NoDockWidgetFeatures);
    wdg->setFixedSize(200,100);
    dock->setWidget(wdg);
    dock->setMaximumHeight(300);
    dock->setMaximumWidth(300);

    addDockWidget(Qt::RightDockWidgetArea,dock);

    QActionGroup *GP = new QActionGroup(this);
    GP->addAction(ui->actionPencil);
    GP->addAction(ui->actionEraser);
    GP->addAction(ui->actionEllipse);
    GP->addAction(ui->actionRectangle);
    GP->addAction(ui->actionLine);
    GP->addAction(ui->actionCurveLine);
    GP->addAction(ui->actionFill);
    GP->addAction(ui->actionPipette);
    GP->addAction(ui->actionSelection);
    GP->setExclusive(true);

    //create tool bar
    QToolBar *TB = new QToolBar();
    TB->setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);
    TB->setFloatable(false);
    TB->setMovable(true);

    TB->insertAction(0,ui->actionSaveAs);
    TB->insertAction(ui->actionSaveAs,ui->actionSave);
    TB->insertAction(ui->actionSave,ui->actionOpen);
    TB->insertAction(ui->actionOpen,ui->actionCreate);
    TB->addSeparator();
    TB->insertAction(0,ui->actionSelection);
    TB->insertAction(ui->actionSelection,ui->actionPipette);
    TB->insertAction(ui->actionPipette,ui->actionFill);
    TB->insertAction(ui->actionFill,ui->actionCurveLine);
    TB->insertAction(ui->actionCurveLine,ui->actionLine);
    TB->insertAction(ui->actionLine,ui->actionRectangle);
    TB->insertAction(ui->actionRectangle,ui->actionEllipse);
    TB->insertAction(ui->actionEllipse,ui->actionEraser);
    TB->insertAction(ui->actionEraser,ui->actionPencil);




    addToolBar(Qt::TopToolBarArea, TB);
    // create action connecting
    QObject::connect(ui->actionOpen,SIGNAL(triggered(bool)),image,SLOT(open()));
    QObject::connect(ui->actionSaveAs,SIGNAL(triggered(bool)),image,SLOT(saveAs()));
    QObject::connect(ui->actionSave,SIGNAL(triggered(bool)),image,SLOT(save()));
    QObject::connect(ui->actionPencil,SIGNAL(toggled(bool)),image,SLOT(setPencil(bool)));
    QObject::connect(ui->actionEraser,SIGNAL(toggled(bool)),image,SLOT(setEraser(bool)));
    QObject::connect(ui->actionEllipse,SIGNAL(toggled(bool)),image,SLOT(setEllipse(bool)));
    QObject::connect(ui->actionRectangle,SIGNAL(toggled(bool)),image,SLOT(setRectangle(bool)));
    QObject::connect(ui->actionLine,SIGNAL(toggled(bool)),image,SLOT(setLine(bool)));
    QObject::connect(ui->actionCurveLine,SIGNAL(toggled(bool)),image,SLOT(setCurveLine(bool)));
    QObject::connect(ui->actionFill,SIGNAL(toggled(bool)),image,SLOT(setFill(bool)));
    QObject::connect(ui->actionPipette,SIGNAL(toggled(bool)),image,SLOT(setPipette(bool)));
    QObject::connect(ui->actionSelection,SIGNAL(toggled(bool)),image,SLOT(setSelection(bool)));
    //undo and redo
    ui->actionUndo->setEnabled(false);
    ui->actionRedo->setEnabled(false);
    QObject::connect(image->getUndoStack(),SIGNAL(canUndo(bool)),ui->actionUndo,SLOT(setEnabled(bool)));
    QObject::connect(ui->actionUndo,SIGNAL(triggered(bool)),image->getUndoStack(),SLOT(undo()));
    QObject::connect(image->getUndoStack(),SIGNAL(canRedo(bool)),ui->actionRedo,SLOT(setEnabled(bool)));
    QObject::connect(image->getUndoStack(),SIGNAL(canRedo(bool)),image,SLOT(setNewCurve(bool)));
    QObject::connect(ui->actionRedo,SIGNAL(triggered(bool)),image->getUndoStack(),SLOT(redo()));

    //copy and cut and put

    ui->actionCopy->setEnabled(false);
    ui->actionCut->setEnabled(false);
    ui->actionPut->setEnabled(false);
    QObject::connect(image->getSelection(),SIGNAL(canCopy(bool)),ui->actionCopy,SLOT(setEnabled(bool)));
    QObject::connect(ui->actionCopy,SIGNAL(triggered(bool)),image,SLOT(makeCopy()));
    QObject::connect(image->getSelection(),SIGNAL(canCopy(bool)),ui->actionCut,SLOT(setEnabled(bool)));
    QObject::connect(ui->actionCut,SIGNAL(triggered(bool)),image,SLOT(makeCut()));
    QObject::connect(image->getSelection(),SIGNAL(canPut(bool)),ui->actionPut,SLOT(setEnabled(bool)));
    QObject::connect(ui->actionPut,SIGNAL(triggered(bool)),image,SLOT(makePut()));
    QObject::connect(ui->actionSelection,SIGNAL(changed()),image,SLOT(clearSelection()));


    ui->scrollArea->setBackgroundRole(QPalette :: Dark);
    ui->scrollArea->setWidget(image);





}
コード例 #25
0
ファイル: mainwindow.cpp プロジェクト: Telecrab/jnb3d
void MainWindow::on_filesTable_currentCellChanged(int currentRow, int /*currentColumn*/, int /*previousRow*/, int /*previousColumn*/)
{
    ui->stackedWidget->setCurrentWidget(ui->emptyPage);

    QString resourceName = ui->filesTable->item(currentRow, 0)->text();
    QRectF boundingBox;
    m_scene.clear();

    if(resourceName.endsWith(".pcx")) {
        ImageItem *item = new ImageItem(readPCXimage(resourceName));
        m_scene.addItem(item);
        boundingBox = item->boundingRect();
        ui->stackedWidget->setCurrentWidget(ui->graphicsPage);
    }

    if(resourceName.endsWith(".gob")) {
        std::vector<GobImage> gobImages = m_resourceContainer.readGOB( resourceName.toStdString() );

        QPointF coordinates;
        for(const GobImage &gobImage : gobImages) {
            ImageItem *item = new ImageItem(readGobImage(gobImage));
            m_scene.addItem(item);
            item->setPos(coordinates);
            coordinates.rx() += gobImage.width() + 2;

            QRectF itemBB = item->mapToScene(item->boundingRect()).boundingRect();
            boundingBox.setRight( qMax( boundingBox.right(), itemBB.right() ) );
            boundingBox.setBottom( qMax( boundingBox.bottom(), item->boundingRect().bottom() ) );
            m_scene.addRect(itemBB, QPen(QColor(127, 127, 127, 200)));
        }
        ui->stackedWidget->setCurrentWidget(ui->graphicsPage);
    }

    if(resourceName == "levelmap.txt") {
        ImageItem *item = new ImageItem(readPCXimage("level.pcx"));
        m_scene.addItem(item);
        boundingBox = item->boundingRect();

        std::vector<char> entryData = m_resourceContainer.readLevel( resourceName.toStdString() );
        std::vector<char>::size_type index = 0;
        for(int row = 0; row < 16; row++) {
            for(int column = 0; column < 22; column++) {
                QColor blockColor;

                switch( entryData[index] ) {
                case '0':
                    blockColor.setRgb(0, 0, 0, 0);
                    break;

                case '1':
                    blockColor.setRgb(200, 100, 0, 200);
                    break;

                case '2':
                    blockColor.setRgb(0, 60, 85, 200);
                    break;

                case '3':
                    blockColor.setRgb(140, 220, 255, 200);
                    break;

                case '4':
                    blockColor.setRgb(200, 200, 0, 200);
                    break;

                default:
                    blockColor.setRgb(200, 0, 0, 200);
                }

                QPen pen;
                pen.setWidth(0);
                m_scene.addRect(QRect(column * 16, row * 16, 16, 16), QPen(pen), QBrush(blockColor));
                index++;
            }
            index += 2; // Skip "\r\n" at the end of line;
        }
        ui->stackedWidget->setCurrentWidget(ui->graphicsPage);
    }

    m_scene.setSceneRect(boundingBox);
    ui->graphicsView->setZoom(1.0);
    ui->graphicsView->centerOn(boundingBox.center());

    if(resourceName.endsWith(".smp")) {
        ui->stackedWidget->setCurrentWidget(ui->soundPage);
        ui->soundPage->setSoundData(readSMP(resourceName));
        ui->soundPage->setSoundDescription("Raw 8 bit signed 22050Hz");
    }

    if(resourceName.endsWith(".mod")) {
        ui->stackedWidget->setCurrentWidget(ui->musicPage);
        ui->musicPage->setMusicData(readMOD(resourceName));
    }
}