Название: 2 QGraphicsView и 1 сцена как вывести правильно ?
Отправлено: AntonUfo от Февраля 01, 2010, 14:36
Сцена состоит из набора элементов (items), сцена подключается к двум классам наследникам QGraphicsView, оба View выводят сцену но в разных масштабах. Мне нужно вывести на один из View(с меньшим масштабом) кроме содержимого сцены еще и прямоугольник (хочу реализавать что то вроде миникарты) как правильно сделать ? Клики мышкой уже реализованы проблема в отображении дополнительного прямоугольика только на одном "виде".
Название: Re: 2 QGraphicsView и 1 сцена как вывести правильно ?
Отправлено: BRE от Февраля 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"
Название: Re: 2 QGraphicsView и 1 сцена как вывести правильно ?
Отправлено: AntonUfo от Февраля 01, 2010, 15:43
спасибо, такой вариант мне не подходит, мне нужно так как в теме с названием http://www.prog.org.ru/index.php?topic=8913.msg77746#msg77746 (http://www.prog.org.ru/index.php?topic=8913.msg77746#msg77746)"Мини-навигатор"
Название: Re: 2 QGraphicsView и 1 сцена как вывести правильно ?
Отправлено: BRE от Февраля 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"
Название: Re: 2 QGraphicsView и 1 сцена как вывести правильно ?
Отправлено: GreatSnake от Марта 05, 2010, 14:31
Переиспользуйте QGraphicsView::drawForeground()
|