Приложение Qt с дополнительным графическим интерфейсом

Я собираюсь написать программу, использующую Qt для обработки изображений, и хочу, чтобы она могла работать в режиме без графического интерфейса (в режиме демона?). Я вдохновлен проигрывателем VLC, который является «типично» программой с графическим интерфейсом, где вы можете настроить его с помощью графического интерфейса, но вы также можете запустить его в non-gui вариант, когда он работает без графического интерфейса. Затем он использует файл конфигурации, созданный в режиме графического интерфейса.

Вопрос в том, каким должен быть такой дизайн программы? Должно ли быть какое-то ядро ​​программы, которое не зависит от графического интерфейса и в зависимости от параметров подключается к интерфейсу GUI?

6

Решение

Да, вы можете использовать опцию «без головы» или «GUI» для двоичного файла, используя QCommandLineParser. Обратите внимание, что он доступен только в версии 5.3, но путь миграции в основной серии достаточно плавный, если вы все еще не используете его.

main.cpp

#include <QApplication>
#include <QLabel>
#include <QDebug>
#include <QCommandLineParser>
#include <QCommandLineOption>

int main(int argc, char **argv)
{
QApplication application(argc, argv);
QCommandLineParser parser;
parser.setApplicationDescription("My program");
parser.addHelpOption();
parser.addVersionOption();

// A boolean option for running it via GUI (--gui)
QCommandLineOption guiOption(QStringList() << "gui", "Running it via GUI.");
parser.addOption(guiOption);

// Process the actual command line arguments given by the user
parser.process(application);
QLabel label("Runninig in GUI mode");
if (parser.isSet(guiOption))
label.show();
else
qDebug() << "Running in headless mode";

return application.exec();
}

main.pro

TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp

Построить и запустить

qmake && make && ./main
qmake && make && ./main --gui

использование

    Usage: ./main [options]
My program

Options:
-h, --help     Displays this help.
-v, --version  Displays version information.
--gui          Running it via GUI.
9

Другие решения

Вы можете передать аргумент своему приложению, когда начинаете показывать в графическом или не графическом режимах. Например, если вы передаете параметр -non-gui при запуске в командной строке, то приложение не должно показывать главное окно и должно выполнять другие действия:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

MainWindow w;

bool GUIMode=true;

int num = qApp->argc() ;
for ( int i = 0; i < num; i++ )
{
QString s = qApp->argv()[i] ;
if ( s.startsWith( "-non-gui" ) )
GUIMode = false;
}

if(GUIMode)
{
w.show();
}
else
{
//start some non gui functions
}

return a.exec();
}
3

По вопросам рекламы [email protected]