20 #include "mainwindow.h" 21 #include "ui_mainwindow.h" 22 #include <QFileDialog> 23 #include <QStandardItemModel> 24 #include <QMessageBox> 27 MainWindow::MainWindow(QWidget *parent) :
32 QStringList formatlist;
33 formatlist <<
"SQLite" <<
"ESRI Shapefile";
34 ui->f->addItems(formatlist);
38 MainWindow::~MainWindow()
43 void MainWindow::setDefaults()
47 ui->reference->clear();
48 ui->msknodata->setText(
"0");
50 ui->confusion->setChecked(
false);
53 void MainWindow::on_actionReference_triggered()
55 QString qsreference= QFileDialog::getOpenFileName(
this,
"Reference");
56 ui->reference->setText(qsreference);
59 void MainWindow::on_actionMask_triggered()
61 QString qsmask = QFileDialog::getOpenFileName(
this,
"Mask");
62 ui->mask->setText(qsmask);
65 void MainWindow::on_actionOutput_triggered()
67 QString qsoutput = QFileDialog::getSaveFileName(
this,
"Output image",
"",
"*.*");
68 ui->output->setText(qsoutput);
71 void MainWindow::on_actionInput_triggered()
73 QString qsinput = QFileDialog::getOpenFileName(
this,
"Input");
74 ui->input->setText(qsinput);
77 void MainWindow::on_toolButton_input_clicked()
79 on_actionInput_triggered();
82 void MainWindow::on_toolButton_mask_clicked()
84 on_actionMask_triggered();
87 void MainWindow::on_toolButton_output_clicked()
89 on_actionOutput_triggered();
92 void MainWindow::on_toolButton_reference_clicked()
94 on_actionReference_triggered();
97 void MainWindow::setClassTable(
const QStringList &labels)
99 QStandardItemModel *model =
new QStandardItemModel(labels.size(),2,
this);
100 model->setHorizontalHeaderItem(0,
new QStandardItem(QString(
"label name")));
101 model->setHorizontalHeaderItem(1,
new QStandardItem(QString(
"class nr")));
102 for(
int ilabel=0;ilabel<labels.size();++ilabel){
103 QStandardItem *firstCol =
new QStandardItem(QString(labels[ilabel]));
104 model->setItem(ilabel,0,firstCol);
105 QStandardItem *secondCol =
new QStandardItem(QString::number(ilabel+1));
106 model->setItem(ilabel,1,secondCol);
108 ui->tableView_labels->setModel(model);
111 void MainWindow::on_pushButton_run_clicked()
114 ui->commandLineEdit->clear();
115 ui->consoleEdit->clear();
116 QString program =
"pkdiff";
117 if(ui->input->text().isEmpty()){
118 MainWindow::on_actionInput_triggered();
119 if(ui->input->text().isEmpty()){
120 QString qsError=
"No input raster dataset selected";
124 if(ui->reference->text().isEmpty()){
125 MainWindow::on_actionReference_triggered();
126 if(ui->reference->text().isEmpty()){
127 QString qsError=
"No reference vector file selected";
131 for(
int irow=0;irow<ui->tableView_labels->model()->rowCount();++irow){
133 qsOption+=
" --class ";
134 qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,0)).toString();
135 qsOption+=
" --reclass ";
136 qsOption+=ui->tableView_labels->model()->data(ui->tableView_labels->model()->index(irow,1)).toString();
140 QList<QComboBox*> qcomboBoxList = this->findChildren<QComboBox *>();
142 for(QList<QComboBox*>::ConstIterator qcbit=qcomboBoxList.begin();qcbit!=qcomboBoxList.end();++qcbit){
145 qsOption+=(*qcbit)->objectName();
148 program+=(*qcbit)->currentText();
151 QList<QLineEdit*> qlineEditList = this->findChildren<QLineEdit *>();
153 for(QList<QLineEdit*>::ConstIterator qlbit=qlineEditList.begin();qlbit!=qlineEditList.end();++qlbit){
154 if(!((*qlbit)->text().isEmpty())){
157 qsOption+=(*qlbit)->objectName();
159 qsOption+=(*qlbit)->text();
164 if(ui->confusion->isChecked())
165 program+=
" --confusion";
167 ui->commandLineEdit->setText(program);
170 QProcess *myProcess =
new QProcess(
this);
171 myProcess->start(program);
172 myProcess->setProcessChannelMode(QProcess::MergedChannels);
173 this->setCursor(Qt::WaitCursor);
174 myProcess->waitForFinished(-1);
175 this->setCursor(Qt::ArrowCursor);
177 QString p_stderr = myProcess->readAllStandardError();
178 if(!p_stderr.isEmpty()){
179 msgBox.setText(p_stderr);
182 QString p_stdout = myProcess->readAll();
183 ui->consoleEdit->insertPlainText(p_stdout);
186 catch(QString qsError){
188 msgBox.setText(qsError);
193 void MainWindow::on_pushButton_restore_clicked()
198 void MainWindow::on_commandLinkButtonPrepareTable_clicked()
200 int nclass=ui->nclass->text().toInt();
202 for(
int iclass=1;iclass<=nclass;++iclass){
203 QString lstring=
"label";
204 lstring+=QString::number(iclass);
207 setClassTable(labels);