crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Соотношение координат QGraphics(View/Scene/Item), Думал тут будет проще..не-фи-га.
Andrewshkovskii
  опции профиля:
сообщение 13.10.2009, 18:26
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Создал себе тестовый примерчик для своих жалких потуг..
Сладер да Вьюха для сцены.
при изменении значения слайдера вот что делаю :
Раскрывающийся текст
void MainWindow::out(int i)
{
qDebug() << i;
QGraphicsLineItem * item = this->scene->addLine(0,0,0,10,*(new QPen()));
item->setPos(-((ui->graphicsView->geometry().width()/2)-5),-((ui->graphicsView->geometry().height()/2)-20));
qDebug() << ui->graphicsView->geometry();
qDebug() << item->pos();
}


Пробовал читать про http://doc.crossplatform.ru/qt/4.5.0/graphicsview.html - не понял, всеравно. Видимо мозгов не хватаит..:)
Так в чем проблема : 1. Координаты, при которых создается айтем - это что за координаты?к чему они относятся?Я так понимаю к Сцене(айтем на ней создается в координатах , где центр в 0.0), которая отображается во вью, где координаты 0,0 в левом верхнем углу..так?
Так вот, почему при изменении позиции айтема таким образом , первый раз он отображается как задумывалось,а при следующим - вне видимой части вьюхи..?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 13.10.2009, 20:58
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


Попробуй вместо geometry() использоваться rect(). У меня проблем при таком обращении не возникает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 14.10.2009, 0:01
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Цитата(Elfinit @ 13.10.2009, 21:58) *
Попробуй вместо geometry() использоваться rect(). У меня проблем при таком обращении не возникает.

Да оно тоже самое возвращает (в плане width,height)

Сообщение отредактировал Andrewshkovskii - 14.10.2009, 0:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 14.10.2009, 22:17
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Никакой подсказки никто дать не может?просто замучался уже с этими координатами..вот ещё подробнее :
Есть некоторое не понимание взаимосвязи систем координат item,model,view.
Вот такой вот код:

void Model::setUpGraphicScene(QStandardItemModel *model,int size)
{
    static QFont font("Times",9);
    static int x = - this->vrptr->geometry().width()/2;//this->vrptr -указатель на QGraphicView
    int y= - (this->vrptr->geometry().height()/2);
    QGraphicsItem * item;
    static QFontMetrics fn (font);
    static int yGrow = fn.height() -3;
    this->visualResultModel->clear();
    item= visualResultModel->addText(model->horizontalHeaderItem(0)->text(),font);
    item->setPos(x,y);
    for(int i=1;i<size;++i)
    {
        item= visualResultModel->addText(model->horizontalHeaderItem(i)->text(),font);
        item->setPos(x,y+yGrow);
        y=item->pos().y();
    }
}

Вроде как должен начать добавлять item в левый верхний угол, но почему-то , происходит вот так :

Что я делаю не так? (на рисунке , вьюха - это где порог близости..)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 15.10.2009, 0:01
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


void Model::setUpGraphicScene(QStandardItemModel *model,int size)
{
    qDebug() << this->vrptr->rect();
    qDebug() << this->visualResultModel->width() << this->visualResultModel->height();
    static QFont font("Times",9);
    int x = -this->vrptr->geometry().width();
//    x+=113;
    int y= - (this->vrptr->geometry().height()/2);
    QGraphicsItem * item;
    static QFontMetrics fn (font);
    static int yGrow = fn.height() -3;
    this->visualResultModel->clear();
    item= visualResultModel->addText(model->horizontalHeaderItem(0)->text(),font);
    item->setPos(x,y);
    for(int i=1;i<size;++i)
    {
        item= visualResultModel->addText(model->horizontalHeaderItem(i)->text(),font);
        item->setPos(x,y+yGrow);
        y=item->pos().y();
    }
    qDebug() << this->vrptr->rect();
    qDebug() << this->visualResultModel->width() << this->visualResultModel->height();
}

Цитата
QRect(0,0 607x277) //rect вьюхи до отображения текста
0 0//ширина и высота модели до отображения
QRect(0,0 607x277) //после
716 258//после..


почему такое происходит?Просто сейчас, у меня рисуется в принципе нормально, но появляется скролл на вьюхе..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 7.7.2010, 12:33
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Используй QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop) и все путем будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 17:53