среда, 29 февраля 2012 г.

engmod-2.0.0

Написал программу для формирования поля распределения режимов работы двигателя в составе транспортного средства. Программа имеет интерфейс командной строки, принимает в качестве параметра файл с данными (формата csv со знаками табуляции в качестве разделителей) и создает в процессе работы текстовый файл с полем распределения.

UPD
Пример данных для обработки и результатов расчета - https://sites.google.com/site/pa2311/engmod.

воскресенье, 26 февраля 2012 г.

Релиз r49-12.02

  • libtoxic v6.3.0
  • cr49 v1.0.2
  • Qr49 v3.2.0
Изменения:
  1. Увеличен размер шрифта в окне отчетов, размер при выводе на печать и генерации PDF оставлен прежним;
  2. Автоматическое создание файла конфигурации с параметрами по умолчанию в случае его отсутствия (ищется в каталоге программы и каталоге пользователя);
  3. Исправления во встроенной справке cr49;
  4. Улучшение структуры дерева исходных кодов проекта и упрощение сборки (см. файл README).
Исходный код, а также сборка для ОС на базе GNU/Linux (64 бит) доступна на github.com. Сборка для ОС MS Windows (32 бит) будет доступна позже.

UPD 27.02.2012
На github.com добавлена сборка для ОС MS Windows (32 бит).

вторник, 21 февраля 2012 г.

Релиз biblref-1.0.0

По просьбе товарищей и коллег, написал программу для создания библиографических ссылок. Это первый релиз. Программа уже умеет создавать ссылки для следующих источников:
  • книга;
  • статья;
  • диссертация;
  • автореферат;
  • депонированная рукопись;
  • тезис доклада;
  • патент;
  • авторское свидетельство.
Жду отзывов и, возможно, замечаний )

Исходный код и сборки - традиционно на github.com. Сборка для виндовс будет добавлена завтра.

UPD 22.02.2012
На github.com добавлена сборка для виндовс.

пятница, 17 февраля 2012 г.

Qt. Функционал Undo/Redo для QTableWidget

Решил поделиться своей реализацией функционала Отмена/Повтор для приложения, использующего несколько QTableWidget-ов.
undoredotable.h
#ifndef UNDOREDOTABLE_H
#define UNDOREDOTABLE_H

#include <QVector>
#include <QString>
#include <QTableWidget>

class UndoRedoTable {

public:

    UndoRedoTable(QTableWidget *);
    virtual ~UndoRedoTable();

    void saveState();
    void undoTable();
    void redoTable();
    ptrdiff_t undoTableNumber() const;
    ptrdiff_t redoTableNumber() const;
    void freeMemory();

private:

    QTableWidget *table;
    QVector< QVector< QVector<QString> > > data;
    ptrdiff_t position;

};

#endif /* UNDOREDOTABLE_H */
undoredotable.cpp
#include "undoredotable.h"
#include "tablewidgetfunctions.h"

#include <QVector>
#include <QString>
#include <QTableWidget>

UndoRedoTable::UndoRedoTable(QTableWidget *tbl) :
    position(-1) {

    table = tbl;
}

UndoRedoTable::~UndoRedoTable() {
}

void UndoRedoTable::saveState() {

    if ( (data.count() - position) > 1 ) {

        for ( ptrdiff_t i=(data.count()-1); i>position; i-- ) {

            data.remove(i);
        }
    }

    QVector<QString> row;
    QVector< QVector<QString> > matrix;

    for ( ptrdiff_t i=0; i<table->rowCount(); i++ ) {

        for ( ptrdiff_t j=0; j<table->columnCount(); j++ ) {

            row.push_back(table->item(i, j)->text());
        }

        matrix.push_back(row);
        row.clear();
    }

    data.push_back(matrix);
    matrix.clear();

    position++;
}

void UndoRedoTable::undoTable() {

    position--;

    if ( table->rowCount() < data[position].count() ) {

        addRows(table, data[position].count());
    }
    else if ( table->rowCount() > data[position].count() ) {

        table->setRowCount(data[position].count());
    }

    for ( ptrdiff_t i=0; i<data[position].count(); i++ ) {

        for ( ptrdiff_t j=0; j<data[position][i].count(); j++ ) {

            table->item(i, j)->setText(data[position][i][j]);
        }
    }
}

void UndoRedoTable::redoTable() {

    position++;
    position++;

    undoTable();
}

ptrdiff_t UndoRedoTable::undoTableNumber() const {

    return position;
}

ptrdiff_t UndoRedoTable::redoTableNumber() const {

    return data.count() - position - 1;
}

void UndoRedoTable::freeMemory() {

    data.clear();
}

четверг, 16 февраля 2012 г.

std::vector. Освобождение памяти

Собственно решение.
vector<double> v;

// какая-то работа с вектором

// освобождение памяти, занимаемой вектором
v.clear();
vector<double>().swap(v);