#include "mainwindow.h" #include "ui_mainwindow.h" #include "canswerform.h" #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->questTextEdit->setEnabled(false); createToolBar(); makeInterface(); } void MainWindow::makeInterface() { QVBoxLayout *leftVbl = new QVBoxLayout; leftVbl->addWidget(ui->questListView); rightVbl = new QVBoxLayout; rightVbl->addWidget(ui->questTextEdit, 1); rightVbl->setSpacing(20); testsWidget = new QWidget; testsVbl = new QVBoxLayout; testsWidget->setLayout(testsVbl); ui->scrollArea->setWidget(testsWidget); rightVbl->addWidget(ui->scrollArea,8); QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addLayout(leftVbl); mainLayout->addLayout(rightVbl); ui->centralWidget->setLayout(mainLayout); } void MainWindow::createToolBar() { //Add buttons into toolbar newBtn = new QToolButton; newBtn->setIcon(QIcon(":/icons/res/icons/filenew.png")); newBtn->setToolTip(tr("Создать файл")); newBtn->iconSize().setHeight(32); newBtn->iconSize().setWidth(32); connect(newBtn, SIGNAL(clicked()), this, SLOT(newFile())); ui->mainToolBar->addWidget(newBtn); loadBtn = new QToolButton; loadBtn->setIcon(QIcon(":/icons/res/icons/fileopen.png")); loadBtn->setToolTip(tr("Открыть файл")); loadBtn->iconSize().setHeight(32); loadBtn->iconSize().setWidth(32); connect(loadBtn, SIGNAL(clicked()), this, SLOT(openFile())); ui->mainToolBar->addWidget(loadBtn); saveBtn = new QToolButton; saveBtn->setIcon(QIcon(":/icons/res/icons/filesave.png")); saveBtn->setToolTip(tr("Создать файл")); saveBtn->iconSize().setHeight(32); saveBtn->iconSize().setWidth(32); connect(saveBtn, SIGNAL(clicked()), this, SLOT(saveFile())); saveBtn->setEnabled(false); ui->mainToolBar->addWidget(saveBtn); ui->mainToolBar->addSeparator(); addQuest = new QToolButton; addQuest->setIcon(QIcon(":/icons/res/icons/addquest.png")); addQuest->setToolTip(tr("Создать файл")); addQuest->iconSize().setHeight(32); addQuest->iconSize().setWidth(32); connect(addQuest, SIGNAL(clicked()), this, SLOT(addQuestion())); addQuest->setEnabled(false); ui->mainToolBar->addWidget(addQuest); delQuest = new QToolButton; delQuest->setIcon(QIcon(":/icons/res/icons/delquest.png")); delQuest->setToolTip(tr("Создать файл")); delQuest->iconSize().setHeight(32); delQuest->iconSize().setWidth(32); connect(delQuest, SIGNAL(clicked()), this, SLOT(delQuestion())); delQuest->setEnabled(false); ui->mainToolBar->addWidget(delQuest); ui->mainToolBar->addSeparator(); saveQuestBtn = new QToolButton; saveQuestBtn->setIcon(QIcon(":/icons/res/icons/savequest.png")); saveQuestBtn->setToolTip(tr("Сохранить текущий вопрос")); saveQuestBtn->iconSize().setHeight(32); saveQuestBtn->iconSize().setWidth(32); connect(saveQuestBtn, SIGNAL(clicked()), this, SLOT(saveItem())); ui->mainToolBar->addWidget(saveQuestBtn); saveQuestBtn->setEnabled(false); addAnswerBtn = new QToolButton; addAnswerBtn->setIcon(QIcon(":/icons/res/icons/add.png")); addAnswerBtn->setToolTip(tr("Добавить ответ к вопросу")); addAnswerBtn->iconSize().setHeight(32); addAnswerBtn->iconSize().setWidth(32); connect(addAnswerBtn, SIGNAL(clicked()), this, SLOT(addAnswer())); addAnswerBtn->setEnabled(false); ui->mainToolBar->addWidget(addAnswerBtn); delAnswerBtn = new QToolButton; delAnswerBtn->setIcon(QIcon(":/icons/res/icons/delanswer.png")); delAnswerBtn->setToolTip(tr("Удалиить ответ")); delAnswerBtn->iconSize().setHeight(32); delAnswerBtn->iconSize().setWidth(32); connect(delAnswerBtn, SIGNAL(clicked()), this, SLOT(delAnswer())); delAnswerBtn->setEnabled(false); ui->mainToolBar->addWidget(delAnswerBtn); addPictBtn = new QToolButton; addPictBtn->setIcon(QIcon(":/icons/res/icons/pict.png")); addPictBtn->setToolTip(tr("Вставить картинку")); addPictBtn->iconSize().setHeight(32); addPictBtn->iconSize().setWidth(32); connect(addPictBtn, SIGNAL(clicked()), this, SLOT(addPict())); addPictBtn->setEnabled(false); ui->mainToolBar->addWidget(addPictBtn); ui->mainToolBar->addSeparator(); } void MainWindow::openFile() { QString fileName; fileName = QFileDialog::getOpenFileName(this, tr("Открыть файл..."), "", tr("Файлы тестов (*.t2p)")); testModel = new CTestModel(fileName); //Перенести в отдельный метод ui->questListView->setModel(testModel); selectionModel = ui->questListView->selectionModel(); connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(showSelectedItem( const QItemSelection &, const QItemSelection &))); connect(this, SIGNAL(answerAdded(int,int)), testModel, SLOT(addEmptyAnswer(int,int))); addQuest->setEnabled(true); delQuest->setEnabled(true); } void MainWindow::saveFile() { saveBtn->setEnabled(false); if (this->saveQuestBtn) this->saveItem(); if (!testModel->writeTestList()) { QMessageBox box(this); box.setWindowTitle( tr("Test2Print") ); box.setText(tr("Ошибка записи в файл")); box.setIcon( QMessageBox::Critical ); box.exec(); }; } void MainWindow::addQuestion() { // if(!testModel->insertRow(testModel->rowCount())) // { // QMessageBox box(this); // box.setWindowTitle( tr("QPass") ); // box.setText( tr("Error adding entry.") ); // box.setIcon( QMessageBox::Critical ); // box.exec(); // } qDebug() << selectionModel; selectionModel->clearSelection(); // selectionModel->setCurrentIndex(testModel->index(testModel->rowCount()-1, 0), QItemSelectionModel::SelectCurrent); } void MainWindow::delQuestion() { qDebug()<<"delQuest()"; } void MainWindow::addAnswer() { CAnswerForm *answerForm = new CAnswerForm; answerList.append(answerForm); testsVbl->insertWidget(answerList.count()-1, answerForm); connect(answerList.last(), SIGNAL(rightAnswerChecked()), this, SLOT(rightAnswerChecked())); connect(answerList.last(), SIGNAL(answerChanged()), this, SLOT(answerChanged())); connect(answerList.last(), SIGNAL(answerClicked(CAnswerForm*)), this, SLOT(answerClicked(CAnswerForm*))); countAddAnswer++; } void MainWindow::delAnswer() { QModelIndex index; index = selectionModel->selectedIndexes().at(0); testModel->removeColumns(answerList.indexOf(this->curAnswerForm)*3+2,3,index); answerList.remove(answerList.indexOf(this->curAnswerForm)); delete this->curAnswerForm; } void MainWindow::showSelectedItem( const QItemSelection & selected, const QItemSelection & deselected ) { QModelIndexList list = selected.indexes(); QModelIndex item; item = list[0]; int row = item.row(); if (list.count() == 1) { //Отображаем текст вопроса ui->questTextEdit->setText((testModel->data(testModel->index(row, 1, item)).toString())); //Создание ответов int tmp=answerList.count(); for (int i=0; icolumnCount(list[0])-2)/3); /* 2 - заголовок вопроса из модели + текст вопроса из файла * 3 - ответ содерижт текст ответа, верный ответ, коммент */ for (int i=0; iinsertWidget(i, answerList.last()); answerList.last()->show(); connect(answerList.last(), SIGNAL(rightAnswerChecked()), this, SLOT(rightAnswerChecked())); connect(answerList.last(), SIGNAL(answerChanged()), this, SLOT(answerChanged())); connect(answerList.last(), SIGNAL(answerClicked(CAnswerForm*)), this, SLOT(answerClicked(CAnswerForm*))); } } //Обновляем все поля с ответами for (int i=0; ireset(); answerList[i]->setAnswer((testModel->data(testModel->index(row, i*3+2,item)).toString())); answerList[i]->setRightAnswer((testModel->data(testModel->index(row, i*3+3,item)).toBool())); } saveQuestBtn->setEnabled(false); saveBtn->setEnabled(false); addAnswerBtn->setEnabled(true); ui->questTextEdit->setEnabled(true); countAddAnswer=0; } void MainWindow::saveItem() { //Создаем индекс на основе выделенного пользователем элемента listView QModelIndex *index = new QModelIndex; *index = selectionModel->selectedIndexes().at(0); //проверка валидности itemа int row; if(index->isValid()) { row = index->row(); if(row >= testModel->rowCount()) return; } else row = selectionModel->selection().indexes()[0].row(); if (this->countAddAnswer > 0) emit this->answerAdded(row, countAddAnswer); //сохраняем все в модель if(testModel->setData(testModel->index(row, 1,*index), ui->questTextEdit->toHtml())) { for (int i=0; isetData(testModel->index(row, i*3+2, *index), answerList.at(i)->getAnswer()); testModel->setData(testModel->index(row, i*3+3, *index), answerList.at(i)->isRightAnswer()); testModel->setData(testModel->index(row, i*3+4, *index), answerList.at(i)->getComment()); } saveQuestBtn->setEnabled(false); } else { QMessageBox box(this); box.setWindowTitle( tr("Test2Print") ); box.setText(tr("Ошибка сохранения")); box.setIcon( QMessageBox::Critical ); box.exec(); } countAddAnswer=0; } void MainWindow::rightAnswerChecked() { saveQuestBtn->setEnabled(true); saveBtn->setEnabled(true); } void MainWindow::answerChanged() { saveQuestBtn->setEnabled(true); saveBtn->setEnabled(true); } void MainWindow::commentChanged() { saveQuestBtn->setEnabled(true); saveBtn->setEnabled(true); } void MainWindow::answerClicked(CAnswerForm *answerForm) { //запоминаем адрес answerForm'а, //textEdit или checkBox которого получил фокус this->curAnswerForm = answerForm; this->delAnswerBtn->setEnabled(true); } void MainWindow::on_questTextEdit_textChanged() { saveQuestBtn->setEnabled(true); saveBtn->setEnabled(true); } MainWindow::~MainWindow() { delete ui; }