.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
qlonglong imageSpace(const QString&path);
~Widget();
};
#endif // WIDGET_H
x.cpp
#include "widget.h"
#include "QtWidgets"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
}
qlonglong Widget::imageSpace(const QString &path)
{
QDir dir(path);
qlonglong size=0;
QStringList filters;
foreach (QByteArray format, QImageReader::supportedImageFormats()) {
filters+="*."+format;
}
foreach (QString file, dir.entryList(filters,QDir::Files)) {
size+=QFileInfo(dir,file).size();
}
foreach (QString subDir, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot)) {
size+=imageSpace(path+QDir::separator()+subDir);
}
return size;
}
Widget::~Widget()
{
}
main.cpp
#include "widget.h"
#include "QtWidgets"
#include "iostream"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStringList args=QCoreApplication::arguments();
QString path="D:/testimage/";
//QString path=QDir::currentPath();
Widget w;
if (args.count()>1)
{
path[1];
}
std::cout<<"Space used by images in "<<qPrintable(path)
<<"and its subdirectories is "
<<(w.imageSpace(path)/1024)<<" KB"<<std::endl;
QVBoxLayout *layout = new QVBoxLayout;
QLineEdit *lineEdit=new QLineEdit();
layout->addWidget(lineEdit);
qlonglong c=w.imageSpace(path)/1024;
//类型转换 QString::number and QString::setNum
lineEdit->setText("Space used by images in " + QString(qPrintable(path))
+ "and its subdirectories is " + QString::number(c) +" KB");
w.setLayout(layout);
w.show();
return a.exec();
}
类型转换
QString &setNum ( int n, int base = 10 )
QString &setNum ( uint n, int base = 10 )
QString &setNum ( long n, int base = 10 )
QString &setNum ( ulong n, int base = 10 )
QString &setNum ( qlonglong n, int base = 10 )
QString &setNum ( qulonglong n, int base = 10 )
QString &setNum ( short n, int base = 10 )
QString &setNum ( ushort n, int base = 10 )
QString &setNum ( double n, char format = 'g', int precision = 6 )
QString &setNum ( float n, char format = 'g', int precision = 6 )
//setNum()方法将数字n以进制base转换为QString,功能类似于QString的静态函数number()。
//示例:
QString str1;
str1.setNum(100, 16);
//将10进制表示的100,转换为16进制表示的QString,则str1中的结果为"64"