Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Larry от Март 30, 2011, 16:46



Название: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 16:46
Добрый вечер, форумчане!Помогите пожалуйста разобраться, с такой проблемой....Есть QGraphicsView с прикрученной QGraphicsScene, на которой в свою очередь два виджета: видеоплеер(phonon) и бегущая строка(QLabel) через QGraphicsProxyWidget. Проблема состоит в том, что не могу никак позиционировать QLabel там где мне нужно. Я так понимаю происходит это из-за системы координат...Размеры QLabel зависят от QGraphicsView, а как их перерасчитать для QGraphicsScene? Надеюсь я вы поймете что именно я хотел сказать ;D


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: GreatSnake от Март 30, 2011, 16:52
Цитировать
Размеры QLabel зависят от QGraphicsView, а как их перерасчитать для QGraphicsScene?
Коли QLabel стал элементом сцены, то его размеры уже никак не должны зависеть от размеров QGraphicsView.
(!) QGraphicsScene - модель, QGraphicsView - отображение.


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 17:19
Я уже запутался:)...ситуация такая: я запускаю видео с размером 640х480, а потом его масштабирую на весь экран. QLabel устанавливается по ширине равной ширине экрана, а высота - высоте символа. Но получается, что QLabel устанавливается по центру экрана и появляются полосы прокрутки.


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: GreatSnake от Март 30, 2011, 17:28
Цитировать
QLabel устанавливается по ширине равной ширине экрана, а высота - высоте символа.
Ещё раз - вся геометрия элементов сцены логическая!.
Поэтому привязывай геометрию QLabel к размерам сцены, т.е. к 640х480.


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 17:35
попробую так...сделал несколько сриншотов с проблемой...


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 17:41
та же самая фигня. Установил размеры QLabel по размерам видео, а потом масштабировал все...


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: GreatSnake от Март 30, 2011, 17:42
Давай код.

И какой размер сцены?


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 17:48
Код:
MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
{
QTextCodec *codec = QTextCodec::codecForName("cp1251");
    QTextCodec::setCodecForTr(codec);

// инициализация переменных
m_player      = new Phonon::VideoPlayer(Phonon::VideoCategory);
m_viewPlayer  = new QGraphicsView;
m_scenePlayer = new QGraphicsScene;
m_lblText     = new RunStr("Бегущая строка");

// подключение виджетов проигрывателя и надписи к сцене
m_proxyPlayer = m_scenePlayer->addWidget(m_player);
m_proxyText   = m_scenePlayer->addWidget(m_lblText);

// настройка элементов
this->showFullScreen();                       // установка в полноэкранный режим
m_proxyPlayer->setPos(0.0, 0.0);
//m_proxyText->setPos(0.0, 0.0);
m_lblText->setFontStr(QFont("Arial Black", 30, 30));
m_lblText->setColor(QColor(Qt::red));
m_lblText->setSize(m_player->size());
m_lblText->run();
//m_viewPlayer->setBackgroundBrush(QBrush(Qt::black)); // установка черного фона

//m_viewPlayer->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);  // отключение
//m_viewPlayer->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // scrollbar-ов

// масштабирование видео на весь экран
QSize size_wnd  = this->size();                // получаем размеры экрана
QSize size_view = m_viewPlayer->size();       // получаем размеры вида

double xscale = (double)size_wnd.width()/size_view.width();   // получаем коэффициенты
double yscale = (double)size_wnd.height()/size_view.height(); // масштабирования

m_viewPlayer->scale(xscale, yscale); // масштабирование видео

m_viewPlayer->setScene(m_scenePlayer);               // привязка сцены к виду

// подключения формы к главному окну
this->setCentralWidget(m_viewPlayer);

m_videoFileName = tr("Рисование на воде.avi");
m_player->play(m_videoFileName);
}
размер я не задавал :(
его надо явно задавать?


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 17:53
я вот заметил...если убрать масштабирование и отключить QLabel, то видео выводится по центру экрана, а если потом подключить QLabel, но без масштабирования, то видео приподымается вверх и нижняя его граница соответствует середине экрана...


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 30, 2011, 19:52
больше ни у кого идей нет? просто уже перепробовал все  и ничего не вышло...


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Drafter от Март 30, 2011, 23:59
Попробуйте:

Код:
m_scenePlayer->setSceneRect(m_viewPlayer->rect());

Хотя не факт, что после:
Код:
this->showFullScreen(); 
сразу же(в рамках этой функции) изменятся размеры m_viewPlayer, если он у Вас в лейауте (особенно под Linux)


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 31, 2011, 09:41
спасибо, попробую и потом отпишусь...


Название: Re: Проблемы с отображением в QGraphicsView
Отправлено: Larry от Март 31, 2011, 10:03
спасибо большое, все теперь работает:)...осталось бегущую строку теперь в отдельный поток оформить, а то она притормаживает, а видео идет нормально...еще раз большое спасибо:)