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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Повернуть QLabel относительно центра  (Прочитано 8354 раз)
Globulus
Гость
« : Август 09, 2011, 18:42 »

Здравствуйте!

Хочу повернуть QLabel, делаю вот так :

Код:

class MyLabel : public QLabel
{
  Q_OBJECT
  Q_PROPERTY (qreal rotation READ rotation WRITE setRotation)
...
};
 
void MyLabel::Rotate()
{
  
    m_anim1 = new  QPropertyAnimation(this,"rotation");
    m_anim1->setStartValue(qreal(-0));
    m_anim1->setEndValue(qreal(-360));
    m_anim1->setDuration(500);    
    m_anim1->start();
}


Ругается:

Код:
In member function 'virtual int MyLabel::qt_metacall(QMetaObject::Call, int, void**)':
error: 'rotation' was not declared in this scope
error: 'setRotation' was not declared in this scope

В чем дело и как вообще повернуть QLabel относительно центра (предположим QLabel содержит картинку) ?
Записан
twp
Гость
« Ответ #1 : Август 09, 2011, 18:53 »

хех, простым добавлением свойства можно вращать QLabel? Интересное решение Улыбающийся
Записан
Globulus
Гость
« Ответ #2 : Август 09, 2011, 20:09 »

хех, простым добавлением свойства можно вращать QLabel? Интересное решение Улыбающийся

Другие идеи?
Записан
Etud
Гость
« Ответ #3 : Август 09, 2011, 21:39 »

предположим картинка

Если картинку, пэйнтером рисуете и вращаете. Не пробовал.

QLabel - не знаю как повернуть.
Записан
iroln
Гость
« Ответ #4 : Август 09, 2011, 23:00 »

хех, простым добавлением свойства можно вращать QLabel? Интересное решение Улыбающийся

Другие идеи?

Перегрузить метод paintEvent() и нарисовать всё с нужным углом поворота? Самое простое, что пришло в голову. Улыбающийся

Примерно так:
Код
Python
 
from PySide.QtCore import *
from PySide.QtGui import *
 
class MyLabel(QLabel):
   def __init__(self):
       super(MyLabel, self).__init__()
       self._angle = 0
 
   def rotate(self, angle):
       self._angle = angle
 
   def paintEvent(self, event):
 
       painter = QPainter(self)
 
       painter.save()        
 
       w = self.width()
       h = self.height()
 
       painter.translate(w/2.0, h/2.0)
       painter.rotate(self._angle)
       painter.translate(-w/2.0, -h/2.0)
 
       painter.drawText(self.rect(), self.alignment(), self.text())
       painter.restore()
 
       self.drawFrame(painter)
   pass
 
if __name__ == '__main__':
   import sys
 
   app = QApplication(sys.argv)
 
   label = MyLabel()
   label.setAlignment(Qt.AlignCenter)
   label.setText('Hello, World!')
   label.rotate(35)
 
   label.show()
   label.resize(100, 100)
   app.exec_()
 


« Последнее редактирование: Август 09, 2011, 23:30 от iroln » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #5 : Август 10, 2011, 01:47 »

Вообще это уже обсуждалось http://www.prog.org.ru/topic_10538_0.html#lastPost
Более допилинный вариант RotatedLabel можно найти в библиотеке lightplot2d http://code.google.com/p/lightplot2d/downloads/list
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #6 : Август 10, 2011, 12:04 »

А если центр вращения будет в центре картинки, то надо будет корректировать положение картинки относительно угла поворота.

Примерно как здесь
Записан

Globulus
Гость
« Ответ #7 : Август 10, 2011, 13:49 »

Спасибо всем за обстоятельные конструктивные ответы!
Проблема решена!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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