Russian Qt Forum
Ноябрь 23, 2024, 17:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как получить доступ к переменной с другой формы  (Прочитано 10166 раз)
oleksiy22
Гость
« : Май 22, 2011, 11:19 »

 Есть приложение в которой 2 формы: MainWindow, Dialog !В modules  есть переменная int a...
как мне с modules получить значение переменной с MainWindow?

Есть такой способ.. но он мне не оч нравитсо... может другие есть варианты?
помню в с++ Buildere можна было получить доступ к переменной не создавай ее екземляра к примеру MainWindow::a.... но в Qt оно ругаетсо на такое...

modules::modules(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::modules)
{
MainWindow w;
int b=w.a;
    ui->setupUi(this);
}
Записан
Etud
Гость
« Ответ #1 : Май 22, 2011, 11:25 »

У Вас главное окно вызывается в диалоге ?

Может должно быть наоброт !
Записан
oleksiy22
Гость
« Ответ #2 : Май 22, 2011, 11:35 »

что я имею введу..
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec *codec_ukr = QTextCodec::codecForName("CP1251");
    a.setApplicationName(codec_ukr->toUnicode("АСУ <name>"));
    a.setApplicationVersion("1.0.0");
    a.setWindowIcon(QIcon("1.ico"));
    MainWindow w;
    w.setWindowIcon(QIcon("1.ico"));
    w.setMinimumSize(1024,768);
    w.setWindowFlags(Qt::CustomizeWindowHint);
    w.setWindowState(Qt::WindowMaximized);
    w.setWindowTitle(codec_ukr->toUnicode("АСУ <name>"));
    w.show();
    return a.exec();
}

теперь про саму форму MainWindow.. у нее оч много переменныхх и функц...

connect(setting_action,SIGNAL(triggered()),this,SLOT(load_modules));
Код:
void MainWindow::load_modules()
{
    modules *module_form=new modules(this);
    module_form->setModal(true);
    module_form->setWindowIcon(QIcon("1.ico"));
    module_form->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
    //QPushButton *button = module_form->findChild<QPushButton *>("cmd_add");
    //button->setEnabled(true);
    QRect rect;
    rect.setWidth(MainWindow::width()-10);
    rect.setHeight(MainWindow::height()-20);
    rect.setTop(75);
    rect.setLeft(10);
    module_form->setGeometry(rect);
    module_form->setFixedSize(rect.width(),rect.height());
    module_form->exec();
   
}

а вот теперь тут самое главное в modules.cpp
Код:
modules::modules(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::modules)
{
    ui->setupUi(this);
вот именно отсюда я хочу получить доступ к MainWindow и получить значение переменной а..

}
Записан
oleksiy22
Гость
« Ответ #3 : Май 22, 2011, 11:39 »

У Вас главное окно вызывается в диалоге ?

Может должно быть наоброт !
вот modules и есть диалоговое окно которое вызиваетсо с MainWindow
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Май 22, 2011, 11:43 »

если хочется именно так (MainWindow w; int b=w.a;), тогда уж приводи parent к типу MainWindow и из него выдёргивай значение.

а вообще нужную переменную MainWindow можно просто в конструктор modules подсунуть. или в modules создать метод типа setMyVariable(int a).

можно получить доступ к переменной, не создавая экземпляра класса, объявив её статической
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
oleksiy22
Гость
« Ответ #5 : Май 22, 2011, 11:46 »

если хочется именно так (MainWindow w; int b=w.a;), тогда уж приводи parent к типу MainWindow и из него выдёргивай значение.

а вообще нужную переменную MainWindow можно просто в конструктор modules подсунуть. или в modules создать метод типа setMyVariable(int a).

можно получить доступ к переменной, не создавая экземпляра класса, объявив её статической
к примеру как.. а то что то тяжело понять как ето в Qt Сделать.. прост еще новичек
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Май 22, 2011, 11:55 »

похоже, что ты новичок в С++
Код
C++ (Qt)
modules::modules(QWidget *parent, int a) :
   QDialog(parent),
   ui(new Ui::modules),
{
   ui->setupUi(this);
   int b = a;
}
Код
C++ (Qt)
class MainWindow
{
   ...
private:
   int _someVariable;
   ...
};
 
void MainWindow::load_modules()
{
   modules *module_form=new modules(this, _someVariable);
   ...
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
danquimby
Гость
« Ответ #7 : Май 22, 2011, 12:02 »

можно не много по другому сделать , если тебе не 1 переменная нужна а все mainwindow

Код:
modules::modules(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::modules)
{
   QMainWindow*    win;
    ui->setupUi(this);
вот именно отсюда я хочу получить доступ к MainWindow и получить значение переменной а..

 win = (QMainWindow*) parent;
// далее все публичные переменные к твоему вниманию.
}
А если по безопасности и инкапсуляции незя такое , то не переменную передавай а struct

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Май 22, 2011, 12:10 »

а почему не qobject_cast?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
oleksiy22
Гость
« Ответ #9 : Май 22, 2011, 12:24 »

спасибо всем.. придетсо опять сидеть за книгами и с++ повторять Смеющийся
Записан
danquimby
Гость
« Ответ #10 : Май 22, 2011, 14:01 »

а почему не qobject_cast?
А ты знаешь отличие ? просто qobject_cast дает способ понять , что там не то к чему
мы хотим приравнять .
А так можно и через него сделать.Человек и так плохо С++ знает а ты его еще
это хошь погрузить.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Май 22, 2011, 14:05 »

имхо напрямую приводить базовый класс к классу-наследнику как-то... нехорошо
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.298 секунд. Запросов: 23.