Ich programmiere gerade ein Programm das mit Hilfe von ffmpeg
zum Konvertieren von Media-Dateien dienen soll.
Die Grundidee funktioniert auch schon gut.
Nun möchte ich allerdings wärend des Vorgangs der Kompilierung
Eine Komplett andere Oberfläche anzeigen um den Vorgang der Kompilierung
für den User zu Kommentieren.
Das versuche ich mit QStackedWidget.
Das Problem ist jetzt das ich es nicht schaffe bei QStackedWidget
den richtigen Index von einer Funktion ungleich MyConv aus einzustellen
Ich habe dies mittels setCurrentIndex und setCurrentWidget probiert so wie
mit einem im folgenden Quelltext auskommentierten SIGNAL-SLOT-System.
(Versuche von converting() aus dies zu tun)
Quellcode von MyConv.h
Code: Alles auswählen
#ifndef MYCONV_H
#define MYCONV_H
#include <QtGui>
class MyConv : public QMainWindow
{
Q_OBJECT
public:
QStackedWidget *stack;
MyConv(QMainWindow *parent = 0);
QLineEdit* line;
QStringList files;
bool point;
QTextEdit* edit;
private:
QPushButton* convert;
QString directory;
private slots:
void openDirectory();
void converting();
signals:
void changeSite(int wstack);
};
#endif
Code: Alles auswählen
#include "MyConv.h"
MyConv::MyConv(QMainWindow *parent) : QMainWindow(parent)
{
stack = new QStackedWidget;
QMenu *dataMenu = new QMenu("&Data", this);
dataMenu->addAction( QIcon(":images/data_icon.png"), "&Folder", this, SLOT(openDirectory()), QKeySequence("Ctrl+O") );
menuBar()->addMenu(dataMenu);
QHBoxLayout* hbox = new QHBoxLayout;
QWidget *mainWidget = new QWidget;
line = new QLineEdit("mp3");
convert = new QPushButton("Convert");
convert->hide();
hbox->addWidget(line);
hbox->addWidget(convert);
mainWidget->setLayout(hbox);
edit = new QTextEdit("loading...");
stack->addWidget(mainWidget);
stack->addWidget(edit);
// connect( this, SIGNAL(changeSite(int)), stack, SLOT(setCurrentIndex(int)) );
connect( convert, SIGNAL(clicked()), this, SLOT(converting()) );
setCentralWidget(stack);
setWindowTitle("Converter");
}
void MyConv::openDirectory()
{
directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"), ":", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(directory=="")
{
convert->hide();
}
else
{
convert->show();
QDir dir(directory);
dir.setFilter(QDir::Files);
files = dir.entryList();
}
}
void MyConv::converting()
{
// emit changeSite(1);
stack->setCurrentIndex(1);
for(int i = 0; i<files.size(); ++i)
{
point=false;
QString file;
file.append(files.at(i));
QString name;
int i=0;
while(file[i]!='.')
{
name.append(file[i]);
i++;
if(i==file.size())
{
point=true;
break;
}
}
if(point==false)
{
name=name+'.'+line->displayText();
QString out = "ffmpeg -i \""+directory+"/"+file+"\" \""+directory+"/"+name+"\"";
std::string stdout = out.toStdString();
int t = system(stdout.c_str());
t=t;
}
}
// emit changeSite(0);
stack->setCurrentIndex(0);
}
MfG Irods
PS: Fürs ausprobieren hier
main.cpp
Code: Alles auswählen
#include <QApplication>
#include "MyConv.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyConv* conv = new MyConv;
conv->show();
return app.exec();
}