diff options
Diffstat (limited to 'examples/widgets/itemviews')
-rw-r--r-- | examples/widgets/itemviews/addressbook/addresswidget.cpp | 26 | ||||
-rw-r--r-- | examples/widgets/itemviews/addressbook/tablemodel.cpp | 37 | ||||
-rw-r--r-- | examples/widgets/itemviews/addressbook/tablemodel.h | 29 | ||||
-rw-r--r-- | examples/widgets/itemviews/chart/pieview.cpp | 12 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/main.cpp | 2 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/mainwindow.cpp | 33 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/mainwindow.h | 2 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/piecesmodel.cpp | 3 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/puzzlewidget.cpp | 57 | ||||
-rw-r--r-- | examples/widgets/itemviews/puzzle/puzzlewidget.h | 16 | ||||
-rw-r--r-- | examples/widgets/itemviews/storageview/main.cpp | 10 | ||||
-rw-r--r-- | examples/widgets/itemviews/storageview/storagemodel.cpp | 79 | ||||
-rw-r--r-- | examples/widgets/itemviews/storageview/storagemodel.h | 14 |
13 files changed, 185 insertions, 135 deletions
diff --git a/examples/widgets/itemviews/addressbook/addresswidget.cpp b/examples/widgets/itemviews/addressbook/addresswidget.cpp index cff35ad78f..143f6266dd 100644 --- a/examples/widgets/itemviews/addressbook/addresswidget.cpp +++ b/examples/widgets/itemviews/addressbook/addresswidget.cpp @@ -85,10 +85,7 @@ void AddressWidget::showAddEntryDialog() //! [3] void AddressWidget::addEntry(QString name, QString address) { - QList<QPair<QString, QString> >list = table->getList(); - QPair<QString, QString> pair(name, address); - - if (!list.contains(pair)) { + if (!table->getContacts().contains({ name, address })) { table->insertRows(0, 1, QModelIndex()); QModelIndex index = table->index(0, 0, QModelIndex()); @@ -195,6 +192,12 @@ void AddressWidget::setupTabs() &QItemSelectionModel::selectionChanged, this, &AddressWidget::selectionChanged); + connect(this, &QTabWidget::currentChanged, this, [this](int tabIndex) { + auto *tableView = qobject_cast<QTableView *>(widget(tabIndex)); + if (tableView) + emit selectionChanged(tableView->selectionModel()->selection()); + }); + addTab(tableView, str); } } @@ -211,18 +214,16 @@ void AddressWidget::readFromFile(const QString &fileName) return; } - QList<QPair<QString, QString> > pairs = table->getList(); + QList<Contact> contacts; QDataStream in(&file); - in >> pairs; + in >> contacts; - if (pairs.isEmpty()) { + if (contacts.isEmpty()) { QMessageBox::information(this, tr("No contacts in file"), tr("The file you are attempting to open contains no contacts.")); } else { - for (int i=0; i<pairs.size(); ++i) { - QPair<QString, QString> p = pairs.at(i); - addEntry(p.first, p.second); - } + for (const auto &contact: qAsConst(contacts)) + addEntry(contact.name, contact.address); } } //! [7] @@ -237,8 +238,7 @@ void AddressWidget::writeToFile(const QString &fileName) return; } - QList<QPair<QString, QString> > pairs = table->getList(); QDataStream out(&file); - out << pairs; + out << table->getContacts(); } //! [6] diff --git a/examples/widgets/itemviews/addressbook/tablemodel.cpp b/examples/widgets/itemviews/addressbook/tablemodel.cpp index d701ef3223..674e312753 100644 --- a/examples/widgets/itemviews/addressbook/tablemodel.cpp +++ b/examples/widgets/itemviews/addressbook/tablemodel.cpp @@ -56,10 +56,10 @@ TableModel::TableModel(QObject *parent) { } -TableModel::TableModel(QList<QPair<QString, QString> > pairs, QObject *parent) +TableModel::TableModel(QList<Contact> contacts, QObject *parent) : QAbstractTableModel(parent) + , contacts(contacts) { - listOfPairs = pairs; } //! [0] @@ -67,7 +67,7 @@ TableModel::TableModel(QList<QPair<QString, QString> > pairs, QObject *parent) int TableModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); - return listOfPairs.size(); + return contacts.size(); } int TableModel::columnCount(const QModelIndex &parent) const @@ -83,16 +83,16 @@ QVariant TableModel::data(const QModelIndex &index, int role) const if (!index.isValid()) return QVariant(); - if (index.row() >= listOfPairs.size() || index.row() < 0) + if (index.row() >= contacts.size() || index.row() < 0) return QVariant(); if (role == Qt::DisplayRole) { - QPair<QString, QString> pair = listOfPairs.at(index.row()); + const auto &contact = contacts.at(index.row()); if (index.column() == 0) - return pair.first; + return contact.name; else if (index.column() == 1) - return pair.second; + return contact.address; } return QVariant(); } @@ -126,10 +126,8 @@ bool TableModel::insertRows(int position, int rows, const QModelIndex &index) Q_UNUSED(index); beginInsertRows(QModelIndex(), position, position + rows - 1); - for (int row = 0; row < rows; ++row) { - QPair<QString, QString> pair(" ", " "); - listOfPairs.insert(position, pair); - } + for (int row = 0; row < rows; ++row) + contacts.insert(position, { QString(), QString() }); endInsertRows(); return true; @@ -142,9 +140,8 @@ bool TableModel::removeRows(int position, int rows, const QModelIndex &index) Q_UNUSED(index); beginRemoveRows(QModelIndex(), position, position + rows - 1); - for (int row = 0; row < rows; ++row) { - listOfPairs.removeAt(position); - } + for (int row = 0; row < rows; ++row) + contacts.removeAt(position); endRemoveRows(); return true; @@ -157,16 +154,16 @@ bool TableModel::setData(const QModelIndex &index, const QVariant &value, int ro if (index.isValid() && role == Qt::EditRole) { int row = index.row(); - QPair<QString, QString> p = listOfPairs.value(row); + auto contact = contacts.value(row); if (index.column() == 0) - p.first = value.toString(); + contact.name = value.toString(); else if (index.column() == 1) - p.second = value.toString(); + contact.address = value.toString(); else return false; - listOfPairs.replace(row, p); + contacts.replace(row, contact); emit(dataChanged(index, index)); return true; @@ -187,8 +184,8 @@ Qt::ItemFlags TableModel::flags(const QModelIndex &index) const //! [7] //! [8] -QList< QPair<QString, QString> > TableModel::getList() +QList<Contact> TableModel::getContacts() const { - return listOfPairs; + return contacts; } //! [8] diff --git a/examples/widgets/itemviews/addressbook/tablemodel.h b/examples/widgets/itemviews/addressbook/tablemodel.h index 9a669c508d..1004a35d31 100644 --- a/examples/widgets/itemviews/addressbook/tablemodel.h +++ b/examples/widgets/itemviews/addressbook/tablemodel.h @@ -53,16 +53,37 @@ #include <QAbstractTableModel> #include <QList> -#include <QPair> //! [0] + +struct Contact +{ + QString name; + QString address; + + bool operator==(const Contact &other) const + { + return name == other.name && address == other.address; + } +}; + +inline QDataStream &operator<<(QDataStream &stream, const Contact &contact) +{ + return stream << contact.name << contact.address; +} + +inline QDataStream &operator>>(QDataStream &stream, Contact &contact) +{ + return stream >> contact.name >> contact.address; +} + class TableModel : public QAbstractTableModel { Q_OBJECT public: TableModel(QObject *parent = 0); - TableModel(QList<QPair<QString, QString> > listofPairs, QObject *parent = 0); + TableModel(QList<Contact> contacts, QObject *parent = 0); int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; @@ -72,10 +93,10 @@ public: bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; - QList<QPair<QString, QString> > getList(); + QList<Contact> getContacts() const; private: - QList<QPair<QString, QString> > listOfPairs; + QList<Contact> contacts; }; //! [0] diff --git a/examples/widgets/itemviews/chart/pieview.cpp b/examples/widgets/itemviews/chart/pieview.cpp index fb439fae67..3f85e397ee 100644 --- a/examples/widgets/itemviews/chart/pieview.cpp +++ b/examples/widgets/itemviews/chart/pieview.cpp @@ -49,12 +49,8 @@ ****************************************************************************/ #include <QtWidgets> +#include <qmath.h> #include <cmath> - -#ifndef M_PI -#define M_PI 3.1415927 -#endif - #include "pieview.h" PieView::PieView(QWidget *parent) @@ -125,9 +121,9 @@ QModelIndex PieView::indexAt(const QPoint &point) const return QModelIndex(); // Determine the angle of the point. - double angle = (180 / M_PI) * std::acos(cx / d); - if (cy < 0) - angle = 360 - angle; + double angle = qRadiansToDegrees(std::atan2(cy, cx)); + if (angle < 0) + angle = 360 + angle; // Find the relevant slice of the pie. double startAngle = 0.0; diff --git a/examples/widgets/itemviews/puzzle/main.cpp b/examples/widgets/itemviews/puzzle/main.cpp index 1f5e7ee9b2..d013bf078d 100644 --- a/examples/widgets/itemviews/puzzle/main.cpp +++ b/examples/widgets/itemviews/puzzle/main.cpp @@ -58,7 +58,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); MainWindow window; - window.loadImage(":/images/example.jpg"); + window.loadImage(QStringLiteral(":/images/example.jpg")); window.show(); return app.exec(); } diff --git a/examples/widgets/itemviews/puzzle/mainwindow.cpp b/examples/widgets/itemviews/puzzle/mainwindow.cpp index 282a7b477b..d598dc9017 100644 --- a/examples/widgets/itemviews/puzzle/mainwindow.cpp +++ b/examples/widgets/itemviews/puzzle/mainwindow.cpp @@ -69,12 +69,19 @@ MainWindow::MainWindow(QWidget *parent) void MainWindow::openImage() { - const QString fileName = - QFileDialog::getOpenFileName(this, - tr("Open Image"), QString(), - tr("Image Files (*.png *.jpg *.bmp)")); - if (!fileName.isEmpty()) - loadImage(fileName); + const QString directory = + QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QDir::homePath()); + QFileDialog dialog(this, tr("Open Image"), directory); + dialog.setAcceptMode(QFileDialog::AcceptOpen); + dialog.setFileMode(QFileDialog::ExistingFile); + QStringList mimeTypeFilters; + for (const QByteArray &mimeTypeName : QImageReader::supportedMimeTypes()) + mimeTypeFilters.append(mimeTypeName); + mimeTypeFilters.sort(); + dialog.setMimeTypeFilters(mimeTypeFilters); + dialog.selectMimeTypeFilter("image/jpeg"); + if (dialog.exec() == QDialog::Accepted) + loadImage(dialog.selectedFiles().constFirst()); } void MainWindow::loadImage(const QString &fileName) @@ -83,7 +90,7 @@ void MainWindow::loadImage(const QString &fileName) if (!newImage.load(fileName)) { QMessageBox::warning(this, tr("Open Image"), tr("The image file could not be loaded."), - QMessageBox::Cancel); + QMessageBox::Close); return; } puzzleImage = newImage; @@ -107,8 +114,6 @@ void MainWindow::setupPuzzle() (puzzleImage.height() - size) / 2, size, size).scaled(puzzleWidget->imageSize(), puzzleWidget->imageSize(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); - qsrand(QCursor::pos().x() ^ QCursor::pos().y()); - model->addPieces(puzzleImage); puzzleWidget->clear(); } @@ -117,19 +122,15 @@ void MainWindow::setupMenus() { QMenu *fileMenu = menuBar()->addMenu(tr("&File")); - QAction *openAction = fileMenu->addAction(tr("&Open...")); + QAction *openAction = fileMenu->addAction(tr("&Open..."), this, &MainWindow::openImage); openAction->setShortcuts(QKeySequence::Open); - QAction *exitAction = fileMenu->addAction(tr("E&xit")); + QAction *exitAction = fileMenu->addAction(tr("E&xit"), qApp, &QCoreApplication::quit); exitAction->setShortcuts(QKeySequence::Quit); QMenu *gameMenu = menuBar()->addMenu(tr("&Game")); - QAction *restartAction = gameMenu->addAction(tr("&Restart")); - - connect(openAction, &QAction::triggered, this, &MainWindow::openImage); - connect(exitAction, &QAction::triggered, qApp, &QCoreApplication::quit); - connect(restartAction, &QAction::triggered, this, &MainWindow::setupPuzzle); + gameMenu->addAction(tr("&Restart"), this, &MainWindow::setupPuzzle); } void MainWindow::setupWidgets() diff --git a/examples/widgets/itemviews/puzzle/mainwindow.h b/examples/widgets/itemviews/puzzle/mainwindow.h index 7e27dc6f3a..208d3a5281 100644 --- a/examples/widgets/itemviews/puzzle/mainwindow.h +++ b/examples/widgets/itemviews/puzzle/mainwindow.h @@ -65,7 +65,7 @@ class MainWindow : public QMainWindow Q_OBJECT public: - MainWindow(QWidget *parent = 0); + explicit MainWindow(QWidget *parent = nullptr); public slots: void openImage(); diff --git a/examples/widgets/itemviews/puzzle/piecesmodel.cpp b/examples/widgets/itemviews/puzzle/piecesmodel.cpp index 0fbf0cdcc2..f0649d3776 100644 --- a/examples/widgets/itemviews/puzzle/piecesmodel.cpp +++ b/examples/widgets/itemviews/puzzle/piecesmodel.cpp @@ -52,6 +52,7 @@ #include <QIcon> #include <QMimeData> +#include <QRandomGenerator> PiecesModel::PiecesModel(int pieceSize, QObject *parent) : QAbstractListModel(parent), m_PieceSize(pieceSize) @@ -77,7 +78,7 @@ QVariant PiecesModel::data(const QModelIndex &index, int role) const void PiecesModel::addPiece(const QPixmap &pixmap, const QPoint &location) { int row; - if (int(2.0 * qrand() / (RAND_MAX + 1.0)) == 1) + if (QRandomGenerator::global()->bounded(2) == 1) row = 0; else row = pixmaps.size(); diff --git a/examples/widgets/itemviews/puzzle/puzzlewidget.cpp b/examples/widgets/itemviews/puzzle/puzzlewidget.cpp index 78931a95a3..06968da80f 100644 --- a/examples/widgets/itemviews/puzzle/puzzlewidget.cpp +++ b/examples/widgets/itemviews/puzzle/puzzlewidget.cpp @@ -62,9 +62,7 @@ PuzzleWidget::PuzzleWidget(int imageSize, QWidget *parent) void PuzzleWidget::clear() { - pieceLocations.clear(); - piecePixmaps.clear(); - pieceRects.clear(); + pieces.clear(); highlightedRect = QRect(); inPlace = 0; update(); @@ -110,23 +108,20 @@ void PuzzleWidget::dropEvent(QDropEvent *event) && findPiece(targetSquare(event->pos())) == -1) { QByteArray pieceData = event->mimeData()->data("image/x-puzzle-piece"); - QDataStream stream(&pieceData, QIODevice::ReadOnly); - QRect square = targetSquare(event->pos()); - QPixmap pixmap; - QPoint location; - stream >> pixmap >> location; + QDataStream dataStream(&pieceData, QIODevice::ReadOnly); + Piece piece; + piece.rect = targetSquare(event->pos()); + dataStream >> piece.pixmap >> piece.location; - pieceLocations.append(location); - piecePixmaps.append(pixmap); - pieceRects.append(square); + pieces.append(piece); highlightedRect = QRect(); - update(square); + update(piece.rect); event->setDropAction(Qt::MoveAction); event->accept(); - if (location == QPoint(square.x()/pieceSize(), square.y()/pieceSize())) { + if (piece.location == piece.rect.topLeft() / pieceSize()) { inPlace++; if (inPlace == 25) emit puzzleCompleted(); @@ -139,8 +134,8 @@ void PuzzleWidget::dropEvent(QDropEvent *event) int PuzzleWidget::findPiece(const QRect &pieceRect) const { - for (int i = 0; i < pieceRects.size(); ++i) { - if (pieceRect == pieceRects[i]) + for (int i = 0, size = pieces.size(); i < size; ++i) { + if (pieces.at(i).rect == pieceRect) return i; } return -1; @@ -154,13 +149,9 @@ void PuzzleWidget::mousePressEvent(QMouseEvent *event) if (found == -1) return; - QPoint location = pieceLocations[found]; - QPixmap pixmap = piecePixmaps[found]; - pieceLocations.removeAt(found); - piecePixmaps.removeAt(found); - pieceRects.removeAt(found); + Piece piece = pieces.takeAt(found); - if (location == QPoint(square.x()/pieceSize(), square.y()/pieceSize())) + if (piece.location == square.topLeft() / pieceSize()) inPlace--; update(square); @@ -168,7 +159,7 @@ void PuzzleWidget::mousePressEvent(QMouseEvent *event) QByteArray itemData; QDataStream dataStream(&itemData, QIODevice::WriteOnly); - dataStream << pixmap << location; + dataStream << piece.pixmap << piece.location; QMimeData *mimeData = new QMimeData; mimeData->setData("image/x-puzzle-piece", itemData); @@ -176,23 +167,20 @@ void PuzzleWidget::mousePressEvent(QMouseEvent *event) QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); drag->setHotSpot(event->pos() - square.topLeft()); - drag->setPixmap(pixmap); + drag->setPixmap(piece.pixmap); - if (drag->start(Qt::MoveAction) == 0) { - pieceLocations.insert(found, location); - piecePixmaps.insert(found, pixmap); - pieceRects.insert(found, square); + if (drag->start(Qt::MoveAction) == Qt::IgnoreAction) { + pieces.insert(found, piece); update(targetSquare(event->pos())); - if (location == QPoint(square.x()/pieceSize(), square.y()/pieceSize())) + if (piece.location == QPoint(square.x() / pieceSize(), square.y() / pieceSize())) inPlace++; } } void PuzzleWidget::paintEvent(QPaintEvent *event) { - QPainter painter; - painter.begin(this); + QPainter painter(this); painter.fillRect(event->rect(), Qt::white); if (highlightedRect.isValid()) { @@ -201,15 +189,14 @@ void PuzzleWidget::paintEvent(QPaintEvent *event) painter.drawRect(highlightedRect.adjusted(0, 0, -1, -1)); } - for (int i = 0; i < pieceRects.size(); ++i) { - painter.drawPixmap(pieceRects[i], piecePixmaps[i]); - } - painter.end(); + for (const Piece &piece : pieces) + painter.drawPixmap(piece.rect, piece.pixmap); } const QRect PuzzleWidget::targetSquare(const QPoint &position) const { - return QRect(position.x()/pieceSize() * pieceSize(), position.y()/pieceSize() * pieceSize(), pieceSize(), pieceSize()); + return QRect(position / pieceSize() * pieceSize(), + QSize(pieceSize(), pieceSize())); } int PuzzleWidget::pieceSize() const diff --git a/examples/widgets/itemviews/puzzle/puzzlewidget.h b/examples/widgets/itemviews/puzzle/puzzlewidget.h index 137e0b7162..40dd654af6 100644 --- a/examples/widgets/itemviews/puzzle/puzzlewidget.h +++ b/examples/widgets/itemviews/puzzle/puzzlewidget.h @@ -51,9 +51,9 @@ #ifndef PUZZLEWIDGET_H #define PUZZLEWIDGET_H -#include <QList> -#include <QPixmap> #include <QPoint> +#include <QPixmap> +#include <QVector> #include <QWidget> QT_BEGIN_NAMESPACE @@ -67,7 +67,7 @@ class PuzzleWidget : public QWidget Q_OBJECT public: - explicit PuzzleWidget(int imageSize, QWidget *parent = 0); + explicit PuzzleWidget(int imageSize, QWidget *parent = nullptr); void clear(); int pieceSize() const; @@ -85,12 +85,16 @@ protected: void paintEvent(QPaintEvent *event) override; private: + struct Piece { + QPixmap pixmap; + QRect rect; + QPoint location; + }; + int findPiece(const QRect &pieceRect) const; const QRect targetSquare(const QPoint &position) const; - QList<QPixmap> piecePixmaps; - QList<QRect> pieceRects; - QList<QPoint> pieceLocations; + QVector<Piece> pieces; QRect highlightedRect; int inPlace; int m_ImageSize; diff --git a/examples/widgets/itemviews/storageview/main.cpp b/examples/widgets/itemviews/storageview/main.cpp index c8057186fc..f349e58fad 100644 --- a/examples/widgets/itemviews/storageview/main.cpp +++ b/examples/widgets/itemviews/storageview/main.cpp @@ -51,6 +51,7 @@ #include <QtWidgets/QApplication> #include <QtWidgets/QHeaderView> +#include <QtWidgets/QShortcut> #include <QtWidgets/QTreeView> #include "storagemodel.h" @@ -60,9 +61,16 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); QTreeView view; - view.setModel(new StorageModel(&view)); view.resize(640, 480); + view.setWindowTitle("Storage View"); view.setSelectionBehavior(QAbstractItemView::SelectRows); + + StorageModel *model = new StorageModel(&view); + model->refresh(); + QShortcut *refreshShortcut = new QShortcut(Qt::CTRL + Qt::Key_R, &view); + QObject::connect(refreshShortcut, &QShortcut::activated, model, &StorageModel::refresh); + view.setModel(model); + int columnCount = view.model()->columnCount(); for (int c = 0; c < columnCount; ++c) view.resizeColumnToContents(c); diff --git a/examples/widgets/itemviews/storageview/storagemodel.cpp b/examples/widgets/itemviews/storageview/storagemodel.cpp index b7c594f8f7..063f126d86 100644 --- a/examples/widgets/itemviews/storageview/storagemodel.cpp +++ b/examples/widgets/itemviews/storageview/storagemodel.cpp @@ -52,29 +52,27 @@ #include "storagemodel.h" #include <QDir> +#include <QLocale> #include <qmath.h> +#include <algorithm> #include <cmath> -static QString sizeToString(qint64 size) +StorageModel::StorageModel(QObject *parent) : + QAbstractTableModel(parent) { - static const char *const strings[] = { "b", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; - - if (size <= 0) - return StorageModel::tr("0 b"); - - double power = std::log((double)size)/std::log(1024.0); - int intPower = (int)power; - intPower = intPower >= 8 ? 8 - 1 : intPower; - - double normSize = size / std::pow(1024.0, intPower); - //: this should expand to "1.23 GB" - return StorageModel::tr("%1 %2").arg(normSize, 0, 'f', intPower > 0 ? 2 : 0).arg(strings[intPower]); } -StorageModel::StorageModel(QObject *parent) : - QAbstractTableModel(parent), - m_volumes(QStorageInfo::mountedVolumes()) +void StorageModel::refresh() { + beginResetModel(); + m_volumes = QStorageInfo::mountedVolumes(); + std::sort(m_volumes.begin(), m_volumes.end(), + [](const QStorageInfo &st1, const QStorageInfo &st2) { + static const QString rootSortString = QStringLiteral(" "); + return (st1.isRoot() ? rootSortString : st1.rootPath()) + < (st2.isRoot() ? rootSortString : st2.rootPath()); + }); + endResetModel(); } int StorageModel::columnCount(const QModelIndex &/*parent*/) const @@ -89,6 +87,22 @@ int StorageModel::rowCount(const QModelIndex &parent) const return m_volumes.count(); } +Qt::ItemFlags StorageModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags result = QAbstractTableModel::flags(index); + switch (index.column()) { + case ColumnAvailable: + case ColumnIsReady: + case ColumnIsReadOnly: + case ColumnIsValid: + result |= Qt::ItemIsUserCheckable; + break; + default: + break; + } + return result; +} + QVariant StorageModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) @@ -106,11 +120,17 @@ QVariant StorageModel::data(const QModelIndex &index, int role) const case ColumnFileSystemName: return volume.fileSystemType(); case ColumnTotal: - return sizeToString(volume.bytesTotal()); + return QLocale().formattedDataSize(volume.bytesTotal()); case ColumnFree: - return sizeToString(volume.bytesFree()); + return QLocale().formattedDataSize(volume.bytesFree()); case ColumnAvailable: - return sizeToString(volume.bytesAvailable()); + return QLocale().formattedDataSize(volume.bytesAvailable()); + default: + break; + } + } else if (role == Qt::CheckStateRole) { + const QStorageInfo &volume = m_volumes.at(index.row()); + switch (index.column()) { case ColumnIsReady: return volume.isReady(); case ColumnIsReadOnly: @@ -120,7 +140,18 @@ QVariant StorageModel::data(const QModelIndex &index, int role) const default: break; } + } else if (role == Qt::TextAlignmentRole) { + switch (index.column()) { + case ColumnTotal: + case ColumnFree: + case ColumnAvailable: + return Qt::AlignTrailing; + default: + break; + } + return Qt::AlignLeading; } else if (role == Qt::ToolTipRole) { + QLocale locale; const QStorageInfo &volume = m_volumes.at(index.row()); return tr("Root path : %1\n" "Name: %2\n" @@ -140,9 +171,9 @@ QVariant StorageModel::data(const QModelIndex &index, int role) const arg(volume.displayName()). arg(QString::fromUtf8(volume.device())). arg(QString::fromUtf8(volume.fileSystemType())). - arg(sizeToString(volume.bytesTotal())). - arg(sizeToString(volume.bytesFree())). - arg(sizeToString(volume.bytesAvailable())). + arg(locale.formattedDataSize(volume.bytesTotal())). + arg(locale.formattedDataSize(volume.bytesFree())). + arg(locale.formattedDataSize(volume.bytesAvailable())). arg(volume.isReady() ? tr("true") : tr("false")). arg(volume.isReadOnly() ? tr("true") : tr("false")). arg(volume.isValid() ? tr("true") : tr("false")). @@ -161,13 +192,13 @@ QVariant StorageModel::headerData(int section, Qt::Orientation orientation, int switch (section) { case ColumnRootPath: - return tr("Root path"); + return tr("Root Path"); case ColumnName: return tr("Volume Name"); case ColumnDevice: return tr("Device"); case ColumnFileSystemName: - return tr("File system"); + return tr("File System"); case ColumnTotal: return tr("Total"); case ColumnFree: diff --git a/examples/widgets/itemviews/storageview/storagemodel.h b/examples/widgets/itemviews/storageview/storagemodel.h index 2b37414d8d..787b2f04de 100644 --- a/examples/widgets/itemviews/storageview/storagemodel.h +++ b/examples/widgets/itemviews/storageview/storagemodel.h @@ -74,13 +74,17 @@ public: ColumnCount }; - explicit StorageModel(QObject *parent = 0); + explicit StorageModel(QObject *parent = nullptr); - int columnCount(const QModelIndex &parent) const; - int rowCount(const QModelIndex &parent) const; + int columnCount(const QModelIndex &parent) const override; + int rowCount(const QModelIndex &parent) const override; - QVariant data(const QModelIndex &index, int role) const; - QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QVariant data(const QModelIndex &index, int role) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + +public slots: + void refresh(); private: QList<QStorageInfo> m_volumes; |