Seite 1 von 1

Problem mit QWidget hide (Qt 4.3)

Verfasst: 25. September 2007 12:14
von salzd
Erstmal ein kurzer Hallo

Habe folgendes Problem:
Ein von QWidget abgeleitetes Fenster soll einfach via hide() verschwinden und anschliessend mit show() wieder dargestellt werden. Das ganze hat auch prima funktioniert (unter Qt3.x). Seit dem wechsel zu Qt 4 funzt das ganze nicht mehr :-(. Das Fenster wird zwar anfänglich korrekt dargestellt und alles funktioniert wie gewollt. Jedoch nach dem ersten Aufruf von hide() ist das Fenster wie verschwunden.
Ich krieges es schlicht nicht mehr sichtbar!!

Habe es versucht mit show(), update(), repaint(), QCoreApplication::processEvents(), ..... alles ohne erfolg.

Wenn ich die Funktion isVisible() aufrufe erhalte ich ein true obschon das Fenster weder sichtbar noch die zugehörige paintEvent() Methode aufgerufen wird. Letzteres geschieht nicht einmal beim Aufruf von repaint()...

Hoffe jemand kann mir helfen


Konstruktor:

Code: Alles auswählen

QImageDialog::QImageDialog(QWidget* pParent, const char *cName)
	: qImageDialogForm(pParent, cName){
	m_pImage = NULL;
	this->setMinimumSize(200, 100);
	this->setBaseSize(1000, 600);
	//this->setModal(false);
	m_nImagePosX = 0;
	m_nImagePosY = 0;
	m_dZoom = 1;
	m_lbImageList->clear();
}

Aufgerufen wird hide() beim gewollten Schliessen des Fensters (habe jedoch hide auch schon via button aufgerufen mit demselben ergebnis :-()
Das QCloseEvent wird mit Absicht ignoriert um zu vermeiden, dass das Fenster zerstört wird.

Code: Alles auswählen

void QImageDialog::closeEvent(QCloseEvent *event)
{
	event->ignore();
	printf("closeEvent\n");
	hide();
}

Die Methode in welcher show() aufgerufen wird:

Code: Alles auswählen

void QImageDialog::addImage(const QImage& image){

	QImage *img;
	img = new QImage( image );
	// make this the current image 
	m_pImage = img;

	printf("adding image...\n");
	
	// If this is the first image to reach this dialog, adjust the zoom factor
	// and the dialog's size so that everything is looking fine.
	if (true)// m_lImages.isEmpty() )
	{
             ...
	}

	// Paint new image
	printf("updating...");
	this->show();
	this->repaint();
	printf("updated\n");
	printf("isVisible :%i\n", this->isVisible());
	printf("enabled   :%i\n", this->isEnabled());
	
	// Add the image to the list
	m_lImages.append(img);
	int i = m_lImages.find(img);
	img->setText("vqkk", NULL, QString("Image %1").arg(i, 0, 10));
	m_lbImageList->insertItem(img->text("vqkk", NULL), i); 

}

Verfasst: 25. September 2007 12:28
von CaptnChaos
hast du's mal mit setVisible();
und sonst machs mit close() anstatt hide().
und lass auf jeden fall das event->ignore im closeEvent weg!

Verfasst: 25. September 2007 12:42
von macman
KernelPanic hat geschrieben:hast du's mal mit setVisible();
und sonst machs mit close() anstatt hide().
und lass auf jeden fall das event->ignore im closeEvent weg!
Liest Du eigentlich auch die Postings auf die Du antwortest? Es kann durch aus sinnvoll sein ein Fenster nicht zu schliessen, sondern nur zu verstecken.

@salzd: Lass dir mal die Geometry des Fensters ausgeben. Vielleicht liegt es ausserhalb des Bildschirms oder ist einfach zu klein, aus welchen Gründen auch immer.

Verfasst: 25. September 2007 12:44
von CaptnChaos
ja ich lese sie und so wies aussieht ist das ein pointer auf ein kleines konfigurationsfenster. wenn man die mit close() schliesst und dann mit show() wieder anzeigt hat das den selben effect wie hide() und show(), nur das es bei mir immer funktioniert hat.

Verfasst: 25. September 2007 13:24
von salzd
Erstmal Beiden Vielen Dank für die rasche Antwort. Das mit dem event->ignore ist tatsächlich nötig so ich will das fenster nicht schliessen nur verstecken.

Das Problem hat sich jetzt trotzdem "gelöst", es ist kein eigentliches QT Problem es war vielmehr ein Problem mit meinem X-Server :oops:. Wenn ich das Programm nicht von remote ausführe funktioniert alles I.O.