P
Dec. 13, 2018, 11:30 p.m.

Qt Qpainter не активен, при запуске приложения

QPainter

Нужно реализовать функцию поворота изображения. но при поверке функции изображение становится просто белым.
QApplication::processEvents();

  1. QPixmap ship("image");
  2. QPixmap rotate(ship.size());
  3.  
  4. QPainter painter(&rotate);
  5. painter.setRenderHint(QPainter::Antialiasing);
  6. painter.setRenderHint(QPainter::SmoothPixmapTransform);
  7. painter.setRenderHint(QPainter::HighQualityAntialiasing);
  8. painter.translate(rotate.size().width()/2, rotate.size().height()/2);
  9. painter.rotate(90.0);
  10. painter.translate(rotate.size().width()/2, rotate.size().height()/2);
  11.  
  12. painter.drawPixmap(0,0, ship);
  13. painter.end();
  14.  
  15. imageLabel->setPixmap(rotate);

вот реализация paintEvent
void MainWindow::paintEvent(QPaintEvent *)
{

QPainter painter(this);

  1. painter.beginNativePainting();
  2.  
  3. painter.endNativePainting();

}

3

Do you like it? Share on social networks!

6
Evgenii Legotckoi
  • Dec. 14, 2018, 1:06 a.m.

Вот вы знаете, если бы вы хотя бы поздоровались.
Правила хорошего тона в интернете никто не отменял.
Да и не стол заказов вам тут, чтобы вы таким образом обращались к сообществу.

    BlinCT
    • Dec. 14, 2018, 3:18 a.m.

    Полностью согласен с Евгением, неувожительное обращение совершенно.

      P
      • Dec. 14, 2018, 9:54 a.m.

      Извините, за мою бестактность и не проявление элементарных правил воспитанности в обществе. Писалось с целью сказать четко и по делу, т.к. очень много вожусь с этой проблемой, на которой завязаны еще три функции, а так как я новичок на Qt, да и честно сказать не программировала то никогда, но работу сделать должна. то мне не понятно в чем моя проблема.
      Приношу свои извинения.

        Evgenii Legotckoi
        • Dec. 14, 2018, 2:25 p.m.

        Добрый день!

        Всё пучком, чётко и по делу - это хорошо, ценю, но без фанатизма ;-)

        По сути вопроса, QPainter - вещь довольно капризная и не всегда работает везде корректно, в основном только в методах paint, да инициализировать его нужно объектом, в котором происходит отрисовка, в вашем случае - это paintEvent(),

        Вижу, что так и сделали

        1. void MainWindow::paintEvent(QPaintEvent *) {
        2.  
        3. QPainter painter(this);
        4.  
        5. painter.beginNativePainting();
        6.  
        7. painter.endNativePainting();
        8. }

        но весь код, который находится в processEvents(), по моему мнению, лучше переносить в переопределённый метод paintEvent().

        Посмотрите, как это сделано вот в этой статье о QPainter

        То есть сделайте всю отрисовку в paintEvent(), а processEvents() не трогайте. И подробнее опишите, что код должен делать. Это просто вращение какой-то картинки?

          P
          • Dec. 14, 2018, 8:20 p.m.

          Спасибо за помощь, теперь стало более понятнее. Да, просто вращение, т.е. я загружаю картинку в qlabel и должна реализовать операции над ней,вращение одна из них.

            Evgenii Legotckoi
            • Dec. 14, 2018, 8:26 p.m.

            QLabel... я бы тогда иначе попробовал...

            Вы можете загрузить изображение в QPixmap, у которого есть метод transformed(), туда передаётся матрица преобразований. А возвращает данный метод уже трасформированный QPixmap, при этом исходный не изменяется. Вы можете устанавливать в QLabel, как раз трасформированный QPixmap.

            При этом не понадобится переопределение метода paintEvent вообще.

              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • AK
                April 1, 2025, 11:41 a.m.
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • Evgenii Legotckoi
                March 9, 2025, 9:02 p.m.
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                March 9, 2025, 4:14 p.m.
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
              • ИМ
                Nov. 22, 2024, 9:51 p.m.
                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              • Evgenii Legotckoi
                Oct. 31, 2024, 11:37 p.m.
                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup