Ich habe meinen Wizard so gut wie fertig, nur gibt es ein Problem - das setNextEnabled() auf Page 2 (von 4) wird ignoriert.
Auf dieser Seite wird entschieden ob als nächstes Page3 oder Page4 angezeigt werden soll (RadioButtons).
Wenn ich die letzten beiden Seiten rausnehmen und den FinishButton disabled funktionierts und wenn ich in meinem SLOT "enableNext" eine setNextEnabled(page2, FALSE) eintrage, reagiert er auch.
Hat jemand eine Ahnung?
Danke!
(QT 3.3)
Code: Alles auswählen
Wizard::Wizard( QWidget *parent, const char *name )
: QWizard( parent, name, TRUE )
{
endMainView = true;
setupPage1();
setupPage2();
setupPage3();
setupPage4();
connect(finishButton(), SIGNAL(clicked()), this, SLOT(setFinishVars()));
connect(xSpacing, SIGNAL(textChanged(const QString & )), this, SLOT(checkSpacing()));
connect(ySpacing, SIGNAL(textChanged(const QString & )), this, SLOT(checkSpacing()));
connect(radio1, SIGNAL(clicked()), this, SLOT(enableNext()));
connect(radio2, SIGNAL(clicked()), this, SLOT(enableNext()));
connect(nextButton(), SIGNAL(clicked()), this, SLOT(nextPage()));
backButton()->hide();
nextButton()->show();
}
void Wizard::setupPage1()
{
page1 = new QHBox( this );
page1->setSpacing(8);
QLabel *info = new QLabel( page1 );
info->setText( "Welcome to the OpenSG inVRs Editor!\n\nMake sure you have the 'generalConfig.xml' with all the right paths in the same directory as the executable.\n" );
info->setIndent( 8 );
info->setMaximumWidth( info->sizeHint().width() );
info->setMaximumHeight( info->sizeHint().height() );
QVBox *page = new QVBox( page1 );
QHBox *row1 = new QHBox( page );
addPage( page1, "OpenSG - Editor" );
setNextEnabled( page1, TRUE);
// setFinishEnabled( page1, FALSE);
setHelpEnabled( page1, FALSE );
}
void Wizard::setupPage2(){
page2 = new QHBox( this );
page2->setSpacing(8);
QLabel *info = new QLabel( page2 );
info->setText( "Do you want to create a new virtual world or load an existing one?\n");
info->setIndent(8);
info->setMaximumWidth( info->sizeHint().width() );
QVBox *page = new QVBox( page2 );
QHBox *row1 = new QVBox( page );
QHBox *row2 = new QVBox( page );
bg = new QButtonGroup(0);
radio1 = new QRadioButton("new", row1);
radio2 = new QRadioButton("load World", row2);
bg->insert(radio1);
bg->insert(radio2);
addPage( page2, "Choose..." );
setNextEnabled(page2, FALSE); //=> wird nicht angenommen
setFinishEnabled( page2, FALSE);
setHelpEnabled( page2, FALSE );
}
void Wizard::setupPage3()
{
page3 = new QHBox( this );
page3->setSpacing(8);
QLabel *info = new QLabel( page3 );
info->setText( "Please set the tile-spacing.");
info->setIndent(8);
info->setMaximumWidth( info->sizeHint().width() );
QVBox *page = new QVBox( page3 );
QHBox *row1 = new QHBox( page );
QHBox *row2 = new QHBox( page );
QLabel *label1 = new QLabel( " xSpacing: ", row1 );
label1->setAlignment( Qt::AlignVCenter );
QLabel *label2 = new QLabel( " ySpacing: ", row2 );
label2->setAlignment( Qt::AlignVCenter );
label1->setMinimumWidth( label1->sizeHint().width() );
label2->setMinimumWidth( label1->sizeHint().width() );
xSpacing = new QLineEdit("10", row1);
ySpacing = new QLineEdit("10", row2);
QValidator* validator1 = new QIntValidator( 1, 999, row1 );
QValidator* validator2 = new QIntValidator( 1, 999, row2 );
std::cout<<"test"<<std::endl;
xSpacing->setValidator( validator1 );
ySpacing->setValidator( validator2 );
addPage( page3, "Create a new virtual world..." );
setFinishEnabled(page3, TRUE);
setHelpEnabled( page3, FALSE );
}
void Wizard::setupPage4()
{
page4 = new QHBox( this );
page4->setSpacing(8);
QLabel *info = new QLabel( page4 );
info->setText( "Please select the xml File: ");
info->setIndent(8);
info->setMaximumWidth( info->sizeHint().width() );
QVBox *page = new QVBox( page4 );
QHBox *row1 = new QHBox( page );
QLabel *label1 = new QLabel( " File: ", row1 );
label1->setAlignment( Qt::AlignVCenter );
label1->setMinimumWidth( label1->sizeHint().width() );
fileName = new QLineEdit( row1 );
fileName->setReadOnly(TRUE);
browButton = new QPushButton (row1, "browseButton");
browButton->setText(tr("browse"));
connect( browButton, SIGNAL( clicked()), this, SLOT( getPath() ));
addPage( page4, "Load an existing virtual world..." );
setFinishEnabled(page4, FALSE);
setHelpEnabled( page4, FALSE );
}
void Wizard::getPath(){
QString s = QFileDialog::getOpenFileName("/home/theRiddler/inVRs_export/code/Tutorials/Track","XML-Files (*.xml)", this, "getfileName", "Choose a file..");
fileName->setText(s);
if (fileName->text() != "")
setFinishEnabled(page4, TRUE);
else
setFinishEnabled(page4, FALSE);
}
void Wizard::setFinishVars(){
std::cout<<"setFinishVars"<<std::endl;
std::cout<<"wizard intern newScene"<<newScene<<std::endl;
endMainView = false;
WorldDatabase::init();
Configuration::loadConfig("generalConfig.xml"); // loads the general configuration
Configuration::printConfig(); // debug output for the configuration
WorldDatabase::loadEntities(Configuration::getPath("EntityConfiguration")+"09entities.xml");
WorldDatabase::loadTiles(Configuration::getPath("TileConfiguration")+"09tiles.xml");
(*(WorldDatabase::getTileList()))[1]->dump();
if (radio1->isChecked()){
std::cout<<"NEW WORLDDATABASE XSPACING: "<<xSpacing->text()<<std::endl;
WorldDatabase::setXYSpacing(xSpacing->text().toInt(), ySpacing->text().toInt());
std::cout<<"NEW WORLDDATABASE XSPACING: "<<WorldDatabase::getXSpacing()<<std::endl;
}
if (radio2->isChecked()){
std::cout<<"loadEnvironmentLayout "<<std::endl;
WorldDatabase::loadEnvironmentLayout(fileName->text());
}
}
bool Wizard::getEndMainView(){
return endMainView;
}
bool Wizard::getNewScene(){
return newScene;
}
void Wizard::nextPage(){
std::cout<<"nextPage"<<std::endl;
if (radio1->isChecked()){
std::cout<<"new "<<std::endl;
newScene = TRUE;
nextButton()->hide();
removePage(page4);
}
else if (radio2->isChecked()){
std::cout<<"load "<<std::endl;
newScene = FALSE;
showPage(page4);
}
}
void Wizard::enableNext(){
std::cout<<"enable Next"<<std::endl;
setNextEnabled(page2, TRUE);
}
void Wizard::checkSpacing(){
bool enable;
int pos = 0;
QIntValidator v( 1, 999, this );
QString x = xSpacing->text();
QString y = ySpacing->text();
if ((v.validate(x, pos) == QValidator::Acceptable)&&(v.validate(y, pos) == QValidator::Acceptable))
enable = TRUE;
else
enable = FALSE;
std::cout<<"checkSpacing enable: "<<enable<<std::endl;
setFinishEnabled(page3, enable);
} :roll: