Простенький проект в 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"... ?
глобальная переменная в QT3 (не могу передать значение в форму из main())
Модератор: Модераторы разделов
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: глобальная переменная в QT3
можно объявить way до включения form1.h:
еще ее можно обявить в файле 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
включаю в main.cpp перед #include"form1.h" - без толку. Та же ошибка "form1.ui.h:25: ошибка: нет декларации ‘way’ в этой области видимости"
убираю ее из main.cpp, добавляю в formai.ui.h перед Init(), сразу после #include
Результат почти тот же
main.cpp:15: ошибка: нет декларации ‘way’ в этой области видимости
Еще идеи есть? У меня уже все иссякли. Я уж в обоих файлах даже пытался ее объявить-ругается, что multiple declaration (ну, в принципе, этого и стоило ожидать)
убираю ее из main.cpp, добавляю в formai.ui.h перед Init(), сразу после #include
Результат почти тот же
main.cpp:15: ошибка: нет декларации ‘way’ в этой области видимости
Еще идеи есть? У меня уже все иссякли. Я уж в обоих файлах даже пытался ее объявить-ругается, что multiple declaration (ну, в принципе, этого и стоило ожидать)
-
Zeus
- Сообщения: 694
Re: глобальная переменная в QT3
А если с опцией "-E" откомпилить, посмотреть вывод препроцессора?
-
mokynis
- Сообщения: 48
- ОС: KUbuntu 7.10
Re: глобальная переменная в QT3
с глобальной переменной разобрался:
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()
Как ее теперь заставить сработать при запуске формы?
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
Все, тему можно закрыть. Вся проблема в моей повышенной лопоухости: я функцию init() написал с большой буквы. После исправление все заработало. Спасибо всем.