Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何删除对象之间的变量共享?_C++_Qt_Class_Oop_Sharing - Fatal编程技术网

C++ 如何删除对象之间的变量共享?

C++ 如何删除对象之间的变量共享?,c++,qt,class,oop,sharing,C++,Qt,Class,Oop,Sharing,嗨,我是面向对象编程新手。这里我打算制作三个动画情节 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->set

嗨,我是面向对象编程新手。这里我打算制作三个动画情节

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
值,即当创建第三个
子窗口时
child\u movie0
child\u movie1
这两个
setplot
值变为
2
;如何摆脱这个。。。下面是类中的set value函数

#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);

    }
}
#包括“subwindow_movie.h”
#包括“ui_子窗口_movie.h”
#包括“plot.h”
#包括
#包括
国际电影;
子窗口电影::子窗口电影(QWidget*父窗口):
QDialog(父级),
ui(新ui::子窗口\电影)
{
用户界面->设置用户界面(此);
}
子窗口电影::~子窗口电影()
{
删除用户界面;
}
void子窗口_movie::setplot(int值)
{
如果(值==0)
{d_plot0=新绘图(此);
电影=0;}
else if(值==1)
{d_plot1=新绘图(此);
电影=1;}
else if(值==2)
{d_plot2=新绘图(此);
电影=2;}
}
无效子窗口\u movie::在\u movie\u滑块上\u值已更改(int值)
{
如果(电影==0)
{d_plot0->setAlpha(值);
}
else if(电影==1)
{d_plot1->setAlpha(值);
}
else if(电影==2)
{d_plot2->setAlpha(值);
}
}
真正的问题是
int movie
,它随着新
child_movie
的创建而改变,导致
child_movie0
运行
movie2
。我不希望
movie
变量随
child\u movie 1的创建而更改
child\u movie 0

int电影

movie
变量只有一个实例(它是一个全局变量)。每次设置其值时,都会覆盖上一个值

电影
改为成员变量

class subwindow_movie {
    int movie;

public:

    ...
}
然后,
movie
作为您正在创建的每个
子窗口\u movie
对象的单独实例可用。在
子窗口\u movie
方法中,仍然可以像以前一样访问变量


基本上,您不应该使用全局变量-另请参见:为什么全局变量是邪恶的

尝试了您的建议,但电影价值仍然随着新的child\u电影声明而改变(@user3871970 Good:)你还有什么特别需要做的吗?我可以在我的答案中添加什么?没有,我一开始忽略了其他一些g_变量。