嗨,我是面向对象编程的新手。在这里我打算制作三个动画图
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
i的相同值成为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
的{{1}}变量更改为child_movie0
。
答案 0 :(得分: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:为什么全局变量是邪恶的