引入ListIcon代理
This commit is contained in:
parent
03461c6d77
commit
149b0c9369
4
main.cpp
4
main.cpp
|
@ -5,8 +5,8 @@
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
// MainWindow w;
|
MainWindow w;
|
||||||
// w.show();
|
w.show();
|
||||||
|
|
||||||
// DBUnit t;
|
// DBUnit t;
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,14 @@
|
||||||
#include <QSplitter>
|
#include <QSplitter>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
#define GROUP_ITEMSCOUNT Qt::UserRole + 1
|
|
||||||
#define GROUP_TITLE Qt::DisplayRole
|
|
||||||
#define GROUP_COVER0 Qt::DecorationRole
|
#define GROUP_COVER0 Qt::DecorationRole
|
||||||
#define GROUP_COVER1 Qt::UserRole + 3
|
#define GROUP_COVER1 Qt::UserRole + 3
|
||||||
#define GROUP_COVER2 Qt::UserRole + 4
|
#define GROUP_COVER2 Qt::UserRole + 4
|
||||||
|
#define GROUP_TITLE Qt::DisplayRole
|
||||||
|
#define GROUP_ITEMSCOUNT Qt::UserRole + 1
|
||||||
|
|
||||||
|
#define ITEM_ICON Qt::DecorationRole
|
||||||
|
#define ITEM_TITLE Qt::DisplayRole
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget* parent)
|
MainWindow::MainWindow(QWidget* parent)
|
||||||
: QMainWindow(parent), groups_view(new QListView(this)),
|
: QMainWindow(parent), groups_view(new QListView(this)),
|
||||||
|
@ -31,6 +34,9 @@ MainWindow::MainWindow(QWidget* parent)
|
||||||
groups_view->setItemDelegate(new GroupDisplayDelegate);
|
groups_view->setItemDelegate(new GroupDisplayDelegate);
|
||||||
groups_view->setMovement(QListView::Free);
|
groups_view->setMovement(QListView::Free);
|
||||||
init_groups_list(groups_list);
|
init_groups_list(groups_list);
|
||||||
|
|
||||||
|
init_groups_list(items_list);
|
||||||
|
items_view->setItemDelegate(new ListIconDelegate());
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
@ -104,14 +110,20 @@ GroupDisplayDelegate::paint(QPainter* painter, const QStyleOptionViewItem& optio
|
||||||
auto cover0 = index.data(GROUP_COVER0);
|
auto cover0 = index.data(GROUP_COVER0);
|
||||||
if (cover0.isNull())
|
if (cover0.isNull())
|
||||||
cover0 = default_cover->pixmap(QSize(100, 150));
|
cover0 = default_cover->pixmap(QSize(100, 150));
|
||||||
|
else
|
||||||
|
cover0 = cover0.value<QIcon>().pixmap(QSize(100, 150));
|
||||||
|
|
||||||
auto cover1 = index.data(GROUP_COVER1);
|
auto cover1 = index.data(GROUP_COVER1);
|
||||||
if (cover1.isNull())
|
if (cover1.isNull())
|
||||||
cover1 = default_cover->pixmap(QSize(100, 150));
|
cover1 = default_cover->pixmap(QSize(100, 150));
|
||||||
|
else
|
||||||
|
cover0 = cover0.value<QIcon>().pixmap(QSize(100, 150));
|
||||||
|
|
||||||
auto cover2 = index.data(GROUP_COVER2);
|
auto cover2 = index.data(GROUP_COVER2);
|
||||||
if (cover2.isNull())
|
if (cover2.isNull())
|
||||||
cover2 = default_cover->pixmap(QSize(100, 150));
|
cover2 = default_cover->pixmap(QSize(100, 150));
|
||||||
|
else
|
||||||
|
cover0 = cover0.value<QIcon>().pixmap(QSize(100, 150));
|
||||||
|
|
||||||
auto valid_rect = option.rect - QMargins(15, 15, 15, 15);
|
auto valid_rect = option.rect - QMargins(15, 15, 15, 15);
|
||||||
|
|
||||||
|
@ -142,3 +154,58 @@ GroupDisplayDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelI
|
||||||
{
|
{
|
||||||
return QSize(400, 145);
|
return QSize(400, 145);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListIconDelegate::ListIconDelegate()
|
||||||
|
: default_cover(new QIcon(":/imgs/default/cover.jpg"))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ListIconDelegate::~ListIconDelegate()
|
||||||
|
{
|
||||||
|
delete default_cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ListIconDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
drawBackground(painter, option, index);
|
||||||
|
|
||||||
|
auto valid_rect = option.rect - QMargins(15, 15, 15, 15);
|
||||||
|
auto cover = index.data(ITEM_ICON);
|
||||||
|
if (!cover.isValid())
|
||||||
|
cover = default_cover->pixmap(100, 150);
|
||||||
|
else
|
||||||
|
cover = cover.value<QIcon>().pixmap(QSize(100, 150));
|
||||||
|
|
||||||
|
painter->drawPixmap(valid_rect, cover.value<QPixmap>());
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize
|
||||||
|
ListIconDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
return QSize(100, 160);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget*
|
||||||
|
ListIconDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
return new QLineEdit(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ListIconDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
static_cast<QLineEdit*>(editor)->setText(index.data().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ListIconDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
model->setData(index, static_cast<QLineEdit*>(editor)->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ListIconDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
|
{
|
||||||
|
editor->setGeometry(option.rect);
|
||||||
|
}
|
||||||
|
|
18
mainwindow.h
18
mainwindow.h
|
@ -25,6 +25,24 @@ private:
|
||||||
QIcon* const default_cover;
|
QIcon* const default_cover;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ListIconDelegate : public QItemDelegate {
|
||||||
|
public:
|
||||||
|
ListIconDelegate();
|
||||||
|
virtual ~ListIconDelegate() override;
|
||||||
|
|
||||||
|
// QAbstractItemDelegate interface
|
||||||
|
public:
|
||||||
|
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||||
|
virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||||
|
virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||||
|
virtual void setEditorData(QWidget* editor, const QModelIndex& index) const override;
|
||||||
|
virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override;
|
||||||
|
virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QIcon* const default_cover;
|
||||||
|
};
|
||||||
|
|
||||||
class MainWindow : public QMainWindow {
|
class MainWindow : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue