Программизмы3 читателя тэги

Автор: Luar Soll

Склад заметок по программированию, возможности и лайфхаки, упомянутые в книгах и справке, которые хорошо бы не забыть до момента использования. И иногда бурчания на работу или используемое ПО.

 

На данный момент программирую под Windows, языки C++, C#, периодически с использованием 3д-графики как в чистом виде, так и через движки

* * *

Больше месяца назад сменила работу (все еще программист, и даже плюсовик, зато теперь меньше шанс внезапной необходимости изучения какого-то нового языка или новой библиотеки), за это время (точнее даже начиная с собеседования) узнала, сколько всего я не знала о современном c++ и qt:

- написала свой первый qml-виджет

- узнала, как заставить qt-creator автоматически добавить в cpp функцию, объявленную в h

- впервые воспользовалась unique_ptr (раньше пользовалась qsharedptr)

- сломала мозг о написание функций с шаблонами

- узнала, как искать методы у наследников qobject по имени метода

 

А, ну и узнала как ведется процесс разработки, если разработчиков много и существуют отдельные тестировщики

* * *

О кастомизации элементов управления:

User Control - объединить несколько контролов в один (если, например, какая-то комбинация их встречается часто)

Custom Control - собственно кастомные элементы, могут быть унаследованы от Control (или еще более общих вещей) и отрисованы с нуля, могут быть унаследованы от чего-то более конкретного и менять его работу

Control Template - когда надо радикально поменять вид, но сохранить функциональность

 

Для анимации изменения какого-нибудь параметра Control-а (например, высоты) можно использовать Storyboard. Style и Template можно менять в зависимости от действий пользователя (или отображаемых данных)

 

О browser-like навигации

Работая с навигацией между страницами (в веб-приложении или в Standalone) можно сделать на странице Frame, в котором тоже будет навигация между страницами, и в истории навигации будет запоминаться и то, как менялся Frame тоже (можно объединить это в в одной паре стрелочек Back и Forward, можно в Frame встроить свою)

 

* * *

- В XAML написано, к какому классу относится этот XAML. При сборке приложения берется XAML, по нему определяется, какой нужен класс, и лишь затем создается объект класса

- От запуска приложения до начала его работы может пройти какое-то время, пока приложение инициализируется. В это время можно показать картинку SplashScreen

- Первое созданное в приложении окно по умолчанию считается главным

- Если на старте приложения (функция Startup) надо только открыть окно (или страницу в браузерном приложении), то можно не писать функцию Startup (может называться по-другому) в коде, а указать это окно или страницу в XAML приложения

- В функции Startup (может называться по-другому) происходит обработка аргументов командной строки

- В XAML можно указать сопоставление событий и функций обработки событий (например, указать функции обработки активации/деактивации окна)

- Можно поймать в дверях Unhandled Exception с помощью обработчика DispatcherUnhandledException и как минимум более корректно завершить работу приложения и сказать пользователю об ошибке. А как максимум сделать, чтобы приложение продолжило работу

 

 

Еще конспекта про WPF и DataBinding кусок

- Мы можем привязываться не только полностью к Collection View, но также и к "текущему" элементу коллекции и к определенному полю внутри коллекции. Возможны вложенные коллекции и привязка к их View. "Текущий элемент" - например, последний выделенный

- DataTemplate - как именно отображать элемент Collection View в UI. Позволяет не только выбрать информацию к отображению, но и "сделать красиво" (причем по-разному в зависимости от параметров отображаемого элемента коллекции). То, что не зависит от параметров отображаемого элемента, лучше настраивать через настройки UI в целом

- Возможно выбирать конкретный Template в зависимости от параметров элемента Collection View (и отображать элементы _совсем_ по-разному), но это уже делается в коде

- ValidationRule - проверка того, что введенные в элемент UI данные можно конвертировать в привязанную к этому элементу переменную. Есть стандартные, можно создавать свои. Как именно выглядит уведомление об ошибке - тоже можно задавать

