Rambler-Contacts
Выложили свои труды на гитхаб.
А что, пусть висят!
https://github.com/Rambler-ru/Contacts
static QObject
Наткнулся на интересный баг.
Если есть класс MyClass: public QObject, а потом его использовать как static MyClass object; - то сигналы и слоты в нём работать не будут. При попытке вызвать connect(this, ...) или connect(..., this) будет runtime error.
Непрятная бага, которая заставила меня поломать голову...
Firefox 5 fastdial
Не заработал, пришлось гуглить.
Вот тут взял неофициальный фикс. Заработало.
xpi это rar-архив, из него берём chrome/content/[dom|file|utils].js и копируем (в винде) в APPDATA/Mozilla/Firefox/Profiles/.../extensions/dastdial@telega.php.us/chrome/content, перезапускаем FF. Работает, и даже все мои закладки вернулись на место. Всё ок.
Atari Basic
Ну что ж, вспомнил немгого детство...
Первый моя язык программирования - Atari Basic, первый комп - Atari XEGS, приставка с подключаемой клавой и джойстиком. Ещё был пистолет, но он что-то не работал у меня.
На этой чудо-машине я постигал первые азы программирования... циклы, рисование... первую игру даже на этой штуке написал. Было это классе в 6-м.
Прошли годы...
И вот теперь я вспомнил, каково это было!
Благо нашёлся эмулятор.
Жаль, что он всего 4 цвета эмулирует, а не 8, как в оригинале...
Ну да это не важно! Результат!
Эх, до боли знакомая надпись READY...
Сейчас конечно у меня нет времени писать игры на этой штуке, но кое-какие штуки всё же можно за мнуту наваять...
Ностальгия... Я ещё на этой штуке музыку когда-то пытался делать, по нотам что-то там пищало у меня, вот это было весело!
У меня не было внешнего дисковода, а потому все свои программы я аккуратно записывал в специальной тетради, дабы потом заново их набрать и запустить... Вот было время! В школе на уроках я часто сидел и писал на бумажке программы для этой штуки, поом бежал домой, набирал и запускал... И работало! Я даже приловчился джойстик для управления в своей игре использовать... Можно было играть и клавой и джойстиком... В программе той было строк 100, наверное... 100 вымученных, каждый день набираемых заново строк! Отлаживал я это дело доооолго... Был у игры один недостаток - взрывы рисовались не кружками (как положено), а квадратами, т.к. отрисовка окружностей очень долго происходила. Анимация строилась простыми циклами, никаких задержек, прерываний, таймеров... Бесконечный цикл и чтение скан-кодов с клавиатуры и состояний джойстика... Что вдруг вспомнил - вместо параболы я кусок синусоиды использовал для траектории полёта снаряда! Я просто ещё не знал, что такое парабола (зато знал, что такое синусоида... парадокс! тригонометрию я начал изучать рано).
А сейчас? Вот попробовать бы сейчас написать код сначала на бумажке... Без IDE, автокомплитера, подсветки синтаксиса и так далее... Да хотя бы строк 100! И без дебаггера отладить... а? Мдаа, староват я стал...
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'е! )
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); }
new blog
ну что ж, лучше уж вести персональный блог. но это не значит, что мой жж умрёт, в нём будет примерно то же, что и здесь, кроме того, в ближайшее время планируется перенести существующие записи из жж сюда. так-то вот.
oversight
Я хочу написать о том что я не могу понять как это сделать в домашних условиях и в порядке надзора. Ты не можешь быть уверен в том что я не могу понять как это сделать в домашних условиях и в порядке надзора над ним и его женой в этом отеле с мужем и ребенком в семье и в обществе в целом. Он не только не может быть и речи о том что я не могу понять как это сделать в домашних условиях и в порядке надзора.
Google Scribe
The Empire Strikes Back
Имперский истребитель в солнечной системе.
http://apod.nasa.gov/apod/ap110105.html