Toon posts:

[qt c++] modal window tonen? Window verdwijnt direct!

Pagina: 1
Acties:
  • 53 views sinds 30-01-2008

Verwijderd

Topicstarter
Beste mensen,

Ik heb een leuk werkend programmaatje, en nu wil ik daar een schermpje (modal) bovenop zetten: "Een ogenblik geduld a.u.b." en een progressbar, enfin, je kent het wel! Dus ik heb de volgende code:
code:
1
2
WaitDialog wait(this, "test",WType_Modal);
wait.show();


waarbij WaitDialog de volgende definitie heeft (in zijn .h-file):
code:
1
2
3
4
5
6
7
8
9
class AudioProcess : public dlgAudioProcess
{
  Q_OBJECT

public:
  AudioProcess(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
  ~AudioProcess();

...


Deze code compiled goed, maar als ik 'm uitvoer, dan zie ik in een flits het schermpje, maar het verdwijnt ook meteen weer! Ik doe ongetwijfeld iets fout, maar wat? In de qt-documentatie van Trolltech wordt alleen maar over QFrames gepraat, terwijl ik gewoon een leuk venstertje ontworpen heb en dat modal wil laten zien!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
Ik weet niet hoe het in Qt zit, maar in FOX is er een aparte execute() methode in plaats van show() (die overigens ook werkt). Die methode kan ook doModal oid heten, misschien moet je daar es naar zoeken?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Recht uit de Qt documentatie:
Modal Dialogs

A modal dialog is a dialog that blocks input to other visible windows in the same application. Users must finish interacting with the dialog and close it before they can access any other window in the application. Dialogs that are used to request a file name from the user or that are used to set application preferences are usually modal.

The most common way to display a modal dialog is to call its exec() function. When the user closes the dialog, exec() will provide a useful return value. Typically we connect a default button, e.g. "OK", to the accept() slot and a "Cancel" button to the reject() slot, to get the dialog to close and return the appropriate value. Alternatively you can connect to the done() slot, passing it Accepted or Rejected.

An alternative is to call setModal(TRUE), then show(). Unlike exec(), show() returns control to the caller immediately. Calling [i]setModal(TRUE) is especially useful for progress dialogs, where the user must have the ability to interact with the dialog, e.g. to cancel a long running operation. If you use show() and setModal(TRUE) together you must call QApplication::processEvents() periodically during processing to enable the user to interact with the dialog. (See QProgressDialog.)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
Tnx voor de moeite, maar dat is niet helemaal van toepassing op mijn applicatie. Wat er (gedetailleerd) gebeurt is het volgende:
Iemand klikt op een knop, waarop een lijst met (commandline) processen wordt klaargezet in de vorm van KProcess-objecten (of QProcess, wat je wil). Net na de start van het eerste proces, moet het dialog weergegeven worden, en dat moet actief blijven. Dat dialog wordt bijgewerkt op het moment dat een KProcess wat output geeft aan mijn applicatie.

Ik heb ook al zitten kijken naar die exec()-functie, maar die bestaat niet voor mijn classe. Wat ik heb gedaan, is een nieuwe Widget (.ui) aangemaakt (de dialog dus), die bewerkt met Qt Designer en vervolgens 'geimporteerd' in KDevelop.

[Wacht even: moment van bezinning!]
Als ik inderdaad die QDialog-classe kan gebruiken, dan zou dat natuurlijk helemaal mooi zijn... Ik heb Java-ervaring, nog niet veel C++, maar ik vermoed dat mijn prachtige dialog-klasse QDialog moet 'extenden', of niet? Hoe extend ik mijn klasse, want feitelijk is de klasse van m'n dialog een extensie op m'n ontwerp uit Qt Designer, of heb ik het nu helemaal mis?

[ Voor 26% gewijzigd door Verwijderd op 06-04-2004 21:26 ]


Verwijderd

Topicstarter
Owkee, ik heb het licht gezien! Als je in de Qt designer even aangeeft dat je een Dialog gaat maken, dan doet ie alles op basis van de kalsse QDialog, en kun je gewoon de functie exec()-aanroepen. Bedankt voor het duwtje in de rug!

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja, dit is nou al de zoveelste topic waarin je gewoonweg niet zelf genoeg moeite hebt gedaan. Je hebt al een mailtje gekregen en een OW hiervoor ontvangen, ben je nog eens van plan je gedrag aan te passen? Je lijkt er namelijk maar bijzonder weinig mee te doen...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.