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
