ciao!
avrei bisogno di un consiglio su come strutturare meglio alcune parti di un programmino che sto facendo.
ho questa funzione (statica per ora):
codice:
void ImageResize::resize(QString inputImage, QString dir, int width, int height)
{
QFileInfo f(inputImage);
QPixmap pixmap(inputImage);
QPixmap newPixmap;
if (width == 0)
{
newPixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation);
}
else if (height == 0)
{
newPixmap = pixmap.scaledToWidth(width, Qt::SmoothTransformation);
}
else
{
newPixmap = pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
QFile file(dir + f.fileName());
file.open(QIODevice::WriteOnly);
newPixmap.save(&file, 0, 100);
file.close();
}
quello che non mi piace molto è quell'if.
e il motivo è che questa funzione la lancio per ogni voce di una lista, in questo modo:
codice:
WorkerThread::WorkerThread(QVector<QString> list, int width, int height, QString startDir, QObject *parent, bool b) :
QThread(parent), stop(b)
{
this->list = list;
this->width = width;
this->height = height;
this->startDir = startDir;
}
void WorkerThread::run()
{
for (int i = 0; i < list.count(); i++)
{
QMutex mutex;
// PREVIENE CHE ALTRI THREAD IMPOSTINO LO STOP
mutex.lock();
if(this->stop) break;
mutex.unlock();
// EMETTE IL SEGNALE PER IMPOSTARE IL TESTO SULLA GUI
ImageResize::resize(list.value(i), startDir + QDir::separator(), width, height);
emit valueChanged(list.value(i));
this->msleep(500);
}
emit finished();
}
pensavo di:
-spezzare la funzione resize in tre funzioni distinte
-eseguire il controllo su width e height (che passo al costruttore di WorkerThread) prima del ciclo for.
probabilmente è una cosa stupida, ma non riesco a trovare un modo per impostare la funzione da richiamare prima del for.
non so se sono stato chiaro.....