Добавил:
serega_ovc
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab4 / mainwindow
.cpp#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "HelpBrowser.h"
#include "string.h"
#include <sstream>
#include <QMessageBox>
#include <QWidget>
#include <QtWidgets>
#include<QString>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionInfo_triggered()
{
HelpBrowser *helpBrowser = new HelpBrowser(":/", "index.htm");
helpBrowser->resize(600, 600);
helpBrowser->show();
}
void MainWindow::on_actionAuthor_triggered(){
HelpAuthor *helpAuthor = new HelpAuthor(":/", "author.htm");
helpAuthor->resize(600, 600);
helpAuthor->show();
}
node* make_leaf(char* date){
node* leaf = new node;
leaf->date = strdup(date);
leaf->left =NULL;
leaf->right = NULL;
return leaf;
}
void read(node **tree, istringstream &in_stream){
if(in_stream.peek()=='\0'){
(*tree) = NULL;
return ;
}
while(in_stream.peek() == ' ')
in_stream.get();
char c = in_stream.peek();
if(c == '('){
in_stream.get();
int i =0;
char str[50] ="";
while(in_stream.peek() != ' ' && in_stream.peek() != ')' && in_stream.peek() != '(' && in_stream.peek() !='\n'){
in_stream.get(str[i]);
str[++i]='\0';
}
if(strlen(str) == 0){
(*tree) = NULL;
in_stream.get();
}else{
(*tree) = make_leaf(str);
read(&(*tree)->left,in_stream);
c = in_stream.peek();
if( c == ')'){
in_stream.get();
return;
}
read(&(*tree)->right,in_stream);
c = in_stream.peek();
if( c == ')'){
in_stream.get();
return;
}
}
}else if (c == '#') {
(*tree) = NULL;
in_stream.get();
}
}
int number_N_level(node* tree,int N){
int sum = 0;
N--;
if(N == 0) return 1;
if(tree->left != NULL) sum+=number_N_level(tree->left,N);
if(tree->right!= NULL) sum+=number_N_level(tree->right,N);
return sum;
}
void MainWindow::write_tree(node* tree,int n){
QString qstr;
for(int i =0;i<n;i++){
qstr+=" ";
}
string str(tree->date);
qstr+=QString::fromStdString(str);
qstr+="\n";
ui->tree_show->insertPlainText(qstr);
if(tree->left != NULL) write_tree(tree->left,n+1);
if(tree->right!= NULL) write_tree(tree->right,n+1);
}
void MainWindow::on_pushButton_clicked()
{
QString input_str;
string str = ui->input_text->toPlainText().toLocal8Bit().data();
istringstream input_string(str);
node* tree = NULL;
read(&tree,input_string);
ui->output_text->setText( QString::number(number_N_level(tree,ui->tree_number->value())));
ui->tree_show->clear();
write_tree(tree,0);
}
void MainWindow::on_actionFile_triggered()
{
QString patch_to_file = QFileDialog::getOpenFileName(this,"Open file", QDir::currentPath(),
"File with date (*.txt);;All files (*.*)");
if(patch_to_file.isEmpty()) return;
QFile file(patch_to_file);
QByteArray data;
if(!file.open(QIODevice::ReadOnly)) return;
data = file.readLine();
ui->input_text->setText(data);
}
Соседние файлы в папке lab4