2012-08-24 2 views
0

코드에서 일부 문제가 발생합니다. 분수를 넣으려고하면 코드가 해당 부분을 무시하고 존재하지 않는 것처럼 행동합니다. 여기에 내 코드 예제를 몇 가지 넣을 것이다. 내 vtkBMPReader에서슬라이더의 분수 문제 대부분

예를 들어

:

vtkBMPReader *bmp= vtkBMPReader::New(); 
    bmp->SetDataByteOrderToLittleEndian(); 
    bmp->SetFilePrefix ("/home/matt/Desktop/ouBMP/exemplo"); 
    bmp->SetFilePattern("%s%d.bmp"); 
    bmp->SetFileNameSliceSpacing(1); 
    bmp->SetNumberOfScalarComponents(3); 
    bmp->SetDataOrigin(0,0,0); 
    bmp->SetDataSpacing(0.011741683,0.005865103,0.047244094);//here it should be (6/511,6/1023,6/127) 
    bmp->SetDataExtent(0,511,0,1023,1,128); 
    bmp->Update(); 

여기 :

// Function to transform the slider scale from pixel to mm 
void planevolume::mm() 
{ 
    // Set the sliders ranges and connections 
    // X Slider 
     double xvalue=ui->lcdNumber->value(); 
     ui->Slider->setValue(xvalue/(256/3));//here it does not work 
     ui->Slider->setRange(xmin, xmax/(512/6), 1.0/(512/6)); 
     ui->Slider->setScale(xmin, (xmax+1)/(256/3), ((xmax+1)/16)/(256/3));//the last member does not work 
     connect(ui->Slider, SIGNAL(valueChanged(double)), ui->lcdNumber, SLOT(display(double))); 

    // Y Slider 
     double yvalue=ui->lcdNumber_2->value(); 
     ui->Slider_2->setValue(yvalue/(512));//as here 
     ui->Slider_2->setRange(ymin, ymax/(1023/2), 1.0/(1023/2)); 
     ui->Slider_2->setScale(ymin, (ymax+1)/512, (((ymax+1)/16)/512));//as here 
     connect(ui->Slider_2, SIGNAL(valueChanged(double)), ui->lcdNumber_2, SLOT(display(double))); 

    // Z Slider 
     double zvalue=ui->lcdNumber_3->value(); 
     ui->Slider_3->setValue(zvalue/(64/3));//as here 
     ui->Slider_3->setRange(zmin, zmax/(127/6), 1.0/(127/6)); 
     ui->Slider_3->setScale(zmin, (zmax+1)/(64/3),(((zmax+1)/16)/(64/3)));//as here 
     connect(ui->Slider_3, SIGNAL(valueChanged(double)), ui->lcdNumber_3, SLOT(display(double))); 
} 

비슷하지만이 하나, 그것은 작동합니까

!

// Function to transform the slider scale from mm to pixel 
void planevolume::pixel() 
{ 
// Set the sliders ranges and connections 
// X Slider 
    double xvalue=ui->lcdNumber->value(); 
    ui->Slider->setValue(xvalue*(256/3));//here it works!! 
    ui->Slider->setRange(xmin, xmax, 1.0); 
    ui->Slider->setScale(xmin, xmax+1, (xmax+1)/16); 
    connect(ui->Slider, SIGNAL(valueChanged(double)), ui->lcdNumber, SLOT(display(double))); 

// Y Slider 
    double yvalue=ui->lcdNumber_2->value(); 
    ui->Slider_2->setValue(yvalue*512);//here it works!! 
    ui->Slider_2->setRange(ymin, ymax, 1.0); 
    ui->Slider_2->setScale(ymin, ymax+1, (ymax+1)/16); 
    connect(ui->Slider_2, SIGNAL(valueChanged(double)), ui->lcdNumber_2, SLOT(display(double))); 

// Z Slider 
    double zvalue=ui->lcdNumber_3->value(); 
    ui->Slider_3->setValue(zvalue*(64/3));//here it works!! 
    ui->Slider_3->setRange(zmin, zmax, 1.0); 
    ui->Slider_3->setScale(zmin, zmax+1, (zmax+1)/16); 
    connect(ui->Slider_3, SIGNAL(valueChanged(double)), ui->lcdNumber_3, SLOT(display(double))); 

}

사람이 무엇을 알고 있다면 난 날이에 도움을 주시기 바랍니다 할 수 있습니다.

+0

이전에 long double으로 정의하고이를 단순화 할 수 있습니까? 이것이 해결책일까요? – SamuelNLP

답변

0

모든 숫자에 .0을 추가하면됩니다.