-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
113 lines (92 loc) · 4.05 KB
/
main.cpp
File metadata and controls
113 lines (92 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "qsymbianapplication.h"
#include "qmlapplicationviewer.h"
#include <QtDeclarative/QDeclarativeContext>
#include <QtDeclarative/QDeclarativeEngine>
#include <QtDeclarative/qdeclarative.h>
// Ваши сетевые заголовки
#include <QNetworkConfigurationManager>
#include <QNetworkConfiguration>
#include <QNetworkSession>
#include <QNetworkProxy>
#include <QTextCodec>
#include <dlfcn.h>
// Наши классы
#include "config.h"
#include "apimanager.h"
#include "historymanager.h"
#include "qrimageprovider.h"
#include "roundedimageprovider.h"
#include "volumekeysobserver.h"
#include "translationmanager.h"
#include "localhttpproxy.h"
//#include <QGLWidget>
#include <QFile>
int main(int argc, char *argv[])
{
QFile::remove("C:/Data/SymTube_debug.txt");
QSymbianApplication app(argc, argv);
QApplication::setAttribute(Qt::AA_S60DisablePartialScreenInputMode, false);
// Динамическая загрузка фикса для частичной клавиатуры (Qt 4.8+ specific hack)
void* library = dlopen("QtGui", 0);
if (library != 0) {
// Символ для qt_s60_setPartialScreenAutomaticTranslation(bool)
void* func = dlsym(library, "12199");
if (func != 0) {
((void(*)(bool)) func)(false);
}
dlclose(library);
}
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
// 1. Настройка сети (как у вас)
QNetworkConfigurationManager manager;
if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) {
// На Symbian это обязательно для установления соединения
QNetworkConfiguration config = manager.defaultConfiguration();
QNetworkSession *networkSession = new QNetworkSession(config, &app); // Привязываем к жизни приложения
networkSession->open();
}
// 2. Инициализация менеджеров
Config config;
// Создаем провайдер ПЕРЕД ApiManager
QrImageProvider *qrProvider = new QrImageProvider();
// Передаем указатель на провайдер в конструктор
ApiManager apiManager(&config, qrProvider);
HistoryManager historyManager;
VolumeKeysObserver volumeKeys;
TranslationManager translationManager;
// 3. Используем чистый QDeclarativeView
QmlApplicationViewer view;
// 4. Добавляем Image Provider в движок QML
view.engine()->addImageProvider(QLatin1String("qr"), qrProvider);
view.engine()->addImageProvider(QLatin1String("rounded"), new RoundedImageProvider());
QPalette pal = view.palette();
pal.setColor(QPalette::Window, Qt::black);
view.setPalette(pal);
view.setStyleSheet("background: black;"); // Дополнительно для QWidget-контейнера
// Оптимизация: не очищать фон каждый раз (ускоряет Symbian)
view.setAttribute(Qt::WA_OpaquePaintEvent);
view.setAttribute(Qt::WA_NoSystemBackground);
view.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
view.viewport()->setAttribute(Qt::WA_NoSystemBackground);
// 5. Пробрасываем C++ объекты в QML
QDeclarativeContext *context = view.rootContext();
context->setContextProperty("Config", &config);
context->setContextProperty("ApiManager", &apiManager);
context->setContextProperty("HistoryManager", &historyManager);
context->setContextProperty("VolumeKeys", &volumeKeys);
context->setContextProperty("SymbianApp", &app);
context->setContextProperty("TranslationManager", &translationManager);
//view.setViewport(new QGLWidget());
// 6. Загружаем QML
view.setSource(QUrl::fromLocalFile("qml/main.qml"));
#if defined(Q_OS_SYMBIAN)
view.showFullScreen();
#else
view.resize(360, 640);
view.show();
#endif
return app.exec();
}