Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Получение аргументов в GUI приложении

Автор: RazrFalcon 5.5.2011, 14:26

Как в консольном получить - ясно.
А вот как, тоже самое, сделать в обычном Qt GUI проекте?

main.cpp

#include <QtGui/QApplication>
#include "mygui.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  MainWindow w;
  qDebug()<<a.arguments();
  w.args.append(a.arguments());
  w.show();

  return a.exec();
}
Все выводится нормально.

Вопрос: как получить arguments в mainwindow.cpp? Как их соединить?

Пробовал так:
MainWindow *w = new MainWindow(this,a.arguments());
Но мне сразу выдает:
error: invalid use of ‘this’ in non-member function

Автор: Sergey B. 5.5.2011, 15:09

В MainWindow - сделать public функцию, которая получает то - что выдаёт a.arguments()
и сохраняет это в каком-то контейнере у себя в присат секции, тогда:

QApplication a(argc, argv);
MainWindow w;
w.получить_аргументы(a.arguments() );
w.show();

и далее по тексту...

Автор: wiz29 5.5.2011, 16:19

QCoreApplication::arguments();

Автор: RazrFalcon 5.5.2011, 22:00

Создавал public QString, и в него передавал как писал Sergey B., но возвращало пустоту...
wiz29, спасибо! Работает. Я знал, что есть способ по проще.

Автор: Litkevich Yuriy 6.5.2011, 7:00

Цитата(RazrFalcon @ 5.5.2011, 17:26) *
Пробовал так:
MainWindow *w = new MainWindow(this,a.arguments());
А что такое this в данном контексте?

Автор: RazrFalcon 6.5.2011, 7:28

Цитата(Litkevich Yuriy @ 6.5.2011, 7:00) *
Цитата(RazrFalcon @ 5.5.2011, 17:26) *
Пробовал так:
MainWindow *w = new MainWindow(this,a.arguments());
А что такое this в данном контексте?

Без понятия, я с этим так и не разобрался.
Просто менял
MainWindow(QWidget *parent = 0);
на
MainWindow(QWidget *parent = 0, const QString &);
Что бы через него передавать аргументы.
*где в инете нашел. В этом я не силен...

Автор: Алексей1153 6.5.2011, 19:26

RazrFalcon, this в данном случае не определён, так как main не является нестатической функцией-членом некоего класса/структуры

кроме того, в конструктор MainWindow тебе нужно передать указатель на объект, произведённый от QWidget. Если такого объекта нет, то передавай 0

Автор: RazrFalcon 6.5.2011, 19:34

Это как? Можно пример?

Автор: Алексей1153 6.5.2011, 19:44

пример чего ?

А по сабжу - просто передай через конструктор главного окна аргументы int argc, char *argv[] и дальше разбирай их как обычно

Автор: RazrFalcon 6.5.2011, 19:52

Мне нужен пример(маленький) кода, чтобы понять как это работает.

Автор: Rocky 6.5.2011, 19:58

Уже вроде как обсуждался разбор аргументов с пару месяцев назад.. Точно помню)) А вообще есть мега-тулза - getopts - разберет на ура, и париться не нужно. Можешь посмотреть ее исходники, они открыты.

Автор: RazrFalcon 7.5.2011, 7:36

Да нет же!
Распарсить аргументы - не проблема.
Я не пойму как из передать в другой класс, по сути.

Вот пример, который я находил:
main.cpp

int main(int argc, char **argv[])
{
...
QApplication app(argc, argv);
MainWindow *mainWin = new MainWindow(app.arguments());
...
}

mainwindow.cpp
MainWindow::MainWindow(const QStringList &args)
{
...
}

mainwidow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(const QStringList &);
...
}

Но у меня так не вышло, так как изначально:
MainWindow(QWidget *parent = 0);
Нужно добавить, я так понимаю const QStringList &args), но тогда оно ругается на this. О чем я писал выше.

Автор: Litkevich Yuriy 7.5.2011, 13:23

"Что такое this?" обсуждаем http://www.forum.crossplatform.ru/index.php?showtopic=6917

Цитата(RazrFalcon @ 7.5.2011, 10:36) *
Я не пойму как из передать в другой класс, по сути.
в качестве аргумента функции (например, конструктора класса)

Автор: RazrFalcon 7.5.2011, 14:08

Цитата(Litkevich Yuriy @ 7.5.2011, 13:23) *
в качестве аргумента функции (например, конструктора класса)

Так как это будет выглядеть?
То что я выше написал - не работает.

Автор: Rocky 7.5.2011, 14:43

Стандартный конструктор класса-наследника от QMainWindow

MyClass(QWidget *pParent = 0, Qt::WFlags flags = 0);

Что мешает сделать его таким:
MyClass(QStringList sArgs, QWidget *pParent = 0, Qt::WFlags flags = 0);

И создавать класс так
MyClass obj(app.arguments());
obj....

???

Автор: RazrFalcon 7.5.2011, 15:12

Сделал по аналогии:
mainwindow.h

public:
  MainWindow(QStringList args,QWidget *parent = 0);
mainwindow.cpp
MainWindow::MainWindow(QStringList args, QWidget *parent) :
  QMainWindow(parent)
{
  setupUi(this);
  qDebug()<<"my"<<args;
  ...
}
main.cpp
MainWindow w(a.arguments());

Работает!!! :lol:

Цитата
Что мешает сделать его таким
незнание ;)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)