18 марта 2010

Наследование от QDeclarativeItem. Маленький tip.

По умолчанию у QDeclarativeItem стоит флаг QGraphicsItem::ItemHasNoContents. Пол дня убил пока не раскопал почему программа не заходит в переопределённый метод paint моего компонента!

06 октября 2009

Отображение rich text в item view.

Понадобилось мне тут отображать rich text в QTableView. По умолчанию такого поведения нет и полез я в исходники. Оказывается всё необходимое для сего есть. Посмотрел я на QLabel и наваял следующее:

from PyQt4.QtCore import Qt
from PyQt4.QtGui import *

class RichTextItemDelegete(QAbstractItemDelegate):
def __init__(self, parent):
QAbstractItemDelegate.__init__(self, parent)

def paint(self, painter, option, index):
if option.state & QStyle.State_Selected:
painter.fillRect(option.rect, option.palette.highlight())

painter.setBrush(QColor(Qt.black))
document = QTextDocument()
document.setHtml(index.data(Qt.DisplayRole).toString())
context = QAbstractTextDocumentLayout.PaintContext()
context.palette = option.palette

if option.state & QStyle.State_Selected:
context.palette.setColor(QPalette.Text, Qt.white)
else:
context.palette.setColor(QPalette.Text, Qt.black);

painter.save()
layout = document.documentLayout()
painter.translate(0, option.rect.y())
layout.draw(painter, context)
painter.restore()

def sizeHint(self, option, index):
document = QTextDocument()
document.setHtml(index.data(Qt.DisplayRole).toString())
layout = document.documentLayout()
return layout.documentSize().toSize()


Код как видите на питоне, но на С++ переносится чуть-ли не копипастой.

19 января 2009

QtCreator и сборка плагина Designer

Если кто собирает QtCreator из git дерева, то можно заметить, что его плагин для редактирования форм не собирается. Так вот, чтобы собрать этот плагин, необходимо указать QTDIR на каталог где вы до этого вручную собирали саму Qt, так как этот плагин использует private headers. Ну и как вытекающее из этого неудобство, имеем необходимость сборки свежей версии Qt4.5 тоже из git.

14 января 2009

Qt 4.5 выйдет под LGPL

30 декабря 2008

Тишина....

Сегодня нашел интересные параметр для qmake.

CONFIG += silent

При компиляции будут подовляться полный вывод запуска компилятора или служебных команд

compiling main.cpp
uic mainwindow.ui

31 января 2008

Баг QtScript. (продолжение)

LestorN@QT: Баг QtScript.

Это был не баг!!! Долго не расписывая приведу ответ Троллей.

Hi,
There is no standard way of subclassing a "native" class. A setup like this should work, though:

function ByteArraySub(n) {
var o = new ByteArray(n);
o.__proto__ = ByteArraySub.prototype;
return o;
}

ByteArraySub.prototype = new ByteArray();

ByteArraySub.prototype.foo = function() { return this.length; }

ba = new ByteArraySub(10);
print(ba.foo());


This approach can be used when "subclassing" any native class, e.g. the built in Array class too.

Kent

Ещё раз хочу сказать что Trolltech замечательная компания, и я очень надеюсь, что Nokia им только поможет!!!

28 января 2008

Баг QtScript.

Разбираюсь я тут с QtScript. В 4.4 появился замечательный класс QScriptClass. Он позволяет создавать весьма динамические JavaScript объекты. Вобщем как заработает полностью, так обязательно подробно напишу, а пока меня заторозил неприятный баг (надеюсь что не фича).

Вобщем класс создайтся и отлично работает, но если попытаться использовать такой класс в качестве прототипа, то проявляются 2 неприятных момента. Проиллюстрирую на примере немного модифицированного examples/script/customclass (что исключит влияние моих оч.умелых ручек)


function ByteArraySub(n) {
ByteArray.call(this, n);
}

ByteArraySub.prototype = new ByteArray();

ba = new ByteArraySub(4);

print(ba instanceof Object);
print(ba instanceof ByteArray); //!! тут мы увидим на экране false!!!
print(ba instanceof ByteArraySub);

print(ba.length);
ba[1] = 123;
print(ba[1]);
ba[7] = 224;
print(ba.length);
result = '';
for (var p in ba) {
if (result.length > 0)
result += ', ';
result += '(' + p + ',' + ba[p] + ')';
}
print(result);
ba.toBase64(); //!! А вот тут мы вообще падаем в корку.
print(b64.toLatin1String());
ba.valueOf();
ba.chop(2);
ba.length;


Баг тролям отправил, так что ждёмс подтверждения.