2014-09-08 7 views
0

Привет, я новичок в объектно-ориентированном программировании. Здесь я намерен сделать три анимационные сюжетыКак удалить обмен переменных между объектами?

subwindow_movie *child_Movie = new subwindow_movie; 
child_Movie->setGeometry(20,100,620,560); 
child_Movie->setplot(0); 
child_Movie->show(); 

subwindow_movie *child_Movie1 = new subwindow_movie; 
child_Movie1->setGeometry(680,100,620,560); 
child_Movie1->setplot(1); 
child_Movie1->show(); 


subwindow_movie *child_Movie2 = new subwindow_movie; 
child_Movie2->setGeometry(325,350,620,560); 
child_Movie2->setplot(2); 
child_Movie2->show(); 

, но проблема в том, что все они имеют такое же значение setplot, е, когда третий subwindow_movie создается child_movie0 и child_movie1 оба setplot значения становятся 2; как избавиться от этого ... ниже функция заданного значения внутри класса

#include "subwindow_movie.h" 
#include "ui_subwindow_movie.h" 

#include "plot.h" 

#include <qapplication.h> 

#include <qmainwindow.h> 

int movie; 

subwindow_movie::subwindow_movie(QWidget *parent) : 

    QDialog(parent), 

    ui(new Ui::subwindow_movie) 

{ 

    ui->setupUi(this); 

} 

subwindow_movie::~subwindow_movie() 
{ 
    delete ui; 
} 

void subwindow_movie::setplot(int value) 

{ 
    if (value ==0) 

    { d_plot0 = new Plot(this); 

     movie=0;} 

    else if (value ==1) 

    { d_plot1 = new Plot(this); 

     movie=1;} 

    else if (value ==2) 

    { d_plot2 = new Plot(this); 

     movie=2;} 

} 


void subwindow_movie::on_movie_slider_valueChanged(int value) 

{ 
    if (movie ==0) 

    { d_plot0->setAlpha(value); 

     } 
    else if (movie ==1) 

    { d_plot1->setAlpha(value); 

    } 
    else if (movie ==2) 

    { d_plot2->setAlpha(value); 

    } 
} 

реальная проблема int movie, которая меняется в с созданием нового child_movie вызывает child_movie0 запустить movie2. Я не хочу, чтобы переменная movie изменена для child_movie0 с созданием child_movie1.

ответ

2

С

int movie;

есть только один экземпляр переменной movie (это глобальная переменная). Каждый раз, когда вы устанавливаете его значение, предыдущее значение перезаписывается.

Сделать movie переменную член вместо:

class subwindow_movie { 
    int movie; 

public: 

    ... 
} 

Затем movie доступна в виде отдельного экземпляра для каждого subwindow_movie объекта, который вы создаете. Внутри методов subwindow_movie вы все равно можете получить доступ к переменной, как и раньше.

По сути, вы никогда не должны использовать глобальные переменные - см также http://www.learncpp.com/cpp-tutorial/42-global-variables: Почему глобальные переменные являются злыми

+0

пытался ваше предложение, но до сих пор ценность фильма меняется с новой декларацией child_movie .. :( – habbas33

+0

решаемые спасибо :) – habbas33

+0

@ user3871970 Хорошо :) Есть ли что-то конкретное, что вам дополнительно нужно делать, и что я могу добавить к моему ответу? –

Смежные вопросы