Qt Digia или где взять?
Итак, знаменитый фреймворк продан сторонней организации.
И первое, что Вы поймёте при заходе на сайт qt.digia.com - скачать Qt просто так Вам больше не удастся.
Итак.
Есть сайт qt-project.org, где всё таки можно скачать последние версии библиотеки Qt.
Бинарники есть только для: 4.6.4, 4.8.4, 5.0.0
Qt creator только: 2.6.1
Все остальные версии доступны в виде исходных кодов тут qt.gitorious.org
MinGW в комплекте больше нет. Для 4.6.4 нужен gcc-4.4.0
Берём тут: mingw-2010.04-as-is.7z
Под Win8 штатный GDB работать отказался.
Брать тут: origin.releases.qt-project.org/gdb
[Java] Новый IntelliJ IDEA 12
Вышла новая, 12 версия замечательного IDE.
Офф сайт: http://www.jetbrains.com/idea/index.html
Потыкал пока поверхностно.
+ Новая цветовая схема очень приятная глазу.
+ Добавился редактор форм для Дроида, теперь можно не использовать внешние утилиты
- При переходе на редактор форм и обратно закрывается дерево проекта. Раздражает.
- Очень долго искал, как же переключить схему
[Qt] UTF в 1251 и 1251 в UTF
На входе имеем строку в HEX виде, да еще и в кодировке CP-1251. Надо Переделать её в UTF-8
Я использовал для этого QTextCodec.
QByteArray msg = QByteArray::fromHex("cde5eff0e0e2e8ebfcedeee520f1eeeee1f9e5ede8e5204b4f4e5f544d5f484f53544b4e4620eef220d3cad2d121"); QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); QString strf = codec->toUnicode(msg); qDebug() << strf;
Переварили строчку и надо отправить её обратно, но на выходе нужен CP-1251
Процедура обратная.
QByteArray wtf_s(strf.toStdString().c_str()); //либо так //wtf_s.append(strf); //либо так QByteArray wtf = codec->fromUnicode(wtf_s); qDebug() << wtf.toHex();
Ключевые слова: Qt, UTFtoCP1251, CP1251toUTF
[Android] Поворот экрана
Варианта управления экраном три:
1. Запретить поворот экрана
В раздел activity
вписать
android:screenOrientation="portrait"
или
android:screenOrientation="landscape"
2. Обрабатываем поворот вручную
Т.к. метод onCreate()
вызывается не только при создании Activity
, но и при повороте экрана, можно отловить данные события.
Подробно можно почитать тут - http://developer.android.com/guide/topics/resources/runtime-changes.html (Кстати, там, возможно, опечатка)
Коротко:
Добавляем в класс Activity
метод:
@Override public Object onRetainNonConfigurationInstance() { final MyDataObject data = collectMyLoadedData(); return data; }
В котором производим сборку всех данных, которые нужно будет снова показать после поворота.
И в метод onCreate
добавляем конструкцию:
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); if (data != null) { loadMyData(); }
В которой данные распаковываем обратно.
3. Запрет автоматического пересоздания Activity
В AndroidManifest.xml
дописать в раздел activity
android:configChanges="orientation|keyboardHidden"
Метод не рекомендуемый, т.к. в сложных приложениях придется самостоятельно обновлять данные внутри программы.
Подробнее можно тут: http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation
Ну или в официальной доке.
[Android] Первое приложение
Программа будет простенькой.
По нажатию кнопки будет выводится одна из 4 фраз, выбранная случайно, в случайную же область экрана.
ОС: 2.2.2
Сделаем также иконку приложения.
Разрабатывать будем в IntelliJ IDEA
Еще немного о классах
Класс - это упрощенное описание каких-нибудь реальных (чаще, правда, выдуманных) вещей.
Вот, например, точка. Единственное, что есть у точки - это её координаты в пространстве. Это её параметры.
Как задать точку на плоскости? Надо нарисовать точку и подписать её: M(1,2), т.е. точка с именем M и координатами х = 1, у = 2.
Это её "конструктор". Т.е. мы "сконструировали" конкретную точку М с конкретными координатами.
На языке Java это будет выглядеть так:
class Point { //общее описание точек private double x, y; //параметры точки Point(double ax, double ay) { //конструктор x = ax; y = ay; } }
Сконструируем точку
Point M = new Point(1, 2);
В данном классе задан один конкретный конструктор. Из-за этого каждая создаваемая точка будет ожидать, что при создании ей назначат координаты.
Т.е. данная строчка работать не будет:
Point M = new Point(); //пустые параметры //или Point M = new Point(1); //неполные параметры
Дальше. Класс включает в себя не только параметры, но и методы.
Что такое метод класса? Это вопрос, который мы можем задать или указание, что-либо сделать. Причем и вопрос и указания нужно адресовать уже конкретной сконструированной точке.
Научим точку сообщать свои координаты и перемещаться по одной из координатных осей:
class Point { //общее описание точек private double x, y; //параметры точки Point(double ax, double ay) { //конструктор x = ax; y = ay; } //запрос координаты Х double getX() { return x; } //запрос координаты Y double getY() { return y; } //указание сдвинуться по оси X на расстояние dx void moveX(double dx) { x = x + dx; } //указание сдвинуться по оси Y на расстояние dy void moveY(double dy) { y = y + dy; } } //использование public class Main { public static void main(String[] args) { //создаём точку Point M = new Point(1, 2); //спрашиваем у созданной точки - скажи нам, точка М свои координаты X и Y System.out.println("Текущие координаты точки М: x = " + M.getX() + ", у = " + M.getY()); System.out.println("Сдвинем точку по оси Х на 5 и по оси У на -1"); //просим точку М - точка М, сдвинься на 5 по оси X M.moveX(5); //просим точку М - точка М, сдвинься на -1 по оси Y M.moveY(-1); //спрашиваем у точки М - скажи нам, точка М свои координаты X и Y System.out.println("Новые координаты точки М: x = " + M.getX() + ", у = " + M.getY()); } }
Еще раз повторю - методы вызываются у конкретной точки - сконструированного объекта.
Класс - это просто заготовка, шаблон, описание.
Т.е. пока точка не создана - мы как бы задумываем её нарисовать.
А вот когда сказали new, это значит, что мы нарисовали конкретную точку в конкретном месте координатной плоскости.
Записи вида
Point.getX(); //или Point.moveX(5);
Не имеют смысла, потому что описание ничего не знает.
Это как если спросить у человека - "скажи мне координаты точки?"
Логично будет подумать, что он ответит - "какой именно?"
Также делает и компилятор.
[Java] this, super
1. Как-то я писал, что не понимаю, зачем вызывать конструктор в конструкторе через this.
Разобрался.
Это для укорачивания кода.
Типа можно так:
class Point { int х, у; Point(int х, int у) { this.x = х; this.у = у; } Point() { this.x = -1; this.у = -1; } }
А можно короче:
class Point { int х, у; Point(int х, int у) { this.x = х; this.у = у; } Point() { this(-1, -1); //конструктор вызывает другой конструктор } }
Есть одно ограничение на вызов одного конструктора из другого. Такой вызов должен быть первым оператором в вызывающем конструкторе.
2. super
Данная функция служит для вызова конструктора базового класса. Используется, если базовый класс, например, не имеет конструктора по умолчанию
Пример
class X { X(int a) { ... } ... } class Y extends X { Y() { super(0); ... } ... }
Также super может использоваться и для явного вызова методов базового класса. Это необходимо, если некоторый метод базового класса был переопределен в порожденном классе.
Пример
class Base { int x = 1; long y; Base(long y) { this.y = y; } Base() { this(0); // вызов конструктора Base(long y) } public long f() { return x*y; } } class Derived extends Base { String name = ""; Derived(String name, long par) { super(par); // вызов конструктора Base(long y) this.name = name; } public long g(int r) { return r+super.f(); // вызов метода f() класса Base } public long f() { x++; return 2*y; } }
[Modbus] Функции 16-17
- 16 (10 Hex) Preset Multiple Regs
- 17 (11 Hex) Чтение идентификатора подчиненного
[Modbus] Функции 20-24
- 20 (14 Hex) Read General Reference
- 21 (15 Hex) Write general reference
- 22 (16 Hex) Mask Write 4X Register
- 23 (17 Hex) Read/Write 4X Registers
- 24 (18 Hex) Read FIFO Queue
[Modbus] Функции 07, 11, 12, 15
- 07 Read Exception Status
- 11 (0B Hex) Fetch Comm Event Ctr
- 12 (0C Hex) Fetch Comm Event Log
- 15 (0F Hex) Force Multiple Coils