Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: oleksiy22 от Май 22, 2011, 11:19



Название: как получить доступ к переменной с другой формы
Отправлено: 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);
}


Название: Re: как получить доступ к переменной с другой формы
Отправлено: Etud от Май 22, 2011, 11:25
У Вас главное окно вызывается в диалоге ?

Может должно быть наоброт !


Название: Re: как получить доступ к переменной с другой формы
Отправлено: oleksiy22 от Май 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 и получить значение переменной а..

}


Название: Re: как получить доступ к переменной с другой формы
Отправлено: oleksiy22 от Май 22, 2011, 11:39
У Вас главное окно вызывается в диалоге ?

Может должно быть наоброт !
вот modules и есть диалоговое окно которое вызиваетсо с MainWindow


Название: Re: как получить доступ к переменной с другой формы
Отправлено: kambala от Май 22, 2011, 11:43
если хочется именно так (MainWindow w; int b=w.a;), тогда уж приводи parent к типу MainWindow и из него выдёргивай значение.

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

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


Название: Re: как получить доступ к переменной с другой формы
Отправлено: oleksiy22 от Май 22, 2011, 11:46
если хочется именно так (MainWindow w; int b=w.a;), тогда уж приводи parent к типу MainWindow и из него выдёргивай значение.

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

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


Название: Re: как получить доступ к переменной с другой формы
Отправлено: kambala от Май 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);
   ...
}


Название: Re: как получить доступ к переменной с другой формы
Отправлено: danquimby от Май 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



Название: Re: как получить доступ к переменной с другой формы
Отправлено: kambala от Май 22, 2011, 12:10
а почему не qobject_cast?


Название: Re: как получить доступ к переменной с другой формы
Отправлено: oleksiy22 от Май 22, 2011, 12:24
спасибо всем.. придетсо опять сидеть за книгами и с++ повторять ;D


Название: Re: как получить доступ к переменной с другой формы
Отправлено: danquimby от Май 22, 2011, 14:01
а почему не qobject_cast?
А ты знаешь отличие ? просто qobject_cast дает способ понять , что там не то к чему
мы хотим приравнять .
А так можно и через него сделать.Человек и так плохо С++ знает а ты его еще
это хошь погрузить.


Название: Re: как получить доступ к переменной с другой формы
Отправлено: kambala от Май 22, 2011, 14:05
имхо напрямую приводить базовый класс к классу-наследнику как-то... нехорошо