Seite 1 von 1

[gelöst] eigene Slots / dialog mit auto-connect

Verfasst: 6. Mai 2006 14:53
von theRiddler
Hi.

Ich weiss das Thema kommt öfters vor, aber ich habe in den Threads keine Lösung gefunden.
Ich habe einen Dialog mit dem Designer erstellt und dann eine entsprechende Klasse von QDialog abgeleitet.
(wie in http://qtforum.de/forum/viewtopic.php?t=1775 beschrieben)
Den Header für das ui file habe ich von uic generieren lassen.
Das alles lässt sich auch kompilieren, aber das auto-connect scheint nicht zu funktionieren... Weiß jemand wieso?

main.cpp

Code: Alles auswählen

#include <qapplication.h>
#include "dialog.h"

int main(int argc, char *argv[]){
	QApplication app(argc,argv);
	QDialog *window = new QDialog;
	GoToCellDialog mydialog;

	mydialog.show();
	return app.exec();
}
dialog.h

Code: Alles auswählen

#ifndef DIALOG_H
#define DIALOG_H

#include "gotocelldialog.h"

class GoToCellDialog : public QDialog, private Ui::GoToCellDialog{
	Q_OBJECT

public:
	GoToCellDialog(QWidget *parent = 0);
	~GoToCellDialog();

private slots:
	void on_okButton_clicked();
};

#endif
dialog.cpp

Code: Alles auswählen

#include "dialog.h"
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qvalidator.h>
#include <qmessagebox.h>

GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent)
{
	setupUi(this);
	QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
	lineEdit->setValidator(new QRegExpValidator(regExp,this));
	
}

GoToCellDialog::~GoToCellDialog(){
}

void GoToCellDialog::on_okButton_clicked(){
	//QMessageBox::information(this, tr("Testmeldung"), tr("Testbla"), QMessageBox::Cancel);
	okButton->setEnabled(lineEdit->hasAcceptableInput());
}
Im uic generierten Header muss man für das auto-connect nichts ändern, oder?

Vielen Dank

(QT4 Open Source)

Re: eigene Slots / dialog mit auto-connect

Verfasst: 7. Mai 2006 23:04
von patrik08
theRiddler hat geschrieben: Im uic generierten Header muss man für das auto-connect nichts ändern, oder?
(QT4 Open Source)
Es bring nicht sie zu aendern... wenn du das naechste mal
make & enter machst wird alles ueberschrieben...

die slots muss man im externe header e source deklarieren...
im header.....

es kommt beispiel code hat nicht mit deinem zu tun...

Code: Alles auswählen

public slots:
    void RepaintQuery();
    void PaintTable(QString tablename);
und im source...

Code: Alles auswählen

void GuiMain::RepaintQuery()
{
    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
    dumptofile("soquery.xml");
    textquery1->clear();
    textquery1->insertPlainText(file_get_contents("soquery.xml"));
    textquery1->toPlainText();
    QApplication::restoreOverrideCursor();  
}


den slot setzen....

connect(objektname, SIGNAL(currentIndexChanged(QString)), this , SLOT(PaintTable(QString)));

http://qt4.digitalfanatics.org/tiqt/chapter-3.html

der generierte header vom ui file hat seine eigene slots... die eventuel in deinem externen file ueberschrieben werden koennen....

getestet

Verfasst: 8. Mai 2006 10:51
von theRiddler
Danke... ich hab das ganze nochmals mit dem connect getestet, aber es funktioniert noch immer nicht, allerdings liegt es glaube ich an der Zeile

Code: Alles auswählen

//QMessageBox::information(this, tr("Testmeldung"), tr("Testbla"), QMessageBox::Cancel);
   okButton->setEnabled(lineEdit->hasAcceptableInput()); 
weil, wenn ich die MessageBox ausgeben will reagiert er auf den OKButton, aber dann hängt er beim ausführen.

vielleicht weiss wer, was an der Zeile falsch sein könnte (Ich habs auch schon so pobiert wie auf http://qt4.digitalfanatics.org/tiqt/chapter-3.html)


danke

Verfasst: 8. Mai 2006 12:30
von Adi
Also bei mir würde das grundsätzlich gehen.

Was aber falsch sein könnte ist, dass du okButton enablen willst wenn lineEdit gültig ist, diese aber im okButton prüfst der ja zur der Zeit desabled sein müsste.

Diese Überprüfung/Umschaltung müsste im signal von lineEdit sein, wie ich es bereits in der PN geschrieben habe.