Seite 1 von 1

QWizard: Probleme mit "setNextEnabled()"

Verfasst: 22. November 2006 12:58
von theRiddler
Hallo!
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: 

Verfasst: 22. November 2006 17:19
von upsala
Ich kann kein connect zum Slot enableNext finden...

Btw. QWizard wird es ab QT4 nicht mehr geben...

Verfasst: 22. November 2006 18:39
von theRiddler
Sorry.. hab noch von einem Test den falschen SLOT angegeben gehabt
-> ist ausgebessert

;)