- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
//
// mainwindow.h
//
#ifndef MAINMDIWINDOW_H
#define MAINMDIWINDOW_H
/* >:0 Эти инклюды хуже, чем говно, чуть менее, чем полностью */
#include <QMainWindow>
#include <QMdiArea>
#include <QMenu>
#include <QAction>
#include <QMenuBar>
#include <QWebView>
#include <QFile>
#include <QSignalMapper>
#include <QDebug>
#include <QDomDocument>
#include <QToolBar>
#include <QButtonGroup>
#include <QLabel>
#include <QMdiSubWindow>
#include <QApplication>
#include "demoviewer.h"
#include "theoryviewer.h"
class MainMDIWindow : public QMainWindow
{ Q_OBJECT
public:
/* >:0 Кэп?! */
//! Выполняет создание и инициализацию окна приложения.
explicit MainMDIWindow(QWidget *parent = 0);
signals:
public slots:
/* >:0 А ты догадался, что значат эти аргументы? */
void openDocument(int); void loadPage(int);
/* >:0 Это невероятно полезные функции */
void toggleTheoryWindow(bool state) { tw->setVisible(state); }
void toggleDemoWindow(bool state) { dw->setVisible(state); }
protected:
/* >:0 Это на винде не работало, я просто закомментировал.
Вероятно, правильнее было бы воспользоваться средствами сборки под разные платформы,
но я невозбранно комметирую-раскомментирую эту строчку каждый раз при сборке */
inline void paintEvent(QPaintEvent *e)
{ // mdiArea->setBackground(QBrush(QImage(":/images/photo/s200.jpg").scaled(this->size(), Qt::KeepAspectRatioByExpanding)));
e->accept();
}
// ...
/* >:0 ЭтаПять! См. тело конструктора */
QString AppWindowTitle;
// Просмотровщики материала
DemoViewer * dv; QMdiSubWindow* dw;
TheoryViewer* tv; QMdiSubWindow* tw;
bool lockTheory, lockDemo;
// Хранение информации о документах
/* >:0 За такое я впредь обещаю безжалостно резать яйца. Даже себе. */
QVector< QVector< QHash< QString, QString > > > documents;
QVector< QHash< QString, QString > > *currentDocument;
// ...
};
#endif // MAINMDIWINDOW_H
//
// mainwindow.cpp
// Далее следуют отдельные вырезки
//
#include "mainmdiwindow.h"
MainMDIWindow::MainMDIWindow(QWidget *parent) : QMainWindow(parent)
{ /* >:0 Вот зачем нам понадобился атрибут QString AppWindowTitle! */
AppWindowTitle = tr("ЦВМ «Пламя-КВ» ЗРК С-200ВЭ");
setWindowTitle(AppWindowTitle);
// ...
// Инициализация окон просмотровщиков
/* >:0 Вы меня понимаете, не? хД */
tv = new TheoryViewer(); tw = mdiArea->addSubWindow(tv); tw->hide(); tv->setParent(tw); lockTheory = true;
dv = new DemoViewer(); dw = mdiArea->addSubWindow(dv); dw->hide(); dv->setParent(dw); lockDemo = true;
// ...
}
void MainMDIWindow::openDocument(int id)
{ // ...
/* >:0 Нижеследующая конструкция читает HTML файл в UTF-8,
заменяет пути на абсолютные и запихвает получивуюся какуху в QWebView */
QFile in(textLink); bool t = in.open(QIODevice::ReadOnly | QIODevice::Text);
tv->setHtml(QString::fromUtf8(in.readAll()).replace(QString("./"), QApplication::applicationDirPath() + '/'));
in.close();
// ...
}
ИМХО, это МЕГОКОД. И я обещаю больше так никогда не делать ^^
Вбросы говн в потоковых комментариях, начинающихся с православного смайла >:0
Surendil 17.04.2011 00:40 # +1
Dummy00001 17.04.2011 02:33 # −6
а если уж написал что-то что работает, решает подручную проблему, что работает и помогает другим, то накой в Ж сидеть полировать каждую строчку?
софт то пишется не для того что бы быть идеальным, а для того что бы решать конкретные проблемы.
правда заключается в том что весь софт начинает жизнь как ГК. и очень большому количеству одноразового софта, как и его пользователям, статус ГК никоем образом не мешает решать ихние проблемы.
Surendil 17.04.2011 08:21 # +6
Если бы я не поленился и вспомнил про UML (или некое "карандашное" подобие) и набросал пару-тройку диаграмм -- включая д. классов -- всё было бы замечательно.
Lure Of Chaos 17.04.2011 12:05 # +2
Surendil 17.04.2011 13:30 # 0
Абстрактные классы для меня, к сожалению, пока что не так наглядны, как разноцветные картинки. Хотя это уже живое, да... )
telnet 17.04.2011 09:52 # +10
guest 17.04.2011 10:19 # +10
guest 17.04.2011 12:09 # −1
Lure Of Chaos 17.04.2011 14:38 # +3
TarasB 18.04.2011 09:40 # 0
RaZeR 18.04.2011 19:43 # +5
Govnocoder#0xFF 18.04.2011 21:31 # +2
"Чмоки всем в этом уютном чяти =*)"
Lure Of Chaos 18.04.2011 22:11 # +2
eth0 19.04.2011 21:54 # 0
Surendil 20.04.2011 08:02 # 0