diff options
author | Arno <am@disconnect.de> | 2012-03-10 10:03:18 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-03-10 10:03:18 +0100 |
commit | 2f6d52fdea06ff45c9e03768e90eaac658cef487 (patch) | |
tree | 6332eef560a5ca0fa100f4ed6bf202c5f50faac1 /pictureviewer2.cpp | |
parent | 08c7cc837379ae4f085a6cc0d44a8b58bdb5a030 (diff) | |
download | SheMov-2f6d52fdea06ff45c9e03768e90eaac658cef487.tar.gz SheMov-2f6d52fdea06ff45c9e03768e90eaac658cef487.tar.bz2 SheMov-2f6d52fdea06ff45c9e03768e90eaac658cef487.zip |
Show filename in PictureViewer
Create a GraphicsItem showing the filename at the top of the view. Also
put the filename in the window title.
Diffstat (limited to 'pictureviewer2.cpp')
-rw-r--r-- | pictureviewer2.cpp | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 1b797d3..1f8f15b 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -14,11 +14,13 @@ #include <QContextMenuEvent> #include <QMenu> #include <QTimer> +#include <QPainter> +#include <QStyleOptionGraphicsItem> #include "pictureviewer2.h" #include "pictureswidget.h" -PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png") { +PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png"), mFnItem(0) { //behave like QDialog, but don't be one... setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)); @@ -43,6 +45,7 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) setMinimumSize(mMinimunSize); move(50, 50); setVisible(false); + mScene->setSceneRect(QRectF(0, 0, width() - 10, height() - 10)); showFile(mFiles.at(mCurPos)); } @@ -123,15 +126,30 @@ void PictureViewer2::showFile(const PicData &file){ } if(mCur){ mScene->removeItem(mCur); + delete mCur; mCur = 0; } mCur = new QGraphicsPixmapItem(pixmap); - float cX = width() - pixmap.width() / 2; - float cY = height() - pixmap.height() / 2; - mCur->setPos(QPointF(cX, cY)); + float cX = (width() / 2) - (pixmap.width() / 2); + float cY = height() / 2 - pixmap.height() / 2; mScene->addItem(mCur); + mCur->setPos(cX, cY); + setWindowTitle(constructWindowTitle()); + constructFilenameItem(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString()); } +void PictureViewer2::constructFilenameItem(const QString &filename){ + if(mFnItem){ + mScene->removeItem(mFnItem); + delete mFnItem; + } + mFnItem = new PictureViewer2FilenameItem(filename); + QSizeF itemSize = mFnItem->boundingRect().size(); + int thisWidth = size().width(); + int xPos = (thisWidth / 2) - (itemSize.width() / 2); + mFnItem->setPos(xPos, 0); + mScene->addItem(mFnItem); +} void PictureViewer2::setCurPalette(const QPixmap &pic){ QPoint val1 = QPoint(qrand() % pic.width(), qrand() % pic.height()); @@ -144,3 +162,40 @@ void PictureViewer2::setCurPalette(const QPixmap &pic){ g.setColorAt(1, c2); setBackgroundBrush(QBrush(g)); } + +QString PictureViewer2::constructWindowTitle() const { + QString retval = QString(tr("PicViewer 2 - [%1]")).arg(mFiles.at(mCurPos).at(PicFilesModel::FileName).toString()); + return retval; +} + +PictureViewer2FilenameItem::PictureViewer2FilenameItem(const QString &fileName, QGraphicsItem *parent) : QGraphicsItem(parent), mFilename(fileName) { + setZValue(1); +} + +QRectF PictureViewer2FilenameItem::boundingRect() const { + QSize size = qApp->fontMetrics().size(Qt::TextSingleLine, mFilename); + size += QSize(2, 2); + QRectF retval; + retval.setWidth(size.width()); + retval.setHeight(size.height()); + return retval; +} + +void PictureViewer2FilenameItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ + Q_UNUSED(option); + Q_UNUSED(widget); + painter->save(); + painter->setRenderHint(QPainter::Antialiasing, false); + painter->setRenderHint(QPainter::TextAntialiasing, true); + QColor bgColor = QColor(237, 12, 102); + bgColor.setAlpha(70); + QColor fgColor = QColor(209, 207, 232); + QBrush brush(bgColor); + painter->setPen(QColor(Qt::yellow)); + painter->setBrush(brush); + painter->drawRect(boundingRect()); + painter->setPen(QPen(fgColor)); + QPoint start(1, qApp->fontMetrics().ascent() + 1); + painter->drawText(start, mFilename); + painter->restore(); +} |