воскресенье, 8 августа 2010 г.

QT интернационализация.

Хорошие статьи о создании поддержки нескольких языков в приложении.
1. Qt — трудности перевода
2. Локализация и числительные

суббота, 7 августа 2010 г.

QT. Цвета виджета.

QPalette p = MyLabel->palette();
p.setColor(QPalette::Window, Qt::black); //фон
p.setColor(QPalette::WindowText, Qt::red); //шрифт
MyLabel->setWidget(p);


все.

пятница, 6 августа 2010 г.

QT. QObject. Первые ошибки. Collect2: ld returned 1 exit status.

В связи со срочностью написания приложения на QT, была бегло пролистана соответствующая книжка. За эту спешку поплатился кучей глупых ошибок. Решил собрать коллекцию таких, на которые MinGW невразумительно ругается :)

При работе с QObject, очень просто получить такое:
1. no matching function for call to 'QObject::connect(...)'
2. undefined reference to 'vtable for MyClass'
3. collect2: ld returned 1 exit status

Последняя ошибка на первом месте моего хит-парада неприятных ошибок :)

Итак, если мы хотим использовать объект QObject, нужно не забывать:

  • Определять классы, использующие макрос Q_OBJECT в заголовочном файле (а не cpp). Иначе схлопочем ошибки 1 и 3.
  • Вставлять макроса Q_OBJECT (Ошибка 1). Примечание: если собрать проект без этого макроса, потом вставить его и опять попробовать собрать, то можно получить ошибки 2 и 3. Нужно произвести чистку проекта (или тупо грохнуть папку с билдом. В QT Creator она по умолчанию-MyProject-build-desktop)
  • Наследоваться от QObject, или его производного класса (Ошибка 1).
  • Вставлять #include . Ошибки можно и не получить, но сигналы и слоты работать не будут.
  • Определять объявленные слоты, если не хотим получить ошибку 3. С этим я конкретно намучался. "collect2: ld returned 1 exit status" и все! Ну как тут понять, что я просто забыл написать тело для слота MyClass::mySlot(){/* */}


UPD (7.08.10 18:25):
Блин, мне было нужно смотреть консоль сборки (QT Creator). Я бы сразу увидел дополнительную информацию о причинах ошибки.