глобальная переменная в QT3 (не могу передать значение в форму из main())

Модератор: Модераторы разделов

mokynis
Сообщения: 48
ОС: KUbuntu 7.10

глобальная переменная в QT3

Сообщение mokynis »

Простенький проект в QT3:
main.cpp

#include <qapplication.h>
#include "form1.h"
char way[30];
int main( int argc, char ** argv )
{
strcpy(way,get_current_dir_name());
QApplication a( argc, argv );
Form1 w;
w.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}

form1.ui.h

#include <qstring.h>
void Form1::Init()
{
EFile->setText(QString::fromLocal8Bit( way);
}

при компиляции выдает
.ui/../form1.ui.h:25: ошибка: нет декларации ‘way’ в этой области видимости

Два вопроса:
1) как заставить форму "увидеть" глобальную переменную ?
2) будет ли вообще срабатывать Init(), если я в дизайнере нигде этот слот не объявлял (ну, как в QuickStart описывается-открыть "View and Edit connections"... ?
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: глобальная переменная в QT3

Сообщение RasenHerz »

можно объявить way до включения form1.h:

Код: Выделить всё

#include <qapplication.h>
char way[30];
#include "form1.h"
int main( int argc, char ** argv )
{
    strcpy(way,get_current_dir_name());
    QApplication a( argc, argv );
    Form1 w;
    w.show();
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
}

form1.ui.h

#include <qstring.h>
void Form1::Init()
{
    EFile->setText(QString::fromLocal8Bit( way);
}

еще ее можно обявить в файле form1.h
Спасибо сказали:
mokynis
Сообщения: 48
ОС: KUbuntu 7.10

Re: глобальная переменная в QT3

Сообщение mokynis »

включаю в main.cpp перед #include"form1.h" - без толку. Та же ошибка "form1.ui.h:25: ошибка: нет декларации ‘way’ в этой области видимости"
убираю ее из main.cpp, добавляю в formai.ui.h перед Init(), сразу после #include
Результат почти тот же
main.cpp:15: ошибка: нет декларации ‘way’ в этой области видимости

Еще идеи есть? У меня уже все иссякли. Я уж в обоих файлах даже пытался ее объявить-ругается, что multiple declaration (ну, в принципе, этого и стоило ожидать)
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: глобальная переменная в QT3

Сообщение Zeus »

А если с опцией "-E" откомпилить, посмотреть вывод препроцессора?
Спасибо сказали:
mokynis
Сообщения: 48
ОС: KUbuntu 7.10

Re: глобальная переменная в QT3

Сообщение mokynis »

с глобальной переменной разобрался:
main.cpp

#.....
extern QString way;
int main( int argc, char ** argv )
{
way=QString::fromLocal8Bit(argv[0]);
QApplication a( argc, argv );
Form1 w;
w.show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
return a.exec();
}

form1.ui.h

QString way;
void Form1::Init()
{
EFile->setText(way);
}

так все работает НО только, если на форму воткнуть кнопку и указать, что по click() на ней сработает Init().
А без этого форма, похоже игнорирует эту Init()
Как ее теперь заставить сработать при запуске формы?
Спасибо сказали:
mokynis
Сообщения: 48
ОС: KUbuntu 7.10

Re: глобальная переменная в QT3

Сообщение mokynis »

Все, тему можно закрыть. Вся проблема в моей повышенной лопоухости: я функцию init() написал с большой буквы. После исправление все заработало. Спасибо всем.
Спасибо сказали: