Модераторы: Snowy, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа для создания кроссвордов, Обсуждение исходника 
:(
    Опции темы
xwicked
  Дата 8.2.2012, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 9.4.2010
Где: Старый Оскол

Репутация: нет
Всего: 1



Здравствуйте! Как я избавился от переполнения стека:
Код
ushort usTable[50][50];//Массив сетки кроссворда
Если делал больше 50-ти, то отваливался импорт файла и запуск руководства пользователя smile
Изменил на:
Код
ushort **usTable;//Массив сетки кроссворда
...
//Создание двумерного динамического массива
        usTable = new ushort*[TableKlestCrossword->rowCount()];

        for(int i = 0; i < TableKlestCrossword->rowCount(); i++)
            usTable[i] = new ushort[TableKlestCrossword->columnCount()];
Далее введены константы:
Код
//Определение путей констант, в соответствии с системой
#if defined(Q_WS_WIN)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"


#elif defined(Q_WS_X11)

    #define PATH_TMP_SET "/tmp/klest-crossword-0.3.7/settings.xwsc"
    #define PATH_SHARE_DOC "/usr/share/doc/klest-crossword-0.3.7"
    #define PATH_SHARE_APP "/usr/share/klest-crossword-0.3.7"
    #define PATH_TMP_STAT "/tmp/klest-crossword-0.3.7/cstat.html"

#elif defined(Q_WS_MAC)

    #define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
    #define PATH_SHARE_DOC QApplication::applicationDirPath()
    #define PATH_SHARE_APP QApplication::applicationDirPath()
    #define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"


#endif

//Пути для разработки и отладки программы
/*#define PATH_TMP_SET QApplication::applicationDirPath() + "/settings.xwsc"
#define PATH_SHARE_DOC QApplication::applicationDirPath()
#define PATH_SHARE_APP QApplication::applicationDirPath()
#define PATH_TMP_STAT QApplication::applicationDirPath() + "/cstat.html"*/

#define MODE_VIEW true
#define MODE_EDIT false

#define ACROSS_ENABLE true
#define ACROSS_DISABLE false

#define LANGUAGE_RUSSIAN true
#define LANGUAGE_ENGLISH false

#define TOOLBAR_SHOW true
#define TOOLBAR_HIDE false

#define EXPORT_YES true
#define EXPORT_NO false

#define TYPE_PDF 0
#define TYPE_POST_SCRIPT 1
Что позволило пути в программе менять всего один раз smile Так же появилась возможность убрать лишние условия и оформить в switch:
Код
        switch(iTypeExport)
        {
        case TYPE_PDF:
            sFilter = ".pdf";
            break;

        case TYPE_POST_SCRIPT:
            sFilter = ".ps";
            break;

        case TYPE_HTML:
            sFilter = ".html";
            break;

        case TYPE_TXT:
            sFilter = ".txt";
            break;

        case TYPE_JPG:
            sFilter = ".jpg";
            break;

        case TYPE_JPEG:
            sFilter = ".jpeg";
            break;

        case TYPE_BMP:
            sFilter = ".bmp";
            break;

        case TYPE_TIFF:
            sFilter = ".tiff";
            break;

        case TYPE_PNG:
            sFilter = ".png";
            break;

        case TYPE_XPM:
            sFilter = ".xpm";
            break;

        case TYPE_XBM:
            sFilter = ".xbm";
            break;

        case TYPE_PPM:
            sFilter = ".ppm";
            break;

        case TYPE_OPEN_KLEST:
            sFilter = ".ok";
            break;
        }
Введение структуры файла свойств:
Код
//Структура файла свойств программы
struct TFileOptions
{
     bool bModeWork,//Режим работы программы
          bLanguageProgram,//Язык программы
          bStateStandardToolbar,//Состояние показа стандартной панели
          bStateExport,//Состояние экспортирования
          bCurrentDictionary;//Текущий словарь
     QString sModePassword,//Пароль режима
             sPathCrossword,//Путь для кроссвордов
             sPathExport,//Путь для экспорта
             sPathTemplate;//Путь для шаблонов
     int iNumberTimes,//Количество раз
         iTypeExport;//Тип экспорта
};
Скачать 0.3.7. На данный момент это последняя версия, прошу...
PM MAIL WWW ICQ   Вверх
xwicked
  Дата 11.6.2012, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 9.4.2010
Где: Старый Оскол

Репутация: нет
Всего: 1



Оптимизация констант: 
Код
enum eTypeCrossword {TYPE_PDF, TYPE_POST_SCRIPT, TYPE_RTF, TYPE_HTML, TYPE_TXT, TYPE_JPG, TYPE_JPEG, TYPE_BMP,
                    TYPE_TIFF, TYPE_PNG, TYPE_XPM, TYPE_XBM, TYPE_PPM, TYPE_OPEN_KLEST};
Экспорт в RTF вместе с изображением:
Код
QString TCrosswordGrid::wordToUnicode(QString sWord)
{
    QString sTemp;

    for (int i = 0; i < sWord.length(); i++)
//Добавляет один символ Unicode, если этого не получается сделать, то отображается знак вопроса
        sTemp.append("\\u" + QString::number(sWord.at(i).unicode()) + "?");

    return sTemp;
}

//Формирование RTF-документа и сохранение
void TCrosswordGrid::saveToRTF(QString sExportName, QString strRTF, QImage imgExport)
{
    QByteArray baImage;
    QBuffer buffer(&baImage);
    buffer.open(QIODevice::WriteOnly);
    imgExport.save(&buffer, "BMP");//BMP как обязательный формат изображения
    baImage = baImage.toHex();//Побайтовое преобразование изображения в шестнадцатеричную форму
    QFile ifile(sExportName);
    QTextStream istream(&ifile);
    istream.setCodec("UTF-8");//UTF-8 кодировка документа
    ifile.open(QIODevice::WriteOnly);
//Добавление информации об изображении с сохранением изначального размера
    istream << "{\\rtf1\n{\\pict\\wmetafile8\\picw" + QString::number(columnCount() * rowHeight(0) * 27) + "\\pich"
            + QString::number(rowCount() * rowHeight(0) * 27) + "\n";
    
    int j = 0;

    for (int i = 0; i < baImage.size(); i++)
    {
        if (j == 128)//Если количество символов в строке == 128
        {
            istream << "\n";//То перевод строки; Избавляет от ошибок, при чтении документа.
            j = 0;
        }

        istream << baImage.at(i);
        j++;
    }
    istream << "}\\par\\par\n";
    istream << strRTF;
    istream << "}";
    ifile.close();
}

//Формирование RTF-текста вопросов и ответов
QString TCrosswordGrid::makeRTFText(QString ListWordH, QString ListWordV, QStringList ListOutV, QStringList ListOutH)
{
    QString strRTF;
    QString strText1;
    QString strText2;
    QString strText3;

    for(int i = 0; i < ListOutH.count(); i++)
    {
        strText1.append(wordToUnicode(ListOutH.at(i)) + "\\par\n");
    }

    strText2.clear();

    for(int i = 0; i < ListOutV.count(); i++)
    {
        strText2.append(wordToUnicode(ListOutV.at(i)) + "\\par\n");
    }

    strText3.clear();
    strText3 = "{\\b " + wordToUnicode(tr("Horizontal")) + "}:\\par\n" + wordToUnicode(ListWordH) + "\\par\n" + "{\\b " + wordToUnicode(tr("Vertical"))
               +"}:\\par\n" + wordToUnicode(ListWordV) + "\\par\n";

    strRTF.append("{\\b " + wordToUnicode(tr("Horizontal")) + "}:\\par\n"
                   + strText1 + "\\par\n"
                   "{\\b " + wordToUnicode(tr("Vertical")) + "}:\\par\n"
                   + strText2 + "\\par\n"
                   "{\\b\\i " + wordToUnicode(tr("Answers")) + "}:\\par\n"
                   + strText3 + "\\par\n");
    return strRTF;
}

Использовался материал ВикипедииСкачать 1.0.0.
Цитата
Список изменений:
- Повышена безопасность работы игры;
- Добавлен экспорт кроссворда в RTF;
- Исправлена нумерация вопросов кроссворда при печати и экспорте;
- Оптимизирована скорость отображения статистики;
- Изменён цветовой стиль сетки кроссворда, уменьшен контраст цветов;

PM MAIL WWW ICQ   Вверх
xwicked
  Дата 6.5.2013, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 9.4.2010
Где: Старый Оскол

Репутация: нет
Всего: 1



Все изменения:
Цитата
- Добавлена возможность создать словарь из текстового файла со 
словами;
- Добавлена возможность выбора путей к файлу свойств, файлу статистики, файлу словаря;
- Исправлена фатальная ошибка при вводе слов в сетку, без координат слов;    
- Добавлена поддержка файла кроссворда формата OpenKlest 1.1;
- Добавлено сохранение положений панелей инструментов при выходе из программы;  
- Добавлены новые классы: TCell, TGrid и tfileoptions;
- Добавлена возможность удалённого расположения файла свойств;
- В свойства игры добавлены кнопки "Сбросить" и "Восстановить умолчания";
- Изменены ссылки баг-трекера и git;
- Добавлена возможность разворачивания на весь экран окон статистики и руководства пользователя;
- Название программы и номер версии вынесены в отдельный заголовочный файл;

Новая версия 1.2.3
Мной было принято решение о прекращении сборок в linux-пакеты в пользу простоты установки, оформив всё в виде мастера-установщика как в ОС Оффтопик. В связи с замедлением процесса разработки прошу давать советы на крайне необходимые функции и указания на исправление критических ошибок.

Благодарю!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

Внимание:
В этом форуме обсуждаются вопросы только по совместным проектам, когда Вы хотите найти партнёров или стать участником проекта.
Запрещается размещение заказов на написание программ, поиск работников (для этого есть раздел "Работа") и реклама своих сетевых ресурсов.

Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя!

Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!

  • Человек, создающий тему, становится руководителем проекта. Все вопросы о разработке решаются с его согласия.
  • Публикация предложения к сотрудничеству считается защищённым авторскими правами и не может разрабатываться без согласия с руководителем проекта.
  • Конечный продукт должен содержать указание на всех участников и Vingrad.

  • Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon

     
    0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема »


     




    [ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.