|
|-some stuff for header bar (with zoom in/out buttons, and so on)
|
-QScrollArea (with vertical layout, widgetResizable property set to
"true") |
|
-QWidget (as used into above post
) |
|
-QWidget promoted to my DailyWidget class
QGroupBox (with vertical layout)
|
|-some stuff for header bar (with zoom in/out buttons, and so on)
|-QScrollArea (with vertical layout, widgetResizable property set to "true")
|
|-QWidget (as used into above post)
|
|-QWidget promoted to my DailyWidget class
To copy to clipboard, switch view to plain text mode
//zoom in and out:
void AbstractWidget::slotZoom(int delta)
{
qreal scaleTemp = m_scaleFactor;
if(delta>0)
{
scaleTemp *= 1.25;
}else{
scaleTemp *= 0.8;
}
if(scaleTemp>=1.0 && scaleTemp<3.0)
{
m_scaleFactor = scaleTemp;
if(!m_scrollarea)
getScrollArea();
if(m_scrollarea)
{
QScrollBar *sb
= m_scrollarea
->horizontalScrollBar
();
adjustScrollBar(sb, scaleTemp);
sb = m_scrollarea->verticalScrollBar();
adjustScrollBar(sb, scaleTemp);
}
update();
updateGeometry();
}
}
void AbstractWidget
::adjustScrollBar(QScrollBar *scrollBar,
double factor
) {
if(scrollBar)
{
scrollBar->setValue(int(factor * scrollBar->value() + ((factor - 1) * scrollBar->pageStep()/2)));
}
}
//zoom in and out:
void AbstractWidget::slotZoom(int delta)
{
qreal scaleTemp = m_scaleFactor;
if(delta>0)
{
scaleTemp *= 1.25;
}else{
scaleTemp *= 0.8;
}
if(scaleTemp>=1.0 && scaleTemp<3.0)
{
m_scaleFactor = scaleTemp;
if(!m_scrollarea)
getScrollArea();
if(m_scrollarea)
{
QScrollBar *sb = m_scrollarea->horizontalScrollBar();
adjustScrollBar(sb, scaleTemp);
sb = m_scrollarea->verticalScrollBar();
adjustScrollBar(sb, scaleTemp);
}
update();
updateGeometry();
}
}
void AbstractWidget::adjustScrollBar(QScrollBar *scrollBar, double factor)
{
if(scrollBar)
{
scrollBar->setValue(int(factor * scrollBar->value() + ((factor - 1) * scrollBar->pageStep()/2)));
}
}
To copy to clipboard, switch view to plain text mode
DailyWidget
::DailyWidget(QWidget *parent
) : AbstractWidget(parent),
{
m_view = AbstractWidget::DailyView;
m_scaleFactor = 1.0;
m_fontFactor = 12;
connect(m_timer, SIGNAL(timeout()), this, SLOT(slotUpdateHourHighlightLine()));
}
{
m_painter.scale(m_scaleFactor,m_scaleFactor);
m_painter.
setRenderHints(QPainter::Antialiasing|QPainter
::TextAntialiasing|QPainter
::HighQualityAntialiasing,
true);
QSize s
(997*m_scaleFactor,
580*m_scaleFactor
);
resize(s);
drawGrid(m_painter);
}
void DailyWidget
::drawGrid(QPainter &painter
) {
const int linesNumber = 48;
int width = msize.width();
int counter = 0;
qreal leftLine = 0.0;
qreal y = 0;//initialized with paddingtop
qreal gridSize = msize.height()/(qreal)linesNumber;
QFont textFont
("Times New Roman",gridSize
/2);
painter.setBrush(whiteBrush);
painter.setPen(blackPen);
painter.drawRect(0,0,width,msize.height());
painter.setFont(textFont);
painter.setBrush(whiteBrush);
time.setHMS(counter+1,0,0);
QRectF textRect
= painter.
boundingRect(QRect(0,
0,
0,
0),
time.
toString("hh:mm"));
leftLine = textRect.width()+10;
painter.setBrush(whiteBrush);
for(int i=counter;i<linesNumber;i++)
{
if(i%2==0)
{//hours:
painter.setPen(hourPen);
painter.drawLine(0,y,width,y);
time.setHMS(counter++,0,0);
painter.setPen(blackPen);
painter.drawText(5,y+textRect.height(),time.toString("hh:mm"));
}else{//half hour:
painter.setPen(halfHourPen);
painter.drawLine(leftLine+10,y,width,y);
}
y += gridSize;
}
painter.setPen(hourPen);
painter.drawLine(0,y,width,y);
painter.setPen(redPen);
painter.drawLine(leftLine+10,0,leftLine+10,y);
m_eventRect.setX(0.0);
m_eventRect.setY(0.0);
m_eventRect.setWidth(width);
m_eventRect.setHeight(y);
QSize AdjustSize
= this
->size
();
setMinimumSize(AdjustSize);
}
DailyWidget::DailyWidget(QWidget *parent)
: AbstractWidget(parent),
m_timer(new QTimer(this))
{
m_view = AbstractWidget::DailyView;
m_scaleFactor = 1.0;
m_fontFactor = 12;
setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
connect(m_timer, SIGNAL(timeout()), this, SLOT(slotUpdateHourHighlightLine()));
}
void DailyWidget::paintEvent(QPaintEvent *event)
{
QWidget::paintEvent(event);
QPainter m_painter(this);
m_painter.scale(m_scaleFactor,m_scaleFactor);
m_painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing|QPainter::HighQualityAntialiasing,true);
QSize s(997*m_scaleFactor,580*m_scaleFactor);
resize(s);
drawGrid(m_painter);
}
void DailyWidget::drawGrid(QPainter &painter)
{
const int linesNumber = 48;
QSize msize = size();
int width = msize.width();
int counter = 0;
qreal leftLine = 0.0;
qreal y = 0;//initialized with paddingtop
qreal gridSize = msize.height()/(qreal)linesNumber;
QTime time;
QFont textFont("Times New Roman",gridSize/2);
painter.setBrush(whiteBrush);
painter.setPen(blackPen);
painter.drawRect(0,0,width,msize.height());
painter.setFont(textFont);
m_eventRect = QRectF();
painter.setBrush(whiteBrush);
time.setHMS(counter+1,0,0);
QRectF textRect = painter.boundingRect(QRect(0,0,0,0),time.toString("hh:mm"));
leftLine = textRect.width()+10;
painter.setBrush(whiteBrush);
for(int i=counter;i<linesNumber;i++)
{
if(i%2==0)
{//hours:
painter.setPen(hourPen);
painter.drawLine(0,y,width,y);
time.setHMS(counter++,0,0);
painter.setPen(blackPen);
painter.drawText(5,y+textRect.height(),time.toString("hh:mm"));
}else{//half hour:
painter.setPen(halfHourPen);
painter.drawLine(leftLine+10,y,width,y);
}
y += gridSize;
}
painter.setPen(hourPen);
painter.drawLine(0,y,width,y);
painter.setPen(redPen);
painter.drawLine(leftLine+10,0,leftLine+10,y);
m_eventRect.setX(0.0);
m_eventRect.setY(0.0);
m_eventRect.setWidth(width);
m_eventRect.setHeight(y);
QSize AdjustSize = this->size();
setMinimumSize(AdjustSize);
}
To copy to clipboard, switch view to plain text mode
Bookmarks