1. C++ / Говнокод #6382

    +149

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 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 Апреля 2011

    Комментарии (15) RSS

    • Правильный порядок действий такой: проектирование -- реализация, причём проектирование не абы-как, а вдумчиво и предусмотрительно. И всё у вас будет замечательно =)
      Ответить
      • показать все, что скрытоесли бы все сидели и без конца проектировали, вдумывались и ковыряли все мелкие детали, полировали и анализировали каждую строчку перед релизом - то никто бы никогда никакого софта до конца не дописал и не выпустил. потому что бы задолбались.

        а если уж написал что-то что работает, решает подручную проблему, что работает и помогает другим, то накой в Ж сидеть полировать каждую строчку?

        софт то пишется не для того что бы быть идеальным, а для того что бы решать конкретные проблемы.

        правда заключается в том что весь софт начинает жизнь как ГК. и очень большому количеству одноразового софта, как и его пользователям, статус ГК никоем образом не мешает решать ихние проблемы.
        Ответить
        • оО я не проповедовал полирование каждой строчки, вы о чём? Я про предварительное проектирование загнул только ради того, чтобы написание чего-то хотя бы мало-мальски сложного не превращалось в прикручивание костылей к ушным протезам (как произошло в моём говнокоде).
          Если бы я не поленился и вспомнил про UML (или некое "карандашное" подобие) и набросал пару-тройку диаграмм -- включая д. классов -- всё было бы замечательно.
          Ответить
          • UML - замечательная вещь. Впрочем, лично для меня это не так визуально, предпочитаю описывать интерфейсами и абстрактными классами )
            Ответить
            • Я сначала UML не особо как понимал, а меня однокашники не понимали )
              Абстрактные классы для меня, к сожалению, пока что не так наглядны, как разноцветные картинки. Хотя это уже живое, да... )
              Ответить
    • Среди прочего - у вас лурчанка.
      Ответить
    • луркоёб детектед!
      Ответить
    • Тред полон ракаООП-быдла.
      Ответить
    • Какие смешные комментарии.
      Ответить
    • А в конце надо было дописать:
      "Чмоки всем в этом уютном чяти =*)"
      Ответить
    • Да, кстати, господа. Кто что насчёт Qt думает? Стоит ли оным заинтересоваться для разработки чего-нибудь в будущем? Не нарежет ли оно коней из-за соглашения Нокии с Микрософтом?
      Ответить
      • Да вряд ли что-то случится, я думаю. Qt штука, как ни крути, классная, да и кеды, если я не ошибаюсь, на нём написаны.
        Ответить

    Добавить комментарий