LxQtPanelApplication::LxQtPanelApplication(int& argc, char** argv) : LxQt::Application(argc, argv, true) { QCoreApplication::setApplicationName(QStringLiteral("lxqt-panel")); QCoreApplication::setApplicationVersion(LXQT_VERSION); QCommandLineParser parser; parser.setApplicationDescription(QStringLiteral("LXQt panel")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption configFileOption(QStringList() << QStringLiteral("c") << QStringLiteral("config") << QStringLiteral("configfile"), QCoreApplication::translate("main", "Use alternate configuration file."), QCoreApplication::translate("main", "Configuration file")); parser.addOption(configFileOption); parser.process(*this); const QString configFile = parser.value(configFileOption); if (configFile.isEmpty()) mSettings = new LxQt::Settings(QStringLiteral("panel"), this); else mSettings = new LxQt::Settings(configFile, QSettings::IniFormat, this); // This is a workaround for Qt 5 bug #40681. Q_FOREACH(QScreen* screen, screens()) { connect(screen, &QScreen::destroyed, this, &LxQtPanelApplication::screenDestroyed); }
ParsedInfo parse(const QStringList & argv) { QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument( "input-files", "list of files to open", "[input files]"); QCommandLineOption configFileOption( { "config", "cfg"}, "config file path", "configFilePath"); parser.addOption( configFileOption); QCommandLineOption htmlPathOption( "html", "development option for desktop version, path to html to load", "htmlPath" ); parser.addOption( htmlPathOption); QCommandLineOption scriptPortOption( "scriptPort", "port on which to listen for scripted commands", "scriptPort"); parser.addOption( scriptPortOption); // Process the actual command line arguments given by the user, exit if // command line arguments have a syntax error, or the user asks for -h or -v parser.process( argv); // try to get config file path from command line ParsedInfo info; info.m_configFilePath = parser.value( configFileOption); // if command line was not used to set the config file path, try environment var if( info.m_configFilePath.isEmpty()) { info.m_configFilePath = cartaGetEnv( "CONFIG"); } // if the config file was not specified neither through command line or environment // assign a default value if( info.m_configFilePath.isEmpty()) { info.m_configFilePath = QDir::homePath() + "/.cartavis/config.json"; } // get html path if( parser.isSet( htmlPathOption)) { info.m_htmlPath = parser.value( htmlPathOption); } // get script port if( parser.isSet( scriptPortOption)) { QString portString = parser.value( scriptPortOption); bool ok; info.m_scriptPort = portString.toInt( & ok); if( ! ok || info.m_scriptPort < 0 || info.m_scriptPort > 65535) { parser.showHelp( -1); } } qDebug() << "script port=" << info.scriptPort(); // get a list of files to open info.m_fileList = parser.positionalArguments(); qDebug() << "list of files to open:" << info.m_fileList; return info; }
int main(int argc, char *argv[]) { qRegisterMetaTypeStreamOperators<SQProfile>("SQProfile"); QApplication a(argc, argv); setupApplication(a); QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption configFileOption("c", "specify configuration file.", "config.ini"); parser.addOption(configFileOption); parser.process(a); QString configFile = parser.value(configFileOption); if (configFile.isEmpty()) { #ifdef Q_OS_WIN configFile = a.applicationDirPath() + "/config.ini"; #else QDir configDir = QDir::homePath() + "/.config/shadowsocks-qt5"; configFile = configDir.absolutePath() + "/config.ini"; if (!configDir.exists()) { configDir.mkpath(configDir.absolutePath()); } #endif } ConfigHelper conf(configFile); MainWindow w(&conf); mainWindow = &w; if (conf.isOnlyOneInstance() && w.isInstanceRunning()) { return -1; } w.startAutoStartConnections(); if (!conf.isHideWindowOnStartup()) { w.show(); } return a.exec(); }