Форум программистов, компьютерный форум CyberForum.ru

Qt

Войти
Регистрация
Восстановить пароль
 
Niels Bohr
16 / 0 / 0
Регистрация: 25.12.2016
Сообщений: 10
#1

QCommandLineParser передача значений в виджет - C++ Qt

11.01.2017, 08:47. Просмотров 210. Ответов 3
Метки нет (Все метки)

Добрый день!

Заранее извиняюсь, если глупый вопрос, я в некотором роде новичок. Я использую QCommandLineParser для считывания параметров запуска приложения с коммандной строки. Все работает (спасибо шикарной доке), но лишь для консольного приложения. А как мне передать значения в экземпляр QWidget или QMainWindow? Число параметров у меня достаточно большое, и не все обязательные. Первое что на ум приходит - создать конструктор виджета с дефолтными значениями, но может быть существует еще какой-нибудь способ? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2017, 08:47     QCommandLineParser передача значений в виджет
Посмотрите здесь:
QCommandLineParser передача массива в приложение C++ Qt
Передача ссылки на функцию класса Виджет в другой класс C++ Qt
Передача значений переменным из lineedit C++ Qt
Передача значений из формы в форму C++ Qt
Передача значений переменных в Sql запрос C++ Qt
C++ Qt Qt виджет таблицы
Виджет на виджете C++ Qt
C++ Qt Виджет на виджете
C++ Qt Виджет календарь
Виджет дерева C++ Qt
Скрытый виджет C++ Qt

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wyn
Модератор
995 / 576 / 216
Регистрация: 14.01.2016
Сообщений: 1,902
Записей в блоге: 9
11.01.2017, 09:39     QCommandLineParser передача значений в виджет #2
Niels Bohr, насколько вас понял, если у вас много параметров, то лучше вынести их в отдельный класс/структуру. Там же можно прописать и значения параметров по умолчанию. И уже потом передавать такой объект в виджеты или куда вы там хотите.
Если некоторые изменяемые значения параметров могут между запусками сохранять своё изменённое значение, то смотрите в сторону QSettings.
Niels Bohr
16 / 0 / 0
Регистрация: 25.12.2016
Сообщений: 10
11.01.2017, 15:04  [ТС]     QCommandLineParser передача значений в виджет #3
Спасибо, но я поступил по другому: создал второй конструктор у виджета принимающий QStringList и в конструкторе виджета уже расположил QCommandLineParser.
Так как нигде в интернетах нет адекватного примера, привожу небольшой рабочий код, вдруг кому-то поможет:

widget.h:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QVBoxLayout>
#include <QString>
 
#include <QCommandLineParser>
#include <QCommandLineOption>
 
 
class Widget : public QWidget
{
    Q_OBJECT
 
private:
    QLabel *param1;
    QLabel *param2;
 
    QVBoxLayout *layout;
 
public:
    explicit Widget(QStringList, QWidget *parent = 0);
    ~Widget();
};
 
#endif // WIDGET_H


widget.cpp:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include "widget.h"
 
Widget::Widget(QStringList arguments, QWidget *parent) : QWidget(parent)
{
    param1 = new QLabel("Param 1: ");
    param2 = new QLabel("Param 2: ");
 
    layout = new QVBoxLayout();
 
    layout->addWidget(param1);
    layout->addWidget(param2);
    setLayout(layout);
 
 
    qDebug() << arguments;
 
    QCommandLineParser parser;
 
    QCommandLineOption optParam1("param1", "description on param1", "param1name", "default param1 name");
    QCommandLineOption optParam2("param2", "description on param2", "param2name", "default param2 name");
 
    parser.addOption(optParam1);
    parser.addOption(optParam2);
 
    parser.parse(arguments);
 
    param1->setText(param1->text() + parser.value(optParam1));
    param2->setText(param2->text() + parser.value(optParam2));
 
}
 
Widget::~Widget()
{
 
}


main.cpp:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w(a.arguments());
    w.show();
 
    return a.exec();
}
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
11.01.2017, 16:17     QCommandLineParser передача значений в виджет #4
есть такая штука как:
arguments в QCoreApplication, статический метод, который содержит в себе все аргументы, его вы можете вызвать откуда угодно из приложения, ну и следовательно, в конструкторе своего виджета
Yandex
Объявления
11.01.2017, 16:17     QCommandLineParser передача значений в виджет
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru