main.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "LoginWindow.h"
  2. #include "Client.h"
  3. #include "AppTheme.h"
  4. #include "AppConfig.h"
  5. #include "UserSettings.h"
  6. #include "UiHelpers.h"
  7. #include "Updater.h"
  8. #include <QtWidgets/QApplication>
  9. #include <QColor>
  10. #include <QFont>
  11. #include <QPalette>
  12. #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
  13. #include <QGuiApplication>
  14. #endif
  15. namespace
  16. {
  17. void setupHighDpi()
  18. {
  19. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
  20. QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  21. QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
  22. #endif
  23. #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
  24. QGuiApplication::setHighDpiScaleFactorRoundingPolicy(
  25. Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
  26. #endif
  27. qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
  28. }
  29. }
  30. int main(int argc, char *argv[])
  31. {
  32. setupHighDpi();
  33. int applyRc = 0;
  34. if (Updater::runApplyUpdateIfRequested(argc, argv, &applyRc))
  35. return applyRc;
  36. QApplication app(argc, argv);
  37. app.setQuitOnLastWindowClosed(false);
  38. AppConfig::instance().load();
  39. UserSettings::instance().load();
  40. AppTheme::loadFonts();
  41. app.setFont(AppTheme::appFont());
  42. app.setStyleSheet(AppTheme::globalQss());
  43. {
  44. QPalette pal = app.palette();
  45. pal.setColor(QPalette::ToolTipBase, QColor(QStringLiteral("#FFFFFF")));
  46. pal.setColor(QPalette::ToolTipText, QColor(QStringLiteral("#1A1A1A")));
  47. app.setPalette(pal);
  48. }
  49. app.setApplicationName(QStringLiteral("NIM"));
  50. app.setOrganizationName(QStringLiteral("NIM"));
  51. app.setWindowIcon(UiHelpers::appIcon());
  52. LoginWindow login;
  53. QObject::connect(&login, &LoginWindow::loginSucceeded,
  54. [&](const QString &account, const QString &nickname) {
  55. auto *mainWin = new Client(account, nickname);
  56. mainWin->setAttribute(Qt::WA_DeleteOnClose);
  57. QObject::connect(mainWin, &Client::loggedOut, &login, [&login]() {
  58. login.prepareAfterLogout();
  59. login.show();
  60. login.raise();
  61. login.activateWindow();
  62. });
  63. mainWin->show();
  64. login.hide();
  65. });
  66. Updater::scheduleCleanupAfterStart();
  67. login.show();
  68. return app.exec();
  69. }