Russian Qt Forum
Сентябрь 28, 2024, 20:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с отображением в QGraphicsView  (Прочитано 7028 раз)
Larry
Гость
« : Март 30, 2011, 16:46 »

Добрый вечер, форумчане!Помогите пожалуйста разобраться, с такой проблемой....Есть QGraphicsView с прикрученной QGraphicsScene, на которой в свою очередь два виджета: видеоплеер(phonon) и бегущая строка(QLabel) через QGraphicsProxyWidget. Проблема состоит в том, что не могу никак позиционировать QLabel там где мне нужно. Я так понимаю происходит это из-за системы координат...Размеры QLabel зависят от QGraphicsView, а как их перерасчитать для QGraphicsScene? Надеюсь я вы поймете что именно я хотел сказать Смеющийся
« Последнее редактирование: Март 30, 2011, 20:40 от Larry » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 30, 2011, 16:52 »

Цитировать
Размеры QLabel зависят от QGraphicsView, а как их перерасчитать для QGraphicsScene?
Коли QLabel стал элементом сцены, то его размеры уже никак не должны зависеть от размеров QGraphicsView.
(!) QGraphicsScene - модель, QGraphicsView - отображение.
Записан

Qt 5.11/4.8.7 (X11/Win)
Larry
Гость
« Ответ #2 : Март 30, 2011, 17:19 »

Я уже запутался:)...ситуация такая: я запускаю видео с размером 640х480, а потом его масштабирую на весь экран. QLabel устанавливается по ширине равной ширине экрана, а высота - высоте символа. Но получается, что QLabel устанавливается по центру экрана и появляются полосы прокрутки.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 30, 2011, 17:28 »

Цитировать
QLabel устанавливается по ширине равной ширине экрана, а высота - высоте символа.
Ещё раз - вся геометрия элементов сцены логическая!.
Поэтому привязывай геометрию QLabel к размерам сцены, т.е. к 640х480.
Записан

Qt 5.11/4.8.7 (X11/Win)
Larry
Гость
« Ответ #4 : Март 30, 2011, 17:35 »

попробую так...сделал несколько сриншотов с проблемой...
Записан
Larry
Гость
« Ответ #5 : Март 30, 2011, 17:41 »

та же самая фигня. Установил размеры QLabel по размерам видео, а потом масштабировал все...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 30, 2011, 17:42 »

Давай код.

И какой размер сцены?
« Последнее редактирование: Март 30, 2011, 17:46 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Larry
Гость
« Ответ #7 : Март 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);
}
размер я не задавал Грустный
его надо явно задавать?
Записан
Larry
Гость
« Ответ #8 : Март 30, 2011, 17:53 »

я вот заметил...если убрать масштабирование и отключить QLabel, то видео выводится по центру экрана, а если потом подключить QLabel, но без масштабирования, то видео приподымается вверх и нижняя его граница соответствует середине экрана...
Записан
Larry
Гость
« Ответ #9 : Март 30, 2011, 19:52 »

больше ни у кого идей нет? просто уже перепробовал все  и ничего не вышло...
Записан
Drafter
Гость
« Ответ #10 : Март 30, 2011, 23:59 »

Попробуйте:

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

Хотя не факт, что после:
Код:
this->showFullScreen(); 
сразу же(в рамках этой функции) изменятся размеры m_viewPlayer, если он у Вас в лейауте (особенно под Linux)
« Последнее редактирование: Март 31, 2011, 00:41 от Drafter » Записан
Larry
Гость
« Ответ #11 : Март 31, 2011, 09:41 »

спасибо, попробую и потом отпишусь...
Записан
Larry
Гость
« Ответ #12 : Март 31, 2011, 10:03 »

спасибо большое, все теперь работает:)...осталось бегущую строку теперь в отдельный поток оформить, а то она притормаживает, а видео идет нормально...еще раз большое спасибо:)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 23.