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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: 2 QGraphicsView и 1 сцена как вывести правильно ?  (Прочитано 4470 раз)
AntonUfo
Гость
« : Февраль 01, 2010, 14:36 »

Сцена состоит из набора элементов (items), сцена подключается к двум классам наследникам QGraphicsView, оба View выводят сцену но в разных масштабах. Мне нужно вывести на один из View(с меньшим масштабом) кроме содержимого сцены еще и прямоугольник (хочу реализавать  что то вроде миникарты) как правильно сделать ? Клики мышкой уже реализованы проблема в отображении дополнительного прямоугольика только на одном "виде".
Записан
BRE
Гость
« Ответ #1 : Февраль 01, 2010, 15:23 »

Можно попробовать следующий прием.
Не добавлять миникарту на сцену, а использовать для ее отображения другой виждет.
Здесь в качестве миникарты используется QLabel, а вместо него может быть любой другой виджет.
Код
C++ (Qt)
#include <QApplication>            
#include <QWidget>                
#include <QGraphicsView>          
#include <QLabel>                  
#include <QVBoxLayout>            
#include <QResizeEvent>            
#include <QDebug>                  
 
class Viewer : public QWidget
{                            
       Q_OBJECT            
public:                      
       Viewer();            
 
protected:
       virtual void    resizeEvent( QResizeEvent *event );
 
private:
       QGraphicsView   *m_view;
       QLabel                  *m_map;
};                                    
 
Viewer::Viewer()
       : QWidget( 0 )
{
       m_view = new QGraphicsView( this );
 
       QVBoxLayout *layout = new QVBoxLayout( this );
       layout->addWidget( m_view );
       setLayout( layout );
 
       m_map = new QLabel( "MiniMap", this );
       m_map->setFixedSize( 64, 64 );
       m_map->setFrameShape( QFrame::Panel );
}
 
void Viewer::resizeEvent( QResizeEvent *event )
{
       Q_ASSERT( event );
 
       QWidget::resizeEvent( event );
       m_map->move( event->size().width() - (64 + 20), 20 );
}
 
int main( int argc, char *argv[] )
{
       QApplication app( argc, argv );
 
       Viewer v;
       v.show();
 
       return app.exec();
}
 
#include "main.moc"
 
« Последнее редактирование: Февраль 01, 2010, 15:33 от BRE » Записан
AntonUfo
Гость
« Ответ #2 : Февраль 01, 2010, 15:43 »

спасибо, такой вариант мне не подходит, мне нужно так как в теме с названием http://www.prog.org.ru/index.php?topic=8913.msg77746#msg77746"Мини-навигатор"
Записан
BRE
Гость
« Ответ #3 : Февраль 01, 2010, 16:55 »

Ну так меняем QLabel на QRubberBand и двигаем куда надо. Улыбающийся
Код
C++ (Qt)
#include <QApplication>            
#include <QWidget>                
#include <QGraphicsView>          
#include <QVBoxLayout>            
#include <QRubberBand>            
#include <QTimer>                  
#include <QDebug>                  
 
class Viewer : public QWidget
{                            
       Q_OBJECT            
public:                      
       Viewer();            
 
protected slots:
       void moveMarker();
 
private:
       QGraphicsScene  *m_scene;
       QGraphicsView   *m_view;
       QRubberBand             *m_marker;
};                                        
 
Viewer::Viewer()
       : QWidget( 0 )
{                    
       m_scene = new QGraphicsScene( this );
       m_scene->addText( "Hello, world!" );
 
       m_view = new QGraphicsView( m_scene, this );
 
       QVBoxLayout *layout = new QVBoxLayout( this );
       layout->addWidget( m_view );
       setLayout( layout );
 
       m_marker = new QRubberBand( QRubberBand::Rectangle, m_view->viewport() );
       m_marker->resize( 64, 64 );
       m_marker->show();
 
       QTimer *timer = new QTimer( this );
       connect( timer, SIGNAL( timeout() ), SLOT( moveMarker() ) );
       timer->start( 200 );
}
 
void Viewer::moveMarker()
{
       static int x = 0;
       m_marker->move( x++, 0 );
}
 
int main( int argc, char *argv[] )
{
       QApplication app( argc, argv );
 
       Viewer v;
       v.show();
 
       return app.exec();
}
 
#include "main.moc"
 
« Последнее редактирование: Февраль 01, 2010, 17:39 от BRE » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 05, 2010, 14:31 »

Переиспользуйте QGraphicsView::drawForeground()
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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