#include "../header/runstr.h"//-----------------------------------------------------------------------------------------------RunStr::RunStr(QWidget *parent): QLabel(parent), m_parent(parent){ }//--------------------------------------------------------------------RunStr::RunStr(const QString string, QWidget *parent): QLabel(parent), m_parent(parent){ initDefault(); m_string = tr(string.toAscii());}//--------------------------------------------------------------------void RunStr::paintEvent(QPaintEvent*){ QPainter painter(this); painter.drawRect(0, 0, m_sizeFieldStr.width(), m_sizeFieldStr.height()); painter.drawText(m_coordStr, m_string);}//--------------------------------------------------------------------void RunStr::initDefault(){ QTextCodec *codec = QTextCodec::codecForName("cp1251"); QTextCodec::setCodecForTr(codec); m_font = QFont(tr("Arial"), 20, 20); m_color = QColor(Qt::black); m_dirStr = dirRight; m_posField = posCentre; m_sizeField = sizeStr;}//---------------------------------------------------------------------void RunStr::setSize(){ if(m_parent != 0) m_sizeWgt = m_parent->size(); else m_sizeWgt = QSize(640, 480); QFontMetrics fm(m_font); // установка ширины и высоты строки в пикселах m_sizeStr.setWidth(fm.width(m_string)); // ширина строки в пикселах m_sizeStr.setHeight(fm.height()); // высота символа в пикселах // установка ширины и высоты поля вывода в пикселах if(m_sizeField == sizeWgt) m_sizeFieldStr.setWidth(m_sizeWgt.width()); else if(m_sizeField == sizeStr) m_sizeFieldStr.setWidth(m_sizeStr.width()); m_sizeFieldStr.setHeight(m_sizeStr.height()); // установка поля вывода на экране if((m_posField & posLeft)) m_coordFieldStr.setX(0); else if((m_posField & posRight)) m_coordFieldStr.setX(m_sizeWgt.width() - m_sizeFieldStr.width()); else if((m_posField & posHCentre)) m_coordFieldStr.setX((m_sizeWgt.width() - m_sizeFieldStr.width())/2); if((m_posField & posTop)) m_coordFieldStr.setY(0); else if((m_posField & posBottom)) m_coordFieldStr.setY(m_sizeWgt.height() - m_sizeFieldStr.height()); else if((m_posField & posVCentre)) m_coordFieldStr.setY((m_sizeWgt.height() - m_sizeFieldStr.height())/2); // установка координат строки if(m_dirStr == dirLeft) m_coordStr.setX(-m_sizeStr.width()); else if(m_dirStr == dirRight) m_coordStr.setX(m_sizeFieldStr.width()); //m_coordStr.setX(0); // позиция для проверки работы строки m_coordStr.setY((m_sizeFieldStr.height()/4)*3);}//----------------------------------------------------------------------void RunStr::run(){ this->setFont(m_font); QPalette palette; palette.setColor(QPalette::WindowText, m_color); this->setPalette(palette); setSize(); this->setGeometry(m_coordFieldStr.x(), m_coordFieldStr.y(), m_coordFieldStr.x() + m_sizeFieldStr.width(), m_coordFieldStr.y() + m_sizeFieldStr.height()); m_timer = new QTimer; m_timer->start(30); connect(m_timer, SIGNAL(timeout()), this, SLOT(slotTimer()));}//----------------------------------------------------------------------void RunStr::slotTimer(){ int cx; if(m_dirStr == dirLeft) { if(m_coordStr.x() >= m_sizeFieldStr.width()) { m_coordStr.setX(-m_sizeStr.width()); return; } cx = m_coordStr.x(); m_coordStr.setX(++cx); } else if(m_dirStr == dirRight) { if(m_coordStr.x() <= -m_sizeStr.width()) { m_coordStr.setX(m_sizeFieldStr.width()); return; } cx = m_coordStr.x(); m_coordStr.setX(--cx); } this->update();}//--------------------------------------------------------------------------void RunStr::setColor(QColor color){ m_color = color;}//--------------------------------------------------------------------------void RunStr::setFontStr(const QFont &font){ m_font = font;}