crossplatform.ru

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


  Ответ в Как разместить один элемент поверх другого при динамическом создании окна
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
HochuNaCubu Дата 21.4.2015, 16:42
  Здравствуйте, я реализую сейчас похожий на Ваш проект - карта с нанесенными на нее QLabel, у меня возник такой вопрос - сохраняется ли у Вас положение QLabel-ов при масштабировании формы? и если да, то не могли бы Вы поделиться секретом реализации данного волшебства))
gvenihvivar Дата 19.9.2014, 20:26
 
Цитата(Trisch @ 18.9.2014, 20:02) *
Передача сцене текстовых данных через setPlainText, вполне нормальный вариант)

Это радует. Думала, что есть простой и правильный способ, а я опять какие-то костыли прикручиваю :)

Спасибо за помощь!
Trisch Дата 18.9.2014, 20:02
 
Цитата(gvenihvivar @ 18.9.2014, 14:09) *
Пробовала все приведенные варианты Trisch и по таймеру и по кнопке. Ничего. Работает только вот этот вариант вызываемый по таймеру. Я понимаю, что это не правильно, но как-то так.

pTextItem->setPlainText((tr(" P, %1 кг/см2 ").arg(p1)));



Здесь можно посмотреть тестовую программу



Как-то сильно мудрено, как для тестовой программы.
Обновление там не происходит, скорей всего, из за того что нечего обновлять, так как сцена не получает новые данные.

Передача сцене текстовых данных через setPlainText, вполне нормальный вариант)
lanz Дата 18.9.2014, 15:20
  Почему это кажется вам неправильным?
gvenihvivar Дата 18.9.2014, 14:09
  Пробовала все приведенные варианты Trisch и по таймеру и по кнопке. Ничего. Работает только вот этот вариант вызываемый по таймеру. Я понимаю, что это не правильно, но как-то так.
 pTextItem->setPlainText((tr(" P,   %1 кг/см2   ").arg(p1)));


Здесь можно посмотреть тестовую программу
Trisch Дата 17.9.2014, 14:08
  А координаты обновленного участка сцены правильно задали?
Вы точно правильно соединили необходимые сигналы и слоты?
Как вариант можно перерисовать всю сцену с помощью QGraphicsView::updateScene ( const QList<QRectF> & rects )
или удалить содержимое сцены и отрисовать по новой.

Еще можно создать тестовую программу, к примеру, добавить на сцену таймер, и поиграться с различными вариантами его обновления, и потом уже понравившийся вариант перенести в основную программу.
gvenihvivar Дата 17.9.2014, 12:52
  У меня получилась вот такая штука и все прекрасно работает
Раскрывающийся текст
        [/expand]QMdiSubWindow *subWindow = new QMdiSubWindow;
        ui->showMap->setEnabled(false);


        QPixmap *image = new QPixmap();
        image->load(":images/map3.jpg");

        QGraphicsScene *scene = new QGraphicsScene(QRectF(0,0,image->width(),image->height()));
        scene->addPixmap(*image);

        QGraphicsRectItem* pRectItem = new QGraphicsRectItem(0, scene);
        pRectItem->setPen(QPen(Qt::black));
        pRectItem->setBrush(QBrush(Qt::lightGray));
        pRectItem->setRect(QRectF(3430, 450, 150, 120));
        pRectItem->setFlags(QGraphicsItem::ItemIsMovable);


        QGraphicsTextItem* pTextItem =
        scene->addText((tr(
                           " P,  кг/см2 %1 \n "
                           " Q,  кг/час %2 \n "
                           " Ro, кг/м3  %3 \n "
                           " T,  *С     %4 \n ")
                        .arg(p1)
                        .arg(q1)
                        .arg(r1)
                        .arg(t1)));
        pTextItem->setPos(3430,450);
        QFont serifFont("Times", 12, QFont::Bold);
        pTextItem->setFont(serifFont);
        pTextItem->setParentItem(pRectItem);

         QGraphicsView *view = new QGraphicsView (scene, subWindow);
         subWindow->setMinimumSize(ui->mdiarea->width(),(image->height())+20);
         subWindow->layout()->addWidget(view);
         ui->mdiarea->addSubWindow(subWindow);
         subWindow->setAttribute(Qt::WA_DeleteOnClose);
         subWindow->show();

Вопрос. Как сделать так, чтобы текстовые данные обновлялись раз в секунду. Я уже это update() и changed() крутила и так и этак. Подскажите как правильно прикрутить обновление
lanz Дата 17.9.2014, 10:12
  Чтобы разместить виджет поверх другого, сделайте его дочерним виджетом.
QScrollArea *sa = new QScrollArea;
QLabel* imageLabel = new QLabel(sa);

Потом можете передвинуть куда нужно, используя QWidget::move
gvenihvivar Дата 17.9.2014, 9:15
  Нет я пробовала просто вставить картинку
        QScrollArea *sa = new QScrollArea;
        QPixmap *image = new QPixmap(":images/map3.jpg"); //картинка лежит в ресурсах
        QLabel* imageLabel = new QLabel();
        imageLabel->setPixmap(*image);
        imageLabel->setAlignment(Qt::AlignCenter);
        sa->setWidget(imageLabel);

и в фон
         QBrush br(Qt::TexturePattern);
         br.setTextureImage(QImage(":images/map3.jpg"));
         QPalette plt = sa->palette();
         plt.setBrush(QPalette::Background, br);
         sa->setPalette(plt);

но ни один вариант не помог добавить элемент сверху. Попробую ваш.
Trisch Дата 16.9.2014, 20:43
  А посредством чего вы добавляете туда карту?
Если с помощью QGraphicsView, то виджеты можно добавить туда с помощью QGraphicsProxyWidget
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 16:46