- Валидация может быть как до конвертации строки в значение (например, что в строке число), так и после (например, что это число в указанных пределах). Также может быть какая-то валидация после присвоения значения привязанной переменной

- По умолчанию ListBox, привязанный к коллекции, берет от элемента .ToString, и иногда достаточно переопределить ToString

- Реально дофига всего можно сделать с Data Binding именно через XAML, не залезая в код. Например, привязаться к Enum. Или задать конкретные параметры для функции валидации

 

Если создается пользовательский класс, объект которого к чему-то привязывается, то:

- Если будет передача данных от объекта, то нужны уведомления об изменениях

- Свойства объекта, используемые при привязке, должны быть public

- Невозможно привязаться к полям

 

MSDN можно переключить на американскую версию. Но для этого нужно прокрутить до самого низа страницы. Там слева будет переключатель.

* * *

В пятницу мне пришла в голову мысль обновить QtCreator. В процессе было обнаружено, что на поддомены сайта Qt (например, на https://forum.qt.io/) невозможно попасть с рабочего компа без использования friGate (из дома, как выяснилось, все нормально). Но ок: на сайт я попала. С большим трудом нашла ссылку на скачивание бесплатной OpenSource версии.

Но для того, чтобы обновиться, нужно воспользоваться программкой Qt Maintenance Tool, которая как раз менеджер версий Qt. А для этого ей тоже надо подключиться к интернету. И теоретически у нее даже есть настройки, в которые можно вбить прокси, но то ли я туплю и не то туда вбиваю, то ли прокси там на самом деле не работают.

В общем, пока что не слишком ясно, как обновить QtCreator, придется работать в чем есть.

Конспекты продолжаются

- Если вы пытаетесь создать объект не существующего класса, то VS2015 предложит вам создать этот класс и даже покажет превью

- По буквосочетанию In подсказка VS2015 выдаст не только Input, но и LoadInput. Но не Window, потому что ориентируется на то, что значимые слова в имени переменной/функции начинаются с больших букв. Иногда можно набрать только большие буквы и получить функцию целиком (OSI -> OpenStandardInput)

- Ctrl делает подсказку от IntelliSense прозрачной

- В WPF возможен Binding коллекций. Для этого нужен CollectionView. Сначала в ресурсах нужно привязать CollectionViewSource к коллекции (и дать ему имя), потом параметр ItemsSource элемента интерфейса (например, ListBox) к CollectionViewSource (с конкретным именем). Еще у коллекций есть View по умолчанию, можно привязываться просто к нему. Если мы сортируем/фильтруем ListBox, то это влияет на привязанный View, но не на саму коллекцию

* * *

Каждый раз, когда мне нужна конкретная версия Visual Studio - это мучение. Потому что на официальном сайте только самая свежая, и совершенно неочевидно, куда надо ткнуть, чтобы получить какую-то из предыдущих. Собственно, куда ткнуть на официальном сайте я так и не поняла, но путем гуглинга выгугливается страничка со старыми версиями.

 

А 2015 я еще и сначала русскоязычную скачала. Кажется, там можно установщиком закачать другие языки как дополнительные, но считаю плохим дао. Лучше снести и поставить англоязычную (а потом уже на нее опционально как дополнительный язык накатить русский... но скорее нет, мне вообще не очень понятно, зачем в IDE не-английские варианты интерфейса или, еще хуже, сообщения об ошибках, их же потом по-русски фиг нагуглишь, приходится сначала догадываться, как это сообщение звучит в оригинале, гуглить, потом, если решение через пользовательский интерфейс IDE, догадываться, как переведены на русский все нужные пункты меню и названия настроек)

Продолжаем писать конспект

- С помощью поиска возможно искать не только текст, но и выражения конкретной структуры (например А.Б = Б для любых А и Б). Замена для них тоже работает, например, превратить все А.Б = Б в Б = А.Б (это было и в предыдущих версиях, но еще ж знать об этом надо)

- Справка по F1 контекстная (по месту курсора или активному элементу)

 

- Внутри проектов могут быть произвольные подпапки, которые используются как namespace (в коде, соответственно, тоже) (C#)

- Внутри солюшна могут быть папки, содержащие проекты, если проектов очень много. При этом эти папки не влияют на структуру данных на жестком диске. Билд можно запускать как для целого солюшна, так и для его подпапки

- В солюшне есть подпапка для файлов, не входящих в проекты, но зачем-то открываемых в вижле (например, файлов с тестовыми данными)

- Солюшн описывается двумя файлами: .suo и .sln. Первый бинарный, содержит инфу об открытых файлах, брекпойнтах и т.д. Второй - текстовый, список проектов, настройки сборки и т.д.

- Солюшны 2012, 2013 и 2015 совместимы в любую сторону

Visual Studio 2015

Продолжаем:

 

- Если нужно посмотреть на текст вызываемой функции, можно не переходить к файлу, а посмотреть его во "врезке" (мысль интересная, но я постоянно !нечаянно! попадаю по этому варианту, а не по стандартному переходу к файлу, и это меня бесит)

- Можно вместо скроллбара сделать своеобразный "силуэт файла" - с моим "я не помню, какая это была страница, но форма текста там была вот такая!" это может быть полезно... но с моей длиной файлов с кодом - скорее вредно))

