ciao!
avrei bisogno di un consiglio su come strutturare meglio alcune parti di un programmino che sto facendo.
ho questa funzione (statica per ora):
quello che non mi piace molto è quell'if.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(); }
e il motivo è che questa funzione la lancio per ogni voce di una lista, in questo modo:
pensavo di: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(); }
-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.....

Rispondi quotando
