mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-06 17:25:24 +08:00
qt 6.5.1 original
This commit is contained in:
37
examples/widgets/itemviews/storageview/CMakeLists.txt
Normal file
37
examples/widgets/itemviews/storageview/CMakeLists.txt
Normal file
@ -0,0 +1,37 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(storageview LANGUAGES CXX)
|
||||
|
||||
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
||||
set(INSTALL_EXAMPLESDIR "examples")
|
||||
endif()
|
||||
|
||||
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/storageview")
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
||||
|
||||
qt_standard_project_setup()
|
||||
|
||||
qt_add_executable(storageview
|
||||
main.cpp
|
||||
storagemodel.cpp storagemodel.h
|
||||
)
|
||||
|
||||
set_target_properties(storageview PROPERTIES
|
||||
WIN32_EXECUTABLE TRUE
|
||||
MACOSX_BUNDLE TRUE
|
||||
)
|
||||
|
||||
target_link_libraries(storageview PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
)
|
||||
|
||||
install(TARGETS storageview
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
32
examples/widgets/itemviews/storageview/main.cpp
Normal file
32
examples/widgets/itemviews/storageview/main.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// Copyright (C) 2016 Ivan Komissarov
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include <QApplication>
|
||||
#include <QShortcut>
|
||||
#include <QTreeView>
|
||||
|
||||
#include "storagemodel.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
QTreeView view;
|
||||
view.resize(640, 480);
|
||||
view.setWindowTitle("Storage View");
|
||||
view.setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
||||
StorageModel *model = new StorageModel(&view);
|
||||
model->refresh();
|
||||
QShortcut *refreshShortcut = new QShortcut(QKeySequence::Refresh, &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);
|
||||
view.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
164
examples/widgets/itemviews/storageview/storagemodel.cpp
Normal file
164
examples/widgets/itemviews/storageview/storagemodel.cpp
Normal file
@ -0,0 +1,164 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// Copyright (C) 2016 Ivan Komissarov
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "storagemodel.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QLocale>
|
||||
|
||||
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
|
||||
{
|
||||
return ColumnCount;
|
||||
}
|
||||
|
||||
int StorageModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.isValid())
|
||||
return 0;
|
||||
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())
|
||||
return QVariant();
|
||||
|
||||
if (role == Qt::DisplayRole) {
|
||||
const QStorageInfo &volume = m_volumes.at(index.row());
|
||||
switch (index.column()) {
|
||||
case ColumnRootPath:
|
||||
return QDir::toNativeSeparators(volume.rootPath());
|
||||
case ColumnName:
|
||||
return volume.name();
|
||||
case ColumnDevice:
|
||||
return volume.device();
|
||||
case ColumnFileSystemName:
|
||||
return volume.fileSystemType();
|
||||
case ColumnTotal:
|
||||
return QLocale().formattedDataSize(volume.bytesTotal());
|
||||
case ColumnFree:
|
||||
return QLocale().formattedDataSize(volume.bytesFree());
|
||||
case ColumnAvailable:
|
||||
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:
|
||||
return volume.isReadOnly();
|
||||
case ColumnIsValid:
|
||||
return volume.isValid();
|
||||
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"
|
||||
"Display Name: %3\n"
|
||||
"Device: %4\n"
|
||||
"FileSystem: %5\n"
|
||||
"Total size: %6\n"
|
||||
"Free size: %7\n"
|
||||
"Available size: %8\n"
|
||||
"Is Ready: %9\n"
|
||||
"Is Read-only: %10\n"
|
||||
"Is Valid: %11\n"
|
||||
"Is Root: %12"
|
||||
).
|
||||
arg(QDir::toNativeSeparators(volume.rootPath())).
|
||||
arg(volume.name()).
|
||||
arg(volume.displayName()).
|
||||
arg(QString::fromUtf8(volume.device())).
|
||||
arg(QString::fromUtf8(volume.fileSystemType())).
|
||||
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")).
|
||||
arg(volume.isRoot() ? tr("true") : tr("false"));
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
QVariant StorageModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
if (orientation != Qt::Horizontal)
|
||||
return QVariant();
|
||||
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
switch (section) {
|
||||
case ColumnRootPath:
|
||||
return tr("Root Path");
|
||||
case ColumnName:
|
||||
return tr("Volume Name");
|
||||
case ColumnDevice:
|
||||
return tr("Device");
|
||||
case ColumnFileSystemName:
|
||||
return tr("File System");
|
||||
case ColumnTotal:
|
||||
return tr("Total");
|
||||
case ColumnFree:
|
||||
return tr("Free");
|
||||
case ColumnAvailable:
|
||||
return tr("Available");
|
||||
case ColumnIsReady:
|
||||
return tr("Ready");
|
||||
case ColumnIsReadOnly:
|
||||
return tr("Read-only");
|
||||
case ColumnIsValid:
|
||||
return tr("Valid");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
46
examples/widgets/itemviews/storageview/storagemodel.h
Normal file
46
examples/widgets/itemviews/storageview/storagemodel.h
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// Copyright (C) 2016 Ivan Komissarov
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#ifndef STORAGEMODEL_H
|
||||
#define STORAGEMODEL_H
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include <QStorageInfo>
|
||||
|
||||
class StorageModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_DISABLE_COPY(StorageModel)
|
||||
public:
|
||||
enum Column {
|
||||
ColumnRootPath = 0,
|
||||
ColumnName,
|
||||
ColumnDevice,
|
||||
ColumnFileSystemName,
|
||||
ColumnTotal,
|
||||
ColumnFree,
|
||||
ColumnAvailable,
|
||||
ColumnIsReady,
|
||||
ColumnIsReadOnly,
|
||||
ColumnIsValid,
|
||||
ColumnCount
|
||||
};
|
||||
|
||||
using QAbstractTableModel::QAbstractTableModel;
|
||||
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
#endif // STORAGEMODEL_H
|
12
examples/widgets/itemviews/storageview/storageview.pro
Normal file
12
examples/widgets/itemviews/storageview/storageview.pro
Normal file
@ -0,0 +1,12 @@
|
||||
QT += core gui widgets
|
||||
requires(qtConfig(treeview))
|
||||
TARGET = storageview
|
||||
TEMPLATE = app
|
||||
SOURCES += storagemodel.cpp \
|
||||
main.cpp
|
||||
HEADERS += \
|
||||
storagemodel.h
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/storageview
|
||||
INSTALLS += target
|
Reference in New Issue
Block a user