// Header File
#ifndef MINIBLOGENTRYWIDGET_H
#define MINIBLOGENTRYWIDGET_H
#include <QWidget>
namespace Douban
{
class MiniBlogEntryWidget
: public QWidget {
Q_OBJECT
public:
MiniBlogEntryWidget(MiniBlogEntry*);
~MiniBlogEntryWidget(){}
QSize sizeHint
() const {return m_sizeHint;
} QSize minimumSizeHint
() const {return m_sizeHint;
} void updateContent();
void updateRelatedImg();
private:
MiniBlogEntry* m_entry;
};
}
#endif // MINIBLOGENTRYWIDGET_H
// Source File
MiniBlogEntryWidget::MiniBlogEntryWidget(MiniBlogEntry* e):
m_entry(e)
{
setObjectName("MiniBlogEntry");
m_bgFrame->setObjectName("bgFrame");
m_contentText->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_contentText->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
connect(m_contentText,
SIGNAL(anchorClicked
(QUrl)),
this,
SLOT(onLinkClicked
(QUrl)));
ensurePolished();
setMaximumWidth(minimumWidth());
m_contentText->setDocument(m_contentDoc);
m_contentDoc->setTextWidth(m_contentText->width());
m_sizeHint.setWidth(minimumWidth());
}
void MiniBlogEntryWidget::updateContent()
{
show();
//... //omit some other unimportant code.
// Set the related image and the content text
QString html
= Entry_HTML_TEMPLATE_IMAGE;
QUrl("relatedImage.jpg"),
m_contentDoc->setHtml(html.arg(m_entry->content()));
m_contentText->resize(m_contentText->width(),
m_contentDoc->size().height());
int h = m_contentText->y() + m_contentText->height();
if(h < minimumHeight())
h = minimumHeight();
m_sizeHint.setHeight(h);
m_bgFrame->resize(m_sizeHint);
resize(m_sizeHint);
}
void MiniBlogEntryWidget::updateRelatedImg()
{
QString html
= Entry_HTML_TEMPLATE_IMAGE;
QUrl("relatedImage.jpg"),
m_entry->relatedImg());
m_contentDoc->setHtml(html->arg(m_entry->content()));
m_contentText->resize(m_contentText->width(),
m_contentDoc->size().height());
int h = m_contentText->y() + m_contentText->height();
if(h < minimumHeight())
h = minimumHeight();
if(m_sizeHint.height() < h)
{
m_sizeHint.setHeight(h);
m_bgFrame->resize(m_sizeHint);
resize(m_sizeHint);
updateGeometry();
}
}
// Header File
#ifndef MINIBLOGENTRYWIDGET_H
#define MINIBLOGENTRYWIDGET_H
#include <QWidget>
class QFrame;
class QTextBrowser;
class QTextDocument;
namespace Douban
{
class MiniBlogEntryWidget : public QWidget
{
Q_OBJECT
public:
MiniBlogEntryWidget(MiniBlogEntry*);
~MiniBlogEntryWidget(){}
QSize sizeHint() const {return m_sizeHint;}
QSize minimumSizeHint() const {return m_sizeHint;}
void updateContent();
void updateRelatedImg();
private:
MiniBlogEntry* m_entry;
QFrame* m_bgFrame;
QTextBrowser* m_contentText;
QTextDocument* m_contentDoc;
QSize m_sizeHint;
};
}
#endif // MINIBLOGENTRYWIDGET_H
// Source File
MiniBlogEntryWidget::MiniBlogEntryWidget(MiniBlogEntry* e):
QWidget(0),
m_entry(e)
{
setObjectName("MiniBlogEntry");
m_bgFrame = new QFrame(this);
m_bgFrame->setObjectName("bgFrame");
m_contentText = new QTextBrowser(this);
m_contentText->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_contentText->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
connect(m_contentText,SIGNAL(anchorClicked(QUrl)),this,SLOT(onLinkClicked(QUrl)));
ensurePolished();
setMaximumWidth(minimumWidth());
m_contentDoc = new QTextDocument();
m_contentText->setDocument(m_contentDoc);
m_contentDoc->setTextWidth(m_contentText->width());
m_sizeHint.setWidth(minimumWidth());
}
void MiniBlogEntryWidget::updateContent()
{
show();
//... //omit some other unimportant code.
// Set the related image and the content text
QString html = Entry_HTML_TEMPLATE_IMAGE;
m_contentDoc->addResource(QTextDocument::ImageResource,
QUrl("relatedImage.jpg"),
QVariant(m_entry->relatedImg()));
m_contentDoc->setHtml(html.arg(m_entry->content()));
m_contentText->resize(m_contentText->width(),
m_contentDoc->size().height());
int h = m_contentText->y() + m_contentText->height();
if(h < minimumHeight())
h = minimumHeight();
m_sizeHint.setHeight(h);
m_bgFrame->resize(m_sizeHint);
resize(m_sizeHint);
}
void MiniBlogEntryWidget::updateRelatedImg()
{
QString html = Entry_HTML_TEMPLATE_IMAGE;
m_contentDoc->addResource(QTextDocument::ImageResource,
QUrl("relatedImage.jpg"),
m_entry->relatedImg());
m_contentDoc->setHtml(html->arg(m_entry->content()));
m_contentText->resize(m_contentText->width(),
m_contentDoc->size().height());
int h = m_contentText->y() + m_contentText->height();
if(h < minimumHeight())
h = minimumHeight();
if(m_sizeHint.height() < h)
{
m_sizeHint.setHeight(h);
m_bgFrame->resize(m_sizeHint);
resize(m_sizeHint);
updateGeometry();
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks