QWizard: Probleme mit "setNextEnabled()"

Alles rund um die Programmierung mit Qt
Antworten
theRiddler
Beiträge: 13
Registriert: 6. Mai 2006 12:23
Kontaktdaten:

QWizard: Probleme mit "setNextEnabled()"

Beitrag 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: 
Zuletzt geändert von theRiddler am 22. November 2006 18:38, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich kann kein connect zum Slot enableNext finden...

Btw. QWizard wird es ab QT4 nicht mehr geben...
theRiddler
Beiträge: 13
Registriert: 6. Mai 2006 12:23
Kontaktdaten:

Beitrag von theRiddler »

Sorry.. hab noch von einem Test den falschen SLOT angegeben gehabt
-> ist ausgebessert

;)
Antworten