TGViewer
Roem.ru Roem.ru @roemru · 3.85K subscribers
Post #5859 2.34K
Сложно ли разрабатывать под "Аврору"? Беседа с разработчиком мессенджера Телеграфъ: примеры кода

Roem: можешь привести примеры кода, с пояснением его специфики?

Михаил: Qt вообще - причудливое и поначалу шокирующее сочетание JavaScript с C++.

if(options.count < 2 || options.count > 10) {
errors.push(qsTr("A poll requires 2-10 answers."));
} else {
for(var i = 0; i < options.count; i += 1) {
var len = options.get(i).text.length
if(len < 1 || len > 100) {
errors.push(qsTr("All answers have to contain 1-100 characters."));
break;
}
}
}



Тут, например, без всякого С++ валидируется опрос вводимый пользователем в чате. Чистый JavaScript.


А вот ещё довольно понятная бизнес-логика в QML (JavaScript):

property bool userIsMember: ((isPrivateChat || isSecretChat ) && chatInformation["@type"]) || // should be optimized
(isBasicGroup || isSuperGroup) && (
(groupInformation.status["@type"] === "chatMemberStatusMember")
|| (groupInformation.status["@type"] === "chatMemberStatusAdministrator")
|| (groupInformation.status["@type"] === "chatMemberStatusRestricted" && groupInformation.status.is_member)
|| (groupInformation.status["@type"] === "chatMemberStatusCreator" && groupInformation.status.is_member)
)



С другой стороны, вся работа с получаемыми и отправляемыми в Telegram данными делается в С++, но возиться с памятью по сути не приходится - это всё делает фрейморк Qt

Вот пример С++ кода, выполняющего поиск эмодзи в БД:

void EmojiSearchWorker::performSearch()
{
LOG("Performing emoji search" << this->queryString);
QVariantList resultList;

if (database.open()) {
QSqlQuery query(database);
query.prepare("select * from emojis where description match (:queryString) limit 25");
query.bindValue(":queryString", queryString + "*");
query.exec();
while (query.next()) {
if (isInterruptionRequested()) {
break;
}
QVariantMap foundEmoji;
foundEmoji.insert("file_name", query.value(0).toString());
foundEmoji.insert("emoji", query.value(1).toString());
foundEmoji.insert("emoji_version", query.value(2).toString());
foundEmoji.insert("description", query.value(3).toString());
resultList.append(foundEmoji);
}
database.close();
} else {
LOG("Unable to perform a query on database" << database.lastError().databaseText());
}

emit searchCompleted(queryString, resultList);
}


С++ тут выглядит более похожим на Java. Хотя доступны все возможности С++, кажется, версии 17 года

Roem: А с QT сейчас нет проблем в работе у россиян, или они за контуром того что разработчик делает?

Михаил: Они совершенно за контуром. Qt 5.6 - последняя, кажется, GPL версия фреймворка - это неотъемлемая часть ОС и средств разработки.
Никакого онлайн-взаимодействия с чем-либо не происходит.

Roem: а дальше как?

Михаил: Спроси чего полегче.
Варианта два:
1) Отход от Qt (или переход на новый фреймворк без потери совместимости)
2) Самостоятельная доработка Qt

Сейчас ещё набирает SDK на Flutter, но я в него глубоко не вникал.

Qt - не какая-то магия. Обычный фреймворк. Дорабатывать его не сложнее, наверное, чем внедрить новый.

Roem: Спасибо большое за рассказ, удачи!
More from @roemru
  1. Oct 2, 2026Нужен результат SEO за недели, а не месяцы, нужен взлёт ракеты? 🚀 Хотите быстрее расти в…
  2. Oct 2, 2026На 19-летие Roem.ru Ответ на "Вопрос, что такое Roem.ru и зачем он нужен?" лично для меня…
  3. Sep 30, 2026Трамп собрал руководителей ИT-компаний и объявил о переименовании ИИ в SI - super intellig…
  4. Sep 29, 2026Нижнекамск отдал "Яндексу" право управления своим общественным транспортом. "Яндекс" таким…
  5. Sep 27, 2026Валентин Любимов: веб-разработчик, 10 лет жизни в христианской обители С Валентином мы зна…
  6. Sep 10, 2026"Ну вы поплачьте теперь": ФБР и NSA недовольны нарушением условий использования американск…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →