Автор Тема: Qt 4.7.4 C++ Ел.Библиотека и Търсачка  (Прочетена 2173 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« -: 29 Август 2011, 21:24:35 »
Това приложение служи като електронна библиотека т.е. имате 20 или 30 текстови документа и искате да намерите с натискането на един бутон дума или израз във кои документи съществува и на кои места във тях.
нормално е да има и някой бъг но за сега не знам как да се справя с тях. В момент в който променя нещо ще го добавям.


lib.pro

Код: C++ (QT)
  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2011-03-26T18:30:59
  4. #
  5. #-------------------------------------------------
  6.  
  7. QT       += core gui
  8.  
  9. TARGET = Search_Lib
  10. TEMPLATE = app
  11.  
  12. RC_FILE = myapp.rs
  13.  
  14. SOURCES += main.cpp\
  15.         mainwindow.cpp \
  16.     op_wr.cpp
  17.  
  18. HEADERS  += mainwindow.h \
  19.     op_wr.h
  20.  
  21. FORMS    += mainwindow.ui
  22.  
  23. RESOURCES += \
  24.     res.qrc
  25.  
  26. mainwindow.h
  27.  
  28. #ifndef MAINWINDOW_H
  29. #define MAINWINDOW_H
  30.  
  31. #include <QMainWindow>
  32. #include <QMessageBox>
  33. #include <QFontComboBox>
  34. #include <QComboBox>
  35. #include <QLineEdit>
  36. #include <QPushButton>
  37. #include <QDir>
  38. #include <QFile>
  39. #include <QFileDialog>
  40. #include <QFileInfo>
  41. #include <QTextStream>
  42. #include <QString>
  43. #include <QStringList>
  44. #include <QHash>
  45. #include <QProgressBar>
  46. #include <QListWidgetItem>
  47. #include <QTextCodec>
  48.  
  49. namespace Ui {
  50.     class MainWindow;
  51. }
  52.  
  53. class MainWindow : public QMainWindow
  54. {
  55.     Q_OBJECT
  56.  
  57. public:
  58.     explicit MainWindow(QWidget *parent = 0);
  59.     ~MainWindow();
  60.  
  61. private:
  62.     Ui::MainWindow *ui;
  63.  
  64.     QFontComboBox *font;
  65.     QComboBox *cb_size;
  66.     QLineEdit *ln_find;
  67.     QPushButton *find_btn;
  68.     //File Open,Save and SaveAs
  69.     QString fl_saveAs;
  70.     QString fl_save;
  71.     //Library
  72.     int err;
  73.     QDir dir;
  74.     QHash<int,QString> file_path;
  75.     QHash<int,QString> file_name;
  76.     QHash<int,QString> file_ext;
  77.     int file_max;
  78.     bool isFirstTime;
  79.     bool isAcFind;
  80.     QProgressBar *pr_bar;
  81.     QString lib_dir;
  82.  
  83.  
  84. private slots:
  85.     //Options Save
  86.     void on_actionAdd_Library_triggered();
  87.  
  88.     //Library
  89.     void find_Button();
  90.     void on_listWidget_currentRowChanged(int currentRow);
  91.     void getRefresh();
  92.     void getFiles();
  93.     void findInText(int number);
  94.     void readFile(int number);
  95.     void on_actionList_Editor_triggered();
  96.     void on_actionLybrary_triggered();
  97.     void on_actionRefresh_triggered();
  98.     void cb_current_size_Changed();
  99.     void on_actionText_underline_triggered(bool checked);
  100.     void on_actionText_italic_triggered(bool checked);
  101.     void on_actionText_bold_triggered(bool checked);
  102.     void on_actionFormat_right_triggered();
  103.     void on_actionFormat_center_triggered();
  104.     void on_actionFormat_left_triggered();
  105.     void on_actionFormat_all_triggered();
  106.     void on_actionSaveAs_triggered();
  107.     void on_actionSave_triggered();
  108.     void on_actionOpen_triggered();
  109. };
  110.  
  111. #endif // MAINWINDOW_H

mainwindow.cpp
Код: C++ (QT)
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "op_wr.h"
  4.  
  5. MainWindow::MainWindow(QWidget *parent) :
  6.     QMainWindow(parent),
  7.     ui(new Ui::MainWindow)
  8. {
  9.     ui->setupUi(this);
  10.     //ComboBox Font
  11.     font = new QFontComboBox;
  12.     connect(font,SIGNAL(currentFontChanged(QFont)),ui->textEdit,SLOT(setCurrentFont(QFont)));
  13.     ui->FormatBar->addWidget(font);
  14.     //ComboBox Font Size
  15.     cb_size = new QComboBox;
  16.     for(int i = 8; i < 36; i++)
  17.     {
  18.         if(i > 12)
  19.         {
  20.             if(i%2 == 0)
  21.             cb_size->addItem(QString::number(i));
  22.         }
  23.         else
  24.         {
  25.             cb_size->addItem(QString::number(i));
  26.         }
  27.     }
  28.     connect(cb_size,SIGNAL(currentIndexChanged(int)),this,SLOT(cb_current_size_Changed()));
  29.     ui->FormatBar->addWidget(cb_size);
  30.     ln_find = new QLineEdit;
  31.     ui->BooksBar->addWidget(ln_find);
  32.     find_btn = new QPushButton(QIcon(":/books/res/Find.bmp")," Find");
  33.     find_btn->setFont(QFont("Times", 8, QFont::Bold));
  34.     ui->BooksBar->addWidget(find_btn);
  35.  
  36.     isFirstTime = true;
  37.     isAcFind = false;
  38.  
  39.     ui->actionLybrary->setVisible(false);
  40.     ui->progressBar->setVisible(false);
  41.     ui->progressBar_2->setVisible(false);
  42.     ui->progressBar->setValue(0);
  43.     ui->progressBar_2->setValue(0);
  44.     ui->lb_prBar->setVisible(false);
  45.     ui->lb_prBar2->setVisible(false);
  46.     getRefresh();
  47.     connect(find_btn, SIGNAL(pressed()), this, SLOT(find_Button()));
  48. }
  49.  
  50. MainWindow::~MainWindow()
  51. {
  52.     delete ui;
  53. }
  54.  
  55. //File
  56.  
  57. void MainWindow::on_actionOpen_triggered()
  58. {
  59.     if(fl_saveAs.isEmpty())
  60.     fl_saveAs = QDir::currentPath() + "\\Library";
  61.     QString filename = QFileDialog::getOpenFileName(
  62.         this,
  63.         tr("Open Document"),
  64.         fl_saveAs,
  65.         tr("Document files (*.doc *.txt);;All files (*.*)"));
  66.     if( !filename.isNull() )
  67.     {
  68.         QFileInfo fl;
  69.         fl.setFile(filename);
  70.         fl_saveAs = fl.absolutePath();
  71.         fl_save = filename;
  72.         QFile mFile(filename);
  73.         if(!mFile.open(QFile::ReadOnly | QFile::Text))
  74.         {
  75.             QMainWindow::close();
  76.         }
  77.         QTextStream in(&mFile);
  78.         ui->textEdit->setText(in.readAll());
  79.     }
  80.     on_actionList_Editor_triggered();
  81. }
  82.  
  83. void MainWindow::on_actionSave_triggered()
  84. {
  85.     if(fl_save.isEmpty())
  86.     fl_save = QDir::currentPath() + "\\Library";
  87.     QString filename = QFileDialog::getSaveFileName(
  88.         this,
  89.         tr("Save Document"),
  90.         fl_save,
  91.         tr("Documents (*.doc)"));
  92.     if( !filename.isNull() )
  93.     {
  94.         QFile mFile(filename);
  95.         if(!mFile.open(QFile::WriteOnly | QFile::Text))
  96.         {
  97.             QMainWindow::close();
  98.         }
  99.         QTextStream out(&mFile);
  100.         out << ui->textEdit->QTextEdit::toPlainText();
  101.  
  102.         mFile.flush();
  103.         mFile.close();
  104.     }
  105. }
  106.  
  107. void MainWindow::on_actionSaveAs_triggered()
  108. {
  109.     if(fl_saveAs.isEmpty())
  110.     fl_saveAs = QDir::currentPath() + "\\Library";
  111.     QString filename = QFileDialog::getSaveFileName(
  112.         this,
  113.         tr("Save Document"),
  114.         fl_saveAs,
  115.         tr("Documents (*.doc)"));
  116.     if( !filename.isNull() )
  117.     {
  118.         QFile mFile(filename);
  119.         if(!mFile.open(QFile::WriteOnly | QFile::Text))
  120.         {
  121.             QMainWindow::close();
  122.         }
  123.         QTextStream out(&mFile);
  124.         out << ui->textEdit->QTextEdit::toPlainText();
  125.  
  126.         mFile.flush();
  127.         mFile.close();
  128.     }
  129. }
  130.  
  131. //FormatBar
  132.  
  133. void MainWindow::on_actionFormat_all_triggered()
  134. {
  135.     ui->textEdit->setAlignment(Qt::AlignJustify);
  136. }
  137.  
  138. void MainWindow::on_actionFormat_left_triggered()
  139. {
  140.     ui->textEdit->setAlignment(Qt::AlignLeft);
  141. }
  142.  
  143. void MainWindow::on_actionFormat_center_triggered()
  144. {
  145.     ui->textEdit->setAlignment(Qt::AlignCenter);
  146. }
  147.  
  148. void MainWindow::on_actionFormat_right_triggered()
  149. {
  150.     ui->textEdit->setAlignment(Qt::AlignRight);
  151. }
  152.  
  153. void MainWindow::on_actionText_bold_triggered(bool checked)
  154. {
  155.     if(checked == true)
  156.     {
  157.         ui->textEdit->setFontWeight(99);
  158.     }
  159.     else
  160.     {
  161.         ui->textEdit->setFontWeight(0);
  162.     }
  163. }
  164.  
  165. void MainWindow::on_actionText_italic_triggered(bool checked)
  166. {
  167.     if(checked == true)
  168.     {
  169.         ui->textEdit->setFontItalic(true);
  170.     }
  171.     else
  172.     {
  173.         ui->textEdit->setFontItalic(false);
  174.     }
  175. }
  176.  
  177. void MainWindow::on_actionText_underline_triggered(bool checked)
  178. {
  179.     if(checked == true)
  180.     {
  181.         ui->textEdit->setFontUnderline(true);
  182.     }
  183.     else
  184.     {
  185.         ui->textEdit->setFontUnderline(false);
  186.     }
  187. }
  188.  
  189. void MainWindow::cb_current_size_Changed()
  190. {
  191.     int item = cb_size->currentText().toInt();
  192.     ui->textEdit->setFontPointSize(item);
  193. }
  194.  
  195. //Books Bar
  196.  
  197. void MainWindow::on_actionRefresh_triggered()
  198. {
  199.     ln_find->setText("");
  200.     find_Button();
  201. }
  202.  
  203. void MainWindow::on_actionLybrary_triggered()
  204. {
  205.     ui->actionLybrary->setVisible(false);
  206.     ui->actionList_Editor->setVisible(true);
  207.     ui->actionRefresh->setVisible(true);
  208.     ui->listWidget->setVisible(true);
  209.     ui->lb_lib->setVisible(true);
  210.  
  211. }
  212.  
  213. void MainWindow::on_actionList_Editor_triggered()
  214. {  
  215.     ui->actionList_Editor->setVisible(false);
  216.     ui->actionLybrary->setVisible(true);
  217.     ui->actionRefresh->setVisible(false);
  218.     ui->listWidget->setVisible(false);
  219.     ui->lb_lib->setVisible(false);
  220.     ui->progressBar->setVisible(false);
  221.     ui->progressBar_2->setVisible(false);
  222.     ui->lb_prBar->setVisible(false);
  223.     ui->lb_prBar2->setVisible(false);
  224. }
  225.  
  226. //Library
  227.  
  228. void MainWindow::getRefresh()
  229. {
  230.     ui->listWidget->clear();
  231.     ui->textEdit->clear();
  232.     getFiles();
  233.     ui->progressBar->setMaximum(file_max);
  234.     foreach(int n,file_name.keys())
  235.     {
  236.         ui->listWidget->addItem(QString::number(n + 1) + " - " + file_name[n] + "." + file_ext[n]);
  237.         ui->listWidget->item(n)->setBackground(Qt::darkYellow);
  238.     }
  239. }
  240.  
  241. void MainWindow::getFiles()
  242. {
  243.  
  244.     dir = QDir::currentPath() + "//Library";
  245.     int i = 0;
  246.     foreach(QFileInfo fl, dir.entryInfoList())
  247.     {      
  248.         if(fl.isFile() && (fl.suffix() == "txt" || fl.suffix() == "doc" || fl.suffix() == "html"))
  249.         {
  250.             file_path.insert(i, fl.absoluteFilePath());
  251.             file_name.insert(i, fl.baseName());
  252.             file_ext.insert(i, fl.suffix());
  253.             i++;
  254.             file_max = i;
  255.         }
  256.     }
  257. }
  258.  
  259. void MainWindow::readFile(int number)
  260. {
  261.  
  262.     QString filename = file_path[number];
  263.     if( !filename.isNull() )
  264.     {
  265.         QFile file(filename);
  266.         if (!file.open(QFile::ReadOnly))
  267.         QMainWindow::close();
  268.         QString str;
  269.         QByteArray data;
  270.         ui->progressBar_2->setMaximum(file.size()/1024);
  271.         while (!file.atEnd())
  272.         {
  273.             data += file.readLine();
  274.             ui->progressBar_2->setValue(file.pos()/1024);
  275.         }
  276.         QTextCodec *codec = Qt::codecForHtml(data);
  277.         str = codec->toUnicode(data);
  278.         if (Qt::mightBeRichText(str))
  279.         {
  280.             ui->textEdit->setHtml(str);
  281.         }
  282.         else
  283.         {
  284.             str = QString::fromLocal8Bit(data);
  285.             ui->textEdit->setPlainText(str);
  286.         }      
  287.     }
  288. }
  289.  
  290. void MainWindow::findInText(int number)
  291. {
  292.     QString searchString = ln_find->text();
  293.     QTextDocument *document = ui->textEdit->document();
  294.     bool found = false;
  295.  
  296.     if (isFirstTime == false)
  297.         document->undo();
  298.     if(document->isEmpty())
  299.     {
  300.         ui->listWidget->item(number)->setBackgroundColor(Qt::yellow);
  301.     }
  302.     else
  303.     {
  304.         ui->listWidget->item(number)->setBackgroundColor(Qt::darkYellow);
  305.     }
  306.  
  307.     if (searchString.isEmpty())
  308.     {
  309.  
  310.     }
  311.     else
  312.     {
  313.         QTextCursor highlightCursor(document);
  314.         QTextCursor cursor(document);
  315.         cursor.beginEditBlock();
  316.         QTextCharFormat plainFormat(highlightCursor.charFormat());
  317.         QTextCharFormat colorFormat = plainFormat;
  318.         colorFormat.setForeground(Qt::red);
  319.  
  320.         while (!highlightCursor.isNull() && !highlightCursor.atEnd())
  321.         {
  322.             highlightCursor = document->find(searchString, highlightCursor, QTextDocument::FindWholeWords);
  323.             if(!highlightCursor.isNull())
  324.             {
  325.                 found = true;
  326.                 highlightCursor.movePosition(QTextCursor::WordRight,QTextCursor::KeepAnchor);
  327.                 highlightCursor.mergeCharFormat(colorFormat);
  328.             }
  329.         }
  330.         cursor.endEditBlock();
  331.         isFirstTime = false;
  332.  
  333.         if (found == false)
  334.         {
  335.             ui->listWidget->item(number)->setBackgroundColor(Qt::red);
  336.         }
  337.         else
  338.         {
  339.             ui->listWidget->item(number)->setBackgroundColor(Qt::green);
  340.         }
  341.         if(document->isEmpty())
  342.         {
  343.             ui->listWidget->item(number)->setBackgroundColor(Qt::yellow);
  344.         }
  345.     }
  346. }
  347.  
  348. void MainWindow::on_listWidget_currentRowChanged(int currentRow)
  349. {
  350.     if(isAcFind == true)
  351.     {
  352.         readFile(currentRow);
  353.         findInText(currentRow);
  354.         ui->progressBar->setValue(currentRow + 1);
  355.     }
  356. }
  357.  
  358. void MainWindow::find_Button()
  359. {
  360.     if(ui->listWidget->isVisible())
  361.     {      
  362.         isAcFind = true;
  363.         ui->progressBar->setVisible(true);
  364.         ui->progressBar_2->setVisible(true);
  365.         ui->lb_prBar->setVisible(true);
  366.         ui->lb_prBar2->setVisible(true);
  367.         for(int i = 0; i < file_max; i++)
  368.         {
  369.             on_listWidget_currentRowChanged(i);
  370.         }
  371.         ui->progressBar->setVisible(false);
  372.         ui->progressBar_2->setVisible(false);
  373.         ui->lb_prBar->setVisible(false);
  374.         ui->lb_prBar2->setVisible(false);
  375.     }
  376.     else
  377.     {
  378.         isAcFind = false;
  379.         findInText(0);
  380.     }
  381. }
  382.  
  383.  
  384.  
  385. void MainWindow::on_actionAdd_Library_triggered()
  386. {
  387.     Op_WR op;
  388.     op.op_Read();
  389.     op.op_list_text[0] = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
  390.                                                      QDir::currentPath() + "\\Library\\",
  391.                                                      QFileDialog::ShowDirsOnly
  392.                                                      | QFileDialog::DontResolveSymlinks);
  393.     op.op_Write();
  394. }
  395.  


op_wr.h
Код: C++ (QT)
  1. #ifndef OP_WR_H
  2. #define OP_WR_H
  3.  
  4. #include <QStringList>
  5.  
  6. class Op_WR
  7. {
  8. public:
  9.     Op_WR();
  10.     QStringList op_list_text;
  11.     int err;
  12.     void op_Read();
  13.     void op_Write();
  14. };
  15.  
  16. #endif // OP_WR_H


op_wr.cpp
Код: C++ (QT)
  1. #include "op_wr.h"
  2. #include <QDir>
  3. #include <QFile>
  4. #include <QString>
  5. #include <QTextStream>
  6.  
  7. Op_WR::Op_WR()
  8. {
  9. }
  10. //Options
  11. void Op_WR::op_Read()
  12. {
  13.     QString filename = QDir::currentPath().append("/op/op.dat");
  14.     if( !filename.isNull() )
  15.     {
  16.         QFile mFile(filename);
  17.         if(!mFile.open(QFile::ReadOnly | QFile::Text))
  18.         {
  19.             err = 2;
  20.             return;
  21.         }
  22.         QTextStream in(&mFile);
  23.         op_list_text = in.readAll().split("\n");
  24.     }
  25. }
  26.  
  27. void Op_WR::op_Write()
  28. {
  29.     QString filename = QDir::currentPath().append("/op/op.dat");
  30.     if( !filename.isNull() )
  31.     {
  32.         QFile mFile(filename);
  33.         if(!mFile.open(QFile::WriteOnly | QFile::Text))
  34.         {
  35.             err = 2;
  36.             return;
  37.         }
  38.         QTextStream out(&mFile);
  39.         QString op_text = op_list_text.join("\n");
  40.         out << op_text;
  41.         mFile.flush();
  42.         mFile.close();
  43.     }
  44. }


main.cpp
Код: C++ (QT)
  1. #include <QtGui/QApplication>
  2. #include "mainwindow.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication a(argc, argv);
  7.     MainWindow w;
  8.     w.show();
  9.  
  10.     return a.exec();
  11. }
  12.  
mainwindow.ui // Прикачен фаил с изображение
не забравяйте да създадете папка library и op.dat файл
« Последна редакция: 12 Май 2015, 21:59:25 от Avalanche »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« Отговор #1 -: 29 Август 2011, 21:31:55 »
Коментарите ти са адски оскдни - препоръчвам поне долу да дадеш малко повече инфо за това кое какво е щото от заглавието нищо не се разбира - и за другите е така! Гуугъл пък изобщо няма да разбере за какво става въпрос!
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Re: Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« Отговор #2 -: 29 Август 2011, 21:41:50 »
Не съм правил коментари нямах намерение да го слагам. Понеже направихте нещо добро за сайта затова го поставих. Ако не се разбира кода да обясня всичко, или отгоре отгоре?  Но ако искате подробно няма да е днес а вероятно утре. 
« Последна редакция: 29 Август 2011, 21:43:21 от haccac »

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re: Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« Отговор #3 -: 29 Август 2011, 21:43:55 »
Е то не е проблем, ако някой нещо не е разбрал да попита. А аз съм във възторг, че пишеш точно за Кът. За съжаление на български няма почти нищо, даже при Нокия.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« Отговор #4 -: 29 Август 2011, 21:44:29 »
Не бе не какво е като част кода а за какво служи и какво  предлага! Просто ианче не е нужно на никой ако не знае за какво е кода поне!
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Re: Qt 4.7.4 C++ Ел.Библиотека и Търсачка
« Отговор #5 -: 29 Август 2011, 22:11:45 »
Ок от сега ще конкретизирам.