silvansky programming stuff

8Jul/110

Rambler-Contacts

Выложили свои труды на гитхаб.
А что, пусть висят!
https://github.com/Rambler-ru/Contacts

6Jul/110

static QObject

Наткнулся на интересный баг.
Если есть класс MyClass: public QObject, а потом его использовать как static MyClass object; - то сигналы и слоты в нём работать не будут. При попытке вызвать connect(this, ...) или connect(..., this) будет runtime error.
Непрятная бага, которая заставила меня поломать голову...

27Jun/110

Firefox 5 fastdial

Не заработал, пришлось гуглить.

Вот тут взял неофициальный фикс. Заработало.

xpi это rar-архив, из него берём chrome/content/[dom|file|utils].js и копируем (в винде) в APPDATA/Mozilla/Firefox/Profiles/.../extensions/dastdial@telega.php.us/chrome/content, перезапускаем FF. Работает, и даже все мои закладки вернулись на место. Всё ок.

7Jun/110

Atari Basic

Ну что ж, вспомнил немгого детство...
Первый моя язык программирования - Atari Basic, первый комп - Atari XEGS, приставка с подключаемой клавой и джойстиком. Ещё был пистолет, но он что-то не работал у меня.
На этой чудо-машине я постигал первые азы программирования... циклы, рисование... первую игру даже на этой штуке написал. Было это классе в 6-м.

Прошли годы...

И вот теперь я вспомнил, каково это было!

Благо нашёлся эмулятор.

Жаль, что он всего 4 цвета эмулирует, а не 8, как в оригинале...
Ну да это не важно! Результат!

Эх, до боли знакомая надпись READY...

Сейчас конечно у меня нет времени писать игры на этой штуке, но кое-какие штуки всё же можно за мнуту наваять...

Ностальгия... Я ещё на этой штуке музыку когда-то пытался делать, по нотам что-то там пищало у меня, вот это было весело!

У меня не было внешнего дисковода, а потому все свои программы я аккуратно записывал в специальной тетради, дабы потом заново их набрать и запустить... Вот было время! В школе на уроках я часто сидел и писал на бумажке программы для этой штуки, поом бежал домой, набирал и запускал... И работало! Я даже приловчился джойстик для управления в своей игре использовать... Можно было играть и клавой и джойстиком... В программе той было строк 100, наверное... 100 вымученных, каждый день набираемых заново строк! Отлаживал я это дело доооолго... Был у игры один недостаток - взрывы рисовались не кружками (как положено), а квадратами, т.к. отрисовка окружностей очень долго происходила. Анимация строилась простыми циклами, никаких задержек, прерываний, таймеров... Бесконечный цикл и чтение скан-кодов с клавиатуры и состояний джойстика... Что вдруг вспомнил - вместо параболы я кусок синусоиды использовал для траектории полёта снаряда! Я просто ещё не знал, что такое парабола (зато знал, что такое синусоида... парадокс! тригонометрию я начал изучать рано).

А сейчас? Вот попробовать бы сейчас написать код сначала на бумажке... Без IDE, автокомплитера, подсветки синтаксиса и так далее... Да хотя бы строк 100! И без дебаггера отладить... а? Мдаа, староват я стал...

6Apr/110

assert

Наткнулся в коде (/src/gui/dialogs/qinputdialog.cpp):

void QInputDialog::setInputMode(InputMode mode)
{
    Q_D(QInputDialog);
 
    QWidget *widget;
 
    /*
        Warning: Some functions in QInputDialog rely on implementation details
        of the code below. Look for the comments that accompany the calls to
        setInputMode() throughout this file before you change the code below.
    */
 
    switch (mode) {
    case IntInput:
        d->ensureIntSpinBox();
        widget = d->intSpinBox;
        break;
    case DoubleInput:
        d->ensureDoubleSpinBox();
        widget = d->doubleSpinBox;
        break;
    default:
        Q_ASSERT(mode == TextInput);
        d->chooseRightTextInputWidget();
        return;
    }
 
    d->setInputWidget(widget);
}

switch просто поразил своим ассертом в default'е! )

Tagged as: , , , No Comments
5Apr/110

nine part pixmap

Код для отрисовки картинки из 9 частей (типа border-image). Принимает QImage, но может быть модифицирован для работы напрямую с QPixmap.

void drawNinePartImage(const QImage &image, QRectF paintRect, qreal borderLeft, qreal borderRight, qreal borderTop, qreal borderBottom, QPainter * painter)
{
	QPixmap bg = QPixmap::fromImage(image);
	// source size
	qreal w = bg.width();
	qreal h = bg.height();
	// target size
	qreal tw = paintRect.width();
	qreal th = paintRect.height();
/*
 
+-------+-------------------+-------+
|       |                   |       |
|   0   |         1         |   2   |
|       |                   |       |
+-------+-------------------+-------+
|       |                   |       |
|   3   |         4         |   5   |
|       |                   |       |
+-------+-------------------+-------+
|       |                   |       |
|   6   |         7         |   8   |
|       |                   |       |
+-------+-------------------+-------+
 
*/
	QPainter::PixmapFragment fragments[9]; // we'll draw 9-part pixmap
	qreal hborders = borderLeft + borderRight;
	qreal vborders = borderTop + borderBottom;
	qreal sx = (tw - hborders) / (w - hborders), sy = (th - vborders) / (h - vborders);
	qreal hbLeft = borderLeft / 2.0;
	qreal hbRight = borderRight / 2.0;
	qreal hbTop = borderTop / 2.0;
	qreal hbBottom = borderBottom / 2.0;
	fragments[0] = QPainter::PixmapFragment::create(QPointF(hbLeft, hbTop),
							QRectF(0, 0, borderLeft, borderTop));
	fragments[1] = QPainter::PixmapFragment::create(QPointF(borderLeft + (tw - hborders) / 2.0, hbTop),
							QRectF(borderLeft, 0, w - hborders, borderTop),
							sx);
	fragments[2] = QPainter::PixmapFragment::create(QPointF(tw - hbRight, hbTop),
							QRectF(w - borderRight, 0, borderRight, borderTop));
	fragments[3] = QPainter::PixmapFragment::create(QPointF(hbLeft, borderTop + (th - hborders) / 2.0),
							QRectF(0, borderTop, borderLeft, h - hborders),
							1.0,
							sy);
	fragments[4] = QPainter::PixmapFragment::create(QPointF(borderLeft + (tw - hborders) / 2.0, borderTop + (th - vborders) / 2.0),
							QRectF(borderLeft, borderTop, w - hborders, h - vborders),
							sx,
							sy);
	fragments[5] = QPainter::PixmapFragment::create(QPointF(tw - hbRight, borderTop + (th - vborders) / 2.0),
							QRectF(w - borderRight, borderTop, borderRight, h - vborders),
							1,
							sy);
	fragments[6] = QPainter::PixmapFragment::create(QPointF(hbLeft, th - hbBottom),
							QRectF(0, h - borderBottom, borderLeft, borderBottom));
	fragments[7] = QPainter::PixmapFragment::create(QPointF(borderLeft + (tw - hborders) / 2.0, th - hbBottom),
							QRectF(borderLeft, h - borderBottom, w - hborders, borderBottom),
							sx);
	fragments[8] = QPainter::PixmapFragment::create(QPointF(tw - hbRight, th - hbBottom),
							QRectF(w - borderRight, h - borderBottom, borderRight, borderBottom));
 
	painter->drawPixmapFragments(fragments, 9, bg);
}
 
Tagged as: , , , No Comments
4Apr/110

new blog

ну что ж, лучше уж вести персональный блог. но это не значит, что мой жж умрёт, в нём будет примерно то же, что и здесь, кроме того, в ближайшее время планируется перенести существующие записи из жж сюда. так-то вот.

Tagged as: , , No Comments
1Apr/110

oversight

Я хочу написать о том что я не могу понять как это сделать в домашних условиях и в порядке надзора. Ты не можешь быть уверен в том что я не могу понять как это сделать в домашних условиях и в порядке надзора над ним и его женой в этом отеле с мужем и ребенком в семье и в обществе в целом. Он не только не может быть и речи о том что я не могу понять как это сделать в домашних условиях и в порядке надзора.
Google Scribe

25Mar/110

my damaged brain…

Долго мучился, пока не почитал мануалы. В нужном месте.
Оказывается, что если хочешь для прямого наследника QWidget'а установить background-image через setStyleSheet(), то надо ему переопределить paintEvent():

class MyCustomWidget : public QWidget
{
  Q_OBJECT
  // ...
}

void MyCustomWidget::paintEvent(QPaintEvent *)
{
  QStyleOption opt;
  opt.init(this);
  QPainter p(this);
  style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

* This source code was highlighted with Source Code Highlighter.

http://doc.qt.nokia.com/4.7/stylesheet-reference.html#list-of-stylable-widgets - там в самом конце.

21Mar/110

The Empire Strikes Back

Имперский истребитель в солнечной системе.

http://apod.nasa.gov/apod/ap110105.html

Filed under: Uncategorized No Comments