QPushButton reposition, Main Menu load game on same scene, not on different windows
-
No, my bad for my explaining it in a confusing way. The mainmenu class (which I forgot to include, my bad) creates the scene, and I want the scene from the game class to go on the scene from the mainmenu, when I hit "Play" since when a new scene is created, a new window pops up, and that is what I don't want.
http://pastebin.com/ZVhDqchy - mainmenu class (also, how can I position the buttons so that they are one on top of each other, the code I provided makes it so that one is in the top left corner, I imagine due to their positioning on the scene due to the setGeometry)
Thank you for your help!
-
@nanoandrew4 said:
Maybe I missed it but where is game.h ?
Not sure what is a window and what is a widget :)
-
Here it is - http://pastebin.com/WuajT37w
Also, mainmenu.h just in case - http://pastebin.com/bpkVM3q9By window I just mean that a new window will pop up when a new scene is created. In Qt terms, I think it might be a widget as you said. I'm sorry, I started with Qt recently and terminology isn't my forte, as you can see...
-
@nanoandrew4
Hi both mainmenu and Game are QGraphicsView and when you
create them with no parents, they become windows.So you could restructure your code so the scene only live in one of the classes and then call
setScene(scene) in the other and not
scene = new QGraphicsScene(); in both places.You create a new scene in both places.
both in
MainMenu::MainMenu()
Game::Game()
So maybe MainMenu will create scene and game just use the same or reverse.
(game seems to add extra to scene)So this is how I understand it of what you trying to do:
When programs starts, it setup a scene and show it.
When user press Play,
a new windows is shown and the game starts?
The scene in mainmenu is used for Game also. -
Thank you for the help. You got everything right except that I want it all in one window, not in separate ones. But I will make the mainmenu scene the parent one and reuse it in game. Do I just make the mainmenu a QWidget and a parent pointer, and then just call the pointer from game to set the scene? Also, you are correct, Game adds all the objects for the game to be played.
-
@nanoandrew4
Ok. the windows comes from your mainmenu/Game constructor.
you made a default one so it has no Parent parameter and it becomes a window.class MainMenu : public QGraphicsView
Q_OBJECT
public:
MainMenu(); <---- this constructor do not take a widget pointer (as parent)
so it should be
MainMenu(QWidget *parent = 0);and in the implementation
MainMenu::MainMenu( QWidget *parent ) : QGraphicsView(parent) ...so if you make a new mainwindow and create mainmenu like
MainMenu mwin(mainwindow);
it will be a control on that mainwindow and not a window on its own. -
Ok thank you very much, I will try that now. The other question was about how to position the buttons one on top of another, since when I use setGeometry, one ends up in the top ledt corner instead of below the others. The code is in mainmenu.cpp
-
Hi
here is a small sample using QGraphicsView as a control on a mainwindow not as a window by it self.
Maybe it says more than many words :)
https://www.dropbox.com/s/260uga0gma6j9lc/nanotest2.zip?dl=0how to position the buttons one on top of another
playButton->setGeometry(screenWidth /2, 100, 100,50);
if they go in top left corner, i think maybe screenWidth is zero here ?
Using setGeometry should be fine so check the values are what you expect. -
@mrjj Thank you for the example, it was helpful, but what I want is a window with the play button on it, and when it is pressed, for the button to be deleted and the game started. Its kind of hard to explain, so I will try to solve it myself, but basically I want a scene that leads to another scene within the same window, not a button on the scene where the game runs. I'm sorry for the lack of good communication, it is just somewhat hard to explain
Thank you for your help!
-
@nanoandrew4
Hi
Some stuff are just hard to explain :)
So this button, is just a normal button, not one drawn inside scene ?
So you see the scene / a scene / in the background and there is a button over it / in center and
when you press Play, it vanish and the scene changes into the actual scene for the game?
Like in a good old arcade game ?You can hide the button with hide()
here is sample which has button over scene1, when pressed it vanish and the scene is change to scene 2.
https://www.dropbox.com/s/zbh712v02m7obm6/nanotest3.zip?dl=0
good luck