• Почему возникает ошибка "Нет такого слота"?

    @Mercury13
    Программист на «си с крестами» и не только
    Иногда Qt Creator проглючивает и требуется полная перекомпиляция проекта.
    Почему-то не запустился MOC.
    Ответ написан
  • Картинка из картинок.Как сделать??

    @Mercury13
    Программист на «си с крестами» и не только
    Простейший вариант…
    1. Для каждой малой картинки выбрать «средний» цвет.
    2. Уменьшить исходное изображение до M×N px, и в каждый пиксель вместо сплошного цвета подставить ту картинку, которая больше всего подходит по цвету.

    Алгоритм можно совершенствовать — например, подставлять одну из 10 наиболее подходящих, а если в радиусе, скажем, 30 единиц есть куда больше 10 картинок — брать их все. А можно ещё использовать метод коррекции ошибок Флойда-Стейнберга (наиболее удачный метод при переводе картинок в N цветов)
    Ответ написан
    3 комментария
  • Как доказать выводимость формул в исчислении высказываний?

    @Mercury13
    Программист на «си с крестами» и не только
    Любая тождественно истинная формула выводима. Любая выводимая формула тождественно истинна.
    Первый курс университета.
    Так что — либо вывести из десятка аксиом, либо доказать тождественную истинность.
    Ответ написан
  • Зачем нужны матрицы в Direct3D?

    @Mercury13
    Программист на «си с крестами» и не только
    Начнём с того, что вектор имеет три координаты: x, y и z. Все повороты системы координат (x, y, z) → (x', y', z'), масштабирования и их комбинации можно записать в виде

    x' = a11·x + a12·y + a13·z
    y' = a21·x + a22·y + a23·z
    z' = a31·x + a32·y + a33·z

    А теперь прочитайте, что такое «умножить матрицу на вектор». Узнаёте? — матрицу {aij} размером 3×3 умножаем на вектор-столбец (x, y, z)T и получаем вектор-столбец (x', y', z')T. Здесь буква T — это операция «транспонировать матрицу», заменить строки столбцами, а столбцы — строками.

    А теперь сделаем финт ушами. Возьмём 4-векторы (r, s, t, d) и обозначим x=r/d, y = s/d, z = t/d (так называемые однородные координаты). Преобразование в однородные координаты неоднозначно: декартовы координаты (1, 2, 3) можно обозначить как четвёркой (1, 2, 3, 1), так и четвёркой (10, 20, 30, 10). Для чего нам однородные? Матрицы 4×4, работающие над однородными координатами, позволяют записать и такие преобразования, как «сдвинуть» или «центральная проекция». Например, «сдвинуть» записывается как

    r' = 1·r + shiftx·d
    s' = 1·s + shifty·d
    t' = 1·t + shiftz·d
    d' = d

    или, в терминах матриц
    [r']   ( 1 0 0 shiftx )   [r]
    [s'] = ( 0 1 0 shifty ) · [s]
    [t']   ( 0 0 1 shiftz )   [t]
    [d']   ( 0 0 0 1      )   [d]

    (тут я не поленился собрать тэгом code нечто похожее на вектор-столбец, так что знак транспонирования не нужен :)
    Ответ написан
    Комментировать
  • Как сложить Excel ячейки по месяцам?

    @Mercury13
    Программист на «си с крестами» и не только
    Сейчас к Excel’ю доступа нет — копайте в сторону функции СУММЕСЛИ.
    Ответ написан
  • Для чего нужна рантайм-библиотека?

    @Mercury13
    Программист на «си с крестами» и не только
    В рантайм-библиотеке хранятся стандартные функции языка программирования. И malloc/new тоже.

    P.S. Также хранятся внутренние функции для обслуживания точки входа (int main).
    Ответ написан
  • Как правильно уменьшать размер (габариты) png?

    @Mercury13
    Программист на «си с крестами» и не только
    Мой совет работает для всех форматов, и растровых, и векторных. При рендеринге вектора или уменьшении растра использовать правильную гамму монитора (2,2 для Windows, сейчас на неё, насколько мне известно, перешёл и Мак).

    Вот у нас два цвета: (0,5, 0,5, 0,5) и (1, 1, 1). Во сколько раз второй ярче первого? Вдвое? Нет, в 2^2,2 раза. Потому сильно размытая (размытая с гаммой 1) линия выходит тоньше не столь размытой.
    Ответ написан
  • QModelDelegate: почему в таблице и делегате разная точность и локаль?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Переопределяем QStyledItemDelegate. У него есть функция displayText, превращающая значение в текст. Можно её переопределить (то, что изначально, мне не слишком нравится, несколько миллионов уже 5,67e+6), но не в этом дело.

    QWidget* LineEditDelegate::createEditor(
            QWidget* parent,
            const QStyleOptionViewItem& option,
            const QModelIndex&) const
    {
        QLineEdit* edit = new QLineEdit(parent);
        edit->setLocale(option.locale);   // важно! — локаль потом потребуется
        return edit;
    }
    
    void LineEditDelegate::setEditorData(
            QWidget* editor,
            const QModelIndex & index) const
    {
        QLineEdit* currEdit = dynamic_cast(editor);
        QVariant var = index.model()->data(index);
        QString text = displayText(var, editor->locale());
        currEdit->setText(text);
    }
    Ответ написан
    Комментировать
  • Qt: как сделать, чтобы редактор в таблице вёл себя по-другому при нажатии Tab?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    QModelIndex EditableTable::moveCursor(
            CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
    {
        switch (cursorAction) {
        case QAbstractItemView::MoveNext:
        case QAbstractItemView::MovePrevious:
            return QModelIndex();
            break;
        default:
            return Super::moveCursor(cursorAction, modifiers);
        }
    }


    Чтобы протолкнуть такую функциональность в Qt Creator, использовать функцию «Promote To…»
    Ответ написан
    Комментировать
  • QTableView: можно ли обменять местами чередующиеся строки без делегатов?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Кажется, это невозможно. Но оказалось, что этим занимается не делегат, а модель данных. Расходы на неё я счёл приемлемыми, так что — нельзя.
    Ответ написан
    Комментировать
  • Как заставить компоненты на форме в Qt Designer обрабатывать клавиши?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Задачу я не решил, но на вопрос ответил.
    doc.qt.io/qt-4.8/eventsandfilters.html#event-filters
    Ответ написан
    Комментировать
  • Почему не советуют использовать технологии Borland?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Очень долгое время был устаревший компилятор C++. Насколько мне известно, в XE10, совсем недавно, решилось (не проверял). Слоупоки!
    2. А почему? Где-то с 2001 года Borland натурально начхал на Delphi. Delphi 7 долгое время был самым лучшим — пока не появился 2010. Новые владельцы восстанавливают упущенное, но не всё идёт как надо (XE4 реально глючнее XE2, буду ещё думать, что лучше держать под Win10, чтобы работало с тамошней средой .NET).
    3. Кажется, они поставили не на тот кроссплатформенный фреймворк. FireMonkey — имитация стандартных элементов управления. Медленно и глючно. А если ради чего-то решил выключить ClearType — вообще атас!
    4. Бесплатный WinForms отобрал немалую аудиторию у тех, кому надо быстренько написать программу только под Windows. Но это скорее аналог VCL, чем FireMonkey.
    5. Embarcadero — фактически единственные, кто поддерживает хороший Паскаль.
    Ответ написан
    Комментировать
  • Decorator реализующий интерфейс, а не конкретный класс, возможно ли?

    @Mercury13
    Программист на «си с крестами» и не только
    Так, проблему понял (извините, больной слегка, соображаю плохо).

    Перед нами явно ломаная абстракция: нам надо глубоко внедряться в объект. Тут одно из двух.
    1) Бить объект на два, Repository с create() и update(), и DataStorage с save(). Тогда прослойкой между этими объектами можно пристроить валидатор.
    2) Налаживать точку для подключения внешнего валидатора в save().

    P.S. Декоратор и должен реализовать интерфейс, однако набор возможностей, которые он может делать с этим интерфейсом, невелик.
    Ответ написан
    5 комментариев
  • Вызвать дочернюю форму в Delphi?

    @Mercury13
    Программист на «си с крестами» и не только
    Как ни странно, создать форму один раз. А затем…
    Показать — Show.
    Спрятать — Hide.
    Сделать модальный запрос (остальные формы временно неуправляемы, из функции не выходим, пока окно не закроется) — ShowModal.
    Ответ написан
  • Общие шрифты для всех систем?

    @Mercury13
    Программист на «си с крестами» и не только
    Таковых в принципе нет. На открытой системе открытые шрифты, на проприетарной — свои проприетарные. К тому же есть устаревшие версии ОС, на которых набор шрифтов ýже.

    У меня на рабочей 10-ке Source Sans Pro нашёлся. Систему ставил не я, шрифт явно гугловский, и есть подозрение, что его поставили вместе с Хромом. На домашней 7-ке, которая никогда с Хромом не контактировала, скорее всего, не будет.

    А на Андроиде список шрифтов ещё и зависит от браузера. На 8,9" FullHD единственный браузер, на котором хоть что-то видно,— это Лисичка, и там шрифт немного другой.
    Ответ написан
  • Существует ли какой-нибудь алгоритм склонения существительных во множественном числе?

    @Mercury13
    Программист на «си с крестами» и не только
    Для 98% существительных — есть, и для этого копай шаблоны Викисловаря. Правда, так просто, по одному только слову «автомобили», нельзя, ведь тупая машина никак не поймёт, что «вижу автомобилев» — это вдвойне неверно (не угаданы группа и одушевлённость).
    Надо задать:
    • склонение (первое / второе / третье / разносклоняемое / несклоняемое);
    • группу склонения (десятка полтора на каждое склонение);
    • одушевлённость (влияет на дательный и винительный падежи, в зависимости от склонения).
    Ответ написан
    3 комментария
  • Есть бинарные дерево поиска в С++?

    @Mercury13
    Программист на «си с крестами» и не только
    Именно так работает стандартный контейнер std::map.
    Ответ написан
    Комментировать
  • Есть несколько способов создания единственного экземпляра класса. Есть ли смысл использовать в многопоточной среде второй вариант (см. в теме)?

    @Mercury13
    Программист на «си с крестами» и не только
    Первый-то создаёт, однако…
    • Если во время создания напросится другой поток, будут созданы два экземпляра. В «не-мусорных» языках второй экземпляр будет «висеть» и его никак не уничтожишь.
    • При определённом устройстве среды исполнения (instance присваивается раньше, чем срабатывает конструктор) система может отдать другому потоку ссылку на неготовый экземпляр.

    От создания двух экземпляров второе точно защищает. Я не знаком с моделью памяти C# и потому не могу сказать, насколько второе защищает от неготового экземпляра; кажется, нужен ещё модификатор volatile.
    Ответ написан
    Комментировать
  • Возможно ли реализовать двухфакторная аутенфикация в голове?

    @Mercury13
    Программист на «си с крестами» и не только
    Не имеет смысла по двум причинам.
    1. Легко вскрывается.
    2. Даже при незнании PIN слишком велика вероятность подбора.

    Второе связано с тем, что цифры у нас от 0 до 9 — а значит, сумма из трёх будет в пределах от 0 до 27. Что же с первым? Если у нас N цифр — код восстанавливается за N линейно независимых линейных комбинаций. Например, мы не знаем c и d, но комбинации 2a+b, a+2b и a+b линейно зависимы, и если раскрыты любые две комбинации, раскроется и третья. Для этого надо решить систему линейных алгебраических уравнений:
    { 2a + b = 10
    { a + 2b = 11
    Отсюда a = 3, b = 4, и a + b = 7.
    Ответ написан
    Комментировать
  • Для чего нужен Rapsberry Pi Zero?

    @Mercury13
    Программист на «си с крестами» и не только
    Вряд ли из этой машинки можно сделать микросервер (частое применение "больших" Pi). Зато для управления моделью, светом в сортире - да мало ли чем - то же самое, что Arduino, только на порядок мощнее.
    Ответ написан
    Комментировать