- Поиск через Navigate To работает с учетом релевантности. Может быть полезно. Но может быть пц нелогично

- Есть окно, где можно в режиме "написал - выполнил" выполнять отдельные кусочки команд - усложненная версия возможности посмотреть значение конкретного выражения на брекпойнте. Может быть полезно при дебаге (гуглить по словам Immediate Window)

- Часть сообщений об ошибках вылезает на этапе редактирования, а не только при компиляции

Visual Studio 2015

Вообще в основном я работаю в Qt Creator и пишу на C++. Но бывает, что мне нужно (для определенной задачи или для определенного проекта) мигрировать под Visual Studio, а то и вообще на C#. Вот сейчас как раз такой случай.

Причем если на плюсах под Visual Studio я некоторое время назад уже писала (но студия была 2010 и 2013), то на шарпе я писала дааавноооо. А тут еще ощущение, что пользовательский интерфейс VS2015 очень сильно отличается от пользовательского интерфейса VS2013.

 

С методом ненаучного тыка у меня в последние дни плохо, поэтому, не сумев сразу сделать то, что было надо и обнаружив несколько вроде бы и в общих чертах понятных, но все равно каких-то для меня загадочных фич, я нагло спиратила добыла на просторах интернета книжку по VS2015 и потихоньку ее читаю заодно пополняю свой англоязычный словарный запас*. При этом иногда нахожу такое, что бы вряд ли нашла просто тыкая кнопочки. И что наверняка забуду, если не законспектировать.

 

В общем, пока читаю про пользоавтельский интерфейс VS2015, из интересного уже почерпнула следующее:

- Просто горячих клавиш и сочетаний клавиш с Ctrl и прочим Alt там уже жестоко не хватает, поэтому, скажем, для того, чтобы закомментить блок кода нужно нажать сначала Ctrl+K, потом Ctrl+C

- Если код выровненный и в нескольких строчках подряд должен быть одинаковый кусок текста в одном месте (например, сразу несколько переменных нам надо срочно превратить из float в double), то можно "выделить вертикальный блок кода" и сразу удалить его содержимое или вбить один и тот же текст в нескольких строчках

 

*мой англоязычный словарный запас - это отдельное нечто, потому что он складывается в основном из форумов по программированию и фэнтези в различных проявлениях (книги, рулбуки, комп.игры).


Лучшее   Правила сайта   Вход   Регистрация   Восстановление пароля

Материалы сайта предназначены для лиц старше 16 лет (16+)