Confusion between the usage of 'this' and 'parent'
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
OK, and what happens when you set
nullptr
as a widget's parent? (Hint: Your LayoutExample object also hasnullptr
as its parent)When the widget's parent is set to null, that means it has no parent,
Correct.
maybe it starts acting as a parent.
That's not quite right. When a widget has no parent, it can act as a top-level window (say "top-level window", not "parent"). That means whenever you call
show()
on a widget that has no parent, then that widget appears in a new window.// button1 and button2 have a parent, and will appear inside your widget button1 = new QPushButton("Click Here", this); button2 = new QPushButton("Sign up",this); // button3 has no parent, and will open in a new window button3 = new QPushButton("Hello"); button3->show(); // If you don't call show(), button3 will be invisible
@JKSH said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
button1 and button2 appear on the window because I have used this->show() at the end.
// button1 and button2 have a parent, and will appear inside your widget button1 = new QPushButton("Click Here", this); button2 = new QPushButton("Sign up",this); // button3 has no parent, and will open in a new window button3 = new QPushButton("Hello"); button3->show(); // If you don't call show(), button3 will be invisible
I am not worried about button3, all I am concerned about is quit button of main.cpp file.
I made following change in main.cpp
quit.move(80,80)
and w.show() is already there in main.cpp
Then, why isn't quit button showing up in my window whereas other two buttons signup and 'Click Here' appear?
-
You shouldn't
move
and resize widgets (buttons are also widgets) when you want to use layouts. Layouts will position and resize all their widgets themselves. Most likely layouts will override everything else in the end.When you are using a
QGridLayout
you should always specify the row and column. I am not sure what would happen otherwise. Only with the box layouts it makes sense to not specify a position in the layout as they will then only be appended (to the right in horizontal layouts or to the bottom in vertical layouts).About the parents in Qt: Unfortunately, it is a little bit more confusing when you are using layouts than what you have discussed so far. Whenever you add a widget to a layout it will be reparented to the layout's parent. The reason behind this is that for widgets the parent-child relationship also applies to the visual representation. When you show a parent all its children will be shown as well. I personally don't provide a parent when creating child objects (like in
new QPushButton("Button")
) but rely on the parent being set when I add widgets to a layout (and I exclusively use layouts instead of fixed positioning). Though this is just my personal preference. -
@JKSH said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
button1 and button2 appear on the window because I have used this->show() at the end.
// button1 and button2 have a parent, and will appear inside your widget button1 = new QPushButton("Click Here", this); button2 = new QPushButton("Sign up",this); // button3 has no parent, and will open in a new window button3 = new QPushButton("Hello"); button3->show(); // If you don't call show(), button3 will be invisible
I am not worried about button3, all I am concerned about is quit button of main.cpp file.
I made following change in main.cpp
quit.move(80,80)
and w.show() is already there in main.cpp
Then, why isn't quit button showing up in my window whereas other two buttons signup and 'Click Here' appear?
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
Then, why isn't quit button showing up in my window whereas other two buttons signup and 'Click Here' appear?
I agree with @SimonSchroeder: Since your top-level widget has a layout, do not add a child widget that is not part of that layout. It is not designed to work that way.
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
Then, why isn't quit button showing up in my window whereas other two buttons signup and 'Click Here' appear?
I agree with @SimonSchroeder: Since your top-level widget has a layout, do not add a child widget that is not part of that layout. It is not designed to work that way.
What do you mean by top-level widget? Is it the one declared in main.cpp ; i.e quit button?
-
What do you mean by top-level widget? Is it the one declared in main.cpp ; i.e quit button?
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
What do you mean by top-level widget? Is it the one declared in main.cpp ; i.e quit button?
A top-level widget is a widget that has its own window.
In your code,
button1
andbutton2
are not top-level widgets because they don't have their own windows. Instead, they are insidew
's window. -
@Christian-Ehrlicher
There's only one example in the documentation.The following code is something I tried on my own.
layoutexample.h
#ifndef LAYOUTEXAMPLE_H #define LAYOUTEXAMPLE_H #include <QMainWindow> #include <QWidget> #include <QTableWidget> #include <QGridLayout> #include <QPushButton> #include <QMenuBar> class LayoutExample : public QMainWindow { Q_OBJECT QWidget *box; QGridLayout *gridLay; QPushButton *button1; QPushButton *button2; public: LayoutExample(QWidget *parent=nullptr); ~LayoutExample(); }; #endif // LAYOUTEXAMPLE_H
layoutexample.cpp
#include "layoutexample.h" #include <QGridLayout> #include <QWidget> #include <QTableWidget> #include <QPushButton> #include <QMenuBar> LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { box = new QWidget(); button1=new QPushButton("Click Here"); button2 = new QPushButton("Sign up"); gridLay = new QGridLayout(); box->setFixedSize(100,100); gridLay->setRowMinimumHeight(5,4); gridLay->setHorizontalSpacing(20); gridLay->addWidget(box); gridLay->addWidget(button1); gridLay->addWidget(button2); this->setLayout(gridLay); //this->parentWidget()->setLayout(gridLay); } LayoutExample::~LayoutExample() { }
In the above code, in place of 'this' when I write parent , my program crashes. This code does not add widgets to the main window. Only the effects of codes of main.cpp are reflected in the main window.
How can I use w parent Qobject from main.cpp in layout.cpp? [I am so confused about the structure of writing codes in these 3 files and parent-child implementation]
Does parent in layout.cpp refer to w ?
main.cpp#include "layoutexample.h" #include <QApplication> #include <QWidget> #include <QTableWidget> #include <QMenuBar> int main(int argc, char *argv[]) { QApplication a(argc, argv); LayoutExample w; // w: parent QObject QPushButton quit("Quit",&w); // quit: child QObject quit.move(100,100); // x and y coordinates of widgets wrt to the mainwindow w.setWindowTitle("Layout Example"); quit.setBaseSize(100,100); quit.setAutoFillBackground("yes"); QGridLayout grid(&w); //w.setLayout(grid); w.show(); return a.exec(); } }
Edit: I've changed the name of the project from layout to layoutExample to avoid confusion.
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
@Christian-Ehrlicher
There's only one example in the documentation.The following code is something I tried on my own.
layoutexample.h
#ifndef LAYOUTEXAMPLE_H #define LAYOUTEXAMPLE_H #include <QMainWindow> #include <QWidget> #include <QTableWidget> #include <QGridLayout> #include <QPushButton> #include <QMenuBar> class LayoutExample : public QMainWindow { Q_OBJECT QWidget *box; QGridLayout *gridLay; QPushButton *button1; QPushButton *button2; public: LayoutExample(QWidget *parent=nullptr); ~LayoutExample(); }; #endif // LAYOUTEXAMPLE_H
layoutexample.cpp
#include "layoutexample.h" #include <QGridLayout> #include <QWidget> #include <QTableWidget> #include <QPushButton> #include <QMenuBar> LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { box = new QWidget(); button1=new QPushButton("Click Here"); button2 = new QPushButton("Sign up"); gridLay = new QGridLayout(); box->setFixedSize(100,100); gridLay->setRowMinimumHeight(5,4); gridLay->setHorizontalSpacing(20); gridLay->addWidget(box); gridLay->addWidget(button1); gridLay->addWidget(button2); this->setLayout(gridLay); //this->parentWidget()->setLayout(gridLay); } LayoutExample::~LayoutExample() { }
In the above code, in place of 'this' when I write parent , my program crashes. This code does not add widgets to the main window. Only the effects of codes of main.cpp are reflected in the main window.
How can I use w parent Qobject from main.cpp in layout.cpp? [I am so confused about the structure of writing codes in these 3 files and parent-child implementation]
Does parent in layout.cpp refer to w ?
main.cpp#include "layoutexample.h" #include <QApplication> #include <QWidget> #include <QTableWidget> #include <QMenuBar> int main(int argc, char *argv[]) { QApplication a(argc, argv); LayoutExample w; // w: parent QObject QPushButton quit("Quit",&w); // quit: child QObject quit.move(100,100); // x and y coordinates of widgets wrt to the mainwindow w.setWindowTitle("Layout Example"); quit.setBaseSize(100,100); quit.setAutoFillBackground("yes"); QGridLayout grid(&w); //w.setLayout(grid); w.show(); return a.exec(); } }
Edit: I've changed the name of the project from layout to layoutExample to avoid confusion.
@JKSH
Another observation here,
In layoutExample.cpp , [ in main.cpp , w.show() is present as it is ]
CASE-1
In the presence ofthis->show();
following result is obtained ;
CASE-2
When I comment//this->show();
I get the following result
My doubt here is ; in CASE-2, why should these buttons; Sign up and Click Here appear as this->show() is commented?
In CASE-1 , why does quit button from main.cpp appear in the same window?
Please explain the reason.
Thanks!
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
@Christian-Ehrlicher
There's only one example in the documentation.The following code is something I tried on my own.
layoutexample.h
#ifndef LAYOUTEXAMPLE_H #define LAYOUTEXAMPLE_H #include <QMainWindow> #include <QWidget> #include <QTableWidget> #include <QGridLayout> #include <QPushButton> #include <QMenuBar> class LayoutExample : public QMainWindow { Q_OBJECT QWidget *box; QGridLayout *gridLay; QPushButton *button1; QPushButton *button2; public: LayoutExample(QWidget *parent=nullptr); ~LayoutExample(); }; #endif // LAYOUTEXAMPLE_H
layoutexample.cpp
#include "layoutexample.h" #include <QGridLayout> #include <QWidget> #include <QTableWidget> #include <QPushButton> #include <QMenuBar> LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { box = new QWidget(); button1=new QPushButton("Click Here"); button2 = new QPushButton("Sign up"); gridLay = new QGridLayout(); box->setFixedSize(100,100); gridLay->setRowMinimumHeight(5,4); gridLay->setHorizontalSpacing(20); gridLay->addWidget(box); gridLay->addWidget(button1); gridLay->addWidget(button2); this->setLayout(gridLay); //this->parentWidget()->setLayout(gridLay); } LayoutExample::~LayoutExample() { }
In the above code, in place of 'this' when I write parent , my program crashes. This code does not add widgets to the main window. Only the effects of codes of main.cpp are reflected in the main window.
How can I use w parent Qobject from main.cpp in layout.cpp? [I am so confused about the structure of writing codes in these 3 files and parent-child implementation]
Does parent in layout.cpp refer to w ?
main.cpp#include "layoutexample.h" #include <QApplication> #include <QWidget> #include <QTableWidget> #include <QMenuBar> int main(int argc, char *argv[]) { QApplication a(argc, argv); LayoutExample w; // w: parent QObject QPushButton quit("Quit",&w); // quit: child QObject quit.move(100,100); // x and y coordinates of widgets wrt to the mainwindow w.setWindowTitle("Layout Example"); quit.setBaseSize(100,100); quit.setAutoFillBackground("yes"); QGridLayout grid(&w); //w.setLayout(grid); w.show(); return a.exec(); } }
Edit: I've changed the name of the project from layout to layoutExample to avoid confusion.
@JKSH
Another observation here,
In layoutExample.cpp , [ in main.cpp , w.show() is present as it is ]
CASE-1
In the presence ofthis->show();
following result is obtained ;
CASE-2
When I comment//this->show();
I get the following result
My doubt here is ; in CASE-2, why should these buttons; Sign up and Click Here appear as this->show() is commented?
In CASE-1 , why does quit button from main.cpp appear in the same window?
Please explain the reason.
Thanks!
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
In CASE-1 , why does quit button from main.cpp appear in the same window?
Because you've set
w
as parent of yourquit
button. So it appears in parent coodinates. If you remove the&w
from yourquit
button's c'tor and still move it to, say (100, 100) and show it afterwards, it should appear as standalone widget at 100,100 from TOP-LEFT corner of your SCREEN.Btw: You should really use your layouts, not create them and then just throw your widgets (buttons) on your parent (LayoutExample window/widget) without actually putting them in a layout.
CASE 2
where is your
this->show()
located?! Cant tell right now...
The other 2 buttons are there because they are children ofLayoutExample
widget.... and you still show it withw.show()
in yourmain()
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
In CASE-1 , why does quit button from main.cpp appear in the same window?
Because you've set
w
as parent of yourquit
button. So it appears in parent coodinates. If you remove the&w
from yourquit
button's c'tor and still move it to, say (100, 100) and show it afterwards, it should appear as standalone widget at 100,100 from TOP-LEFT corner of your SCREEN.Btw: You should really use your layouts, not create them and then just throw your widgets (buttons) on your parent (LayoutExample window/widget) without actually putting them in a layout.
CASE 2
where is your
this->show()
located?! Cant tell right now...
The other 2 buttons are there because they are children ofLayoutExample
widget.... and you still show it withw.show()
in yourmain()
@Pl45m4 said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
CASE 2
where is your
this->show()
located?! Cant tell right now...As mentioned in my previous reply,
this->show()
is located in layoutExample.cpp file. -
@Pl45m4 said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
CASE 2
where is your
this->show()
located?! Cant tell right now...As mentioned in my previous reply,
this->show()
is located in layoutExample.cpp file.Shouldn't make any difference since
this
in yourLayoutExample
class andw
inmain
are pretty much the same objects/instances. It's just the point when you show it. Usingthis->show
at the end of c'tor shows the widget right after it is constructed. Then you do some stuff in main() and thenw.show()
would display it anyway. -
Shouldn't make any difference since
this
in yourLayoutExample
class andw
inmain
are pretty much the same objects/instances. It's just the point when you show it. Usingthis->show
at the end of c'tor shows the widget right after it is constructed. Then you do some stuff in main() and thenw.show()
would display it anyway.My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible? -
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
In CASE-1 , why does quit button from main.cpp appear in the same window?
Because you've set
w
as parent of yourquit
button. So it appears in parent coodinates. If you remove the&w
from yourquit
button's c'tor and still move it to, say (100, 100) and show it afterwards, it should appear as standalone widget at 100,100 from TOP-LEFT corner of your SCREEN.Btw: You should really use your layouts, not create them and then just throw your widgets (buttons) on your parent (LayoutExample window/widget) without actually putting them in a layout.
CASE 2
where is your
this->show()
located?! Cant tell right now...
The other 2 buttons are there because they are children ofLayoutExample
widget.... and you still show it withw.show()
in yourmain()
@Pl45m4 said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
Btw: You should really use your layouts, not create them and then just throw your widgets (buttons) on your parent (LayoutExample window/widget) without actually putting them in a layout.I've used
gridlayout
for the widgets inlayoutExample.cpp
, you can check it below(as a part oflayoutExample.cpp
) but it seems that the layout has not been applied successfully.LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { box = new QWidget(this); button1=new QPushButton("Click Here",this); button2 = new QPushButton("Sign up",this); button1->move(200,200); button2->move(100,100); gridLay = new QGridLayout(this); box->setFixedSize(50,50); gridLay->addWidget(box); gridLay->addWidget(button1); gridLay->addWidget(button2); this->setLayout(gridLay); this->show(); //this->parentWidget()->setLayout(gridLay); }
-
@Pl45m4 said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
Btw: You should really use your layouts, not create them and then just throw your widgets (buttons) on your parent (LayoutExample window/widget) without actually putting them in a layout.I've used
gridlayout
for the widgets inlayoutExample.cpp
, you can check it below(as a part oflayoutExample.cpp
) but it seems that the layout has not been applied successfully.LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { box = new QWidget(this); button1=new QPushButton("Click Here",this); button2 = new QPushButton("Sign up",this); button1->move(200,200); button2->move(100,100); gridLay = new QGridLayout(this); box->setFixedSize(50,50); gridLay->addWidget(box); gridLay->addWidget(button1); gridLay->addWidget(button2); this->setLayout(gridLay); this->show(); //this->parentWidget()->setLayout(gridLay); }
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt here is ; in CASE-2, why should these buttons; Sign up and Click Here appear as this->show() is commented?
In CASE-1 , why does quit button from main.cpp appear in the same window?
Please explain the reason.
I think you've got CASE-1 and CASE-2 mixed up.
quit
will show ifthis->show()
is commented.The reason is this: When you call
show()
on a widget, it also automatically callsshow()
on all of the widget's children.- When you show
w
before setting it as the parent ofquit
, thenquit
won't be shown. You must callquit.show()
manually. - When you show
w
after setting it as the parent ofquit
, thenquit
will be automatically shown.
But more importantly: You don't need to spend time worrying about things like this. If you just put ALL of your child widgets inside layouts, then you won't encounter these strange behaviours!
I've used
gridlayout
for the widgets... but it seems that the layout has not been applied successfully.Look, both @SimonSchroeder and I have told you already: You must specify the row and column when you call QGridLayout::addWidget(): https://doc.qt.io/qt-5/qgridlayout.html#addWidget-1
It irritates us when you ignore our advice and then repeat the same issue.
- When you show
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt here is ; in CASE-2, why should these buttons; Sign up and Click Here appear as this->show() is commented?
In CASE-1 , why does quit button from main.cpp appear in the same window?
Please explain the reason.
I think you've got CASE-1 and CASE-2 mixed up.
quit
will show ifthis->show()
is commented.The reason is this: When you call
show()
on a widget, it also automatically callsshow()
on all of the widget's children.- When you show
w
before setting it as the parent ofquit
, thenquit
won't be shown. You must callquit.show()
manually. - When you show
w
after setting it as the parent ofquit
, thenquit
will be automatically shown.
But more importantly: You don't need to spend time worrying about things like this. If you just put ALL of your child widgets inside layouts, then you won't encounter these strange behaviours!
I've used
gridlayout
for the widgets... but it seems that the layout has not been applied successfully.Look, both @SimonSchroeder and I have told you already: You must specify the row and column when you call QGridLayout::addWidget(): https://doc.qt.io/qt-5/qgridlayout.html#addWidget-1
It irritates us when you ignore our advice and then repeat the same issue.
Yes, I remember your advice of giving a dimension to my layout to make it appear on the screen, I was mistakenly putting row,column parameters while creating
gridLay
as a result of which I was getting errors repeatedly but now , I understood the concept.gridLay->addWidget(button1,100,120,Qt::Alignment=0x0020);
The third argument gives me an error. How should the value of alignment be used?
Qt::Alignment=0x0020
- When you show
-
Yes, I remember your advice of giving a dimension to my layout to make it appear on the screen, I was mistakenly putting row,column parameters while creating
gridLay
as a result of which I was getting errors repeatedly but now , I understood the concept.gridLay->addWidget(button1,100,120,Qt::Alignment=0x0020);
The third argument gives me an error. How should the value of alignment be used?
Qt::Alignment=0x0020
gridLay->addWidget(button1,100,120,Qt::Alignment=0x0020);
100,120 does not mean the pixels on your screen, but row/column 100/120
try placing your first widget on column/row 0 and use the actual enum not the integer value as 4th paramter
gridLay->addWidget(button1,0,0,Qt::AlignTop);
-
gridLay->addWidget(button1,100,120,Qt::Alignment=0x0020);
100,120 does not mean the pixels on your screen, but row/column 100/120
try placing your first widget on column/row 0 and use the actual enum not the integer value as 4th paramter
gridLay->addWidget(button1,0,0,Qt::AlignTop);
@J-Hilk
After modifying the existing code,
gridLay->addWidget(button1,0,0,Qt::AlignTop);
I can't find any change in my display. :( -
My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible?@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible?Because you called
w.show()
.After modifying the existing code,
gridLay->addWidget(button1,0,0,Qt::AlignTop);
I can't find any change in my display. :(First: Instead of
QMainWindow
, make your widget inheritQWidget
. This makes things simpler.Second: You only put one button in the layout. You should put ALL buttons in the layout. Remember to use different rows/columns for each button.
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible?Because you called
w.show()
.After modifying the existing code,
gridLay->addWidget(button1,0,0,Qt::AlignTop);
I can't find any change in my display. :(First: Instead of
QMainWindow
, make your widget inheritQWidget
. This makes things simpler.Second: You only put one button in the layout. You should put ALL buttons in the layout. Remember to use different rows/columns for each button.
This is the
LayoutExample.cpp
LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { ............ }
In place of QMainWindow, if I put QWidget, it gives an error. For example:
LayoutExample::LayoutExample(QWidget *parent) : QWidget(parent) { ............ }
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible?Because you called
w.show()
.After modifying the existing code,
gridLay->addWidget(button1,0,0,Qt::AlignTop);
I can't find any change in my display. :(First: Instead of
QMainWindow
, make your widget inheritQWidget
. This makes things simpler.Second: You only put one button in the layout. You should put ALL buttons in the layout. Remember to use different rows/columns for each button.
@JKSH said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
My doubt is , even if I comment
this->show()
inlayoutExample.cpp
, the widgets inlayoutExample.cpp
still appear on the screen. How is it possible?Because you called
w.show()
.After modifying the existing code,
gridLay->addWidget(button1,0,0,Qt::AlignTop);
I can't find any change in my display. :(First: Instead of
QMainWindow
, make your widget inheritQWidget
. This makes things simpler.Second: You only put one button in the layout. You should put ALL buttons in the layout. Remember to use different rows/columns for each button.
This is the complete code, please refer to it.LayoutExample.cpp
LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { gridLay = new QGridLayout(this); box = new QWidget(this); button1=new QPushButton("Click Here",this); button2 = new QPushButton("Sign up",this); button1->move(200,200); button2->move(100,100); gridLay->addWidget(box,60,60); gridLay->addWidget(button1,0,0,Qt::AlignTop); gridLay->addWidget(button2,50,100,Qt::AlignBottom); this->setLayout(gridLay); this->show(); } LayoutExample::~LayoutExample() { }
-
This is the
LayoutExample.cpp
LayoutExample::LayoutExample(QWidget *parent) : QMainWindow(parent) { ............ }
In place of QMainWindow, if I put QWidget, it gives an error. For example:
LayoutExample::LayoutExample(QWidget *parent) : QWidget(parent) { ............ }
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
In place of QMainWindow, if I put QWidget, it gives an error.
You must update your .h file too.
gridLay->addWidget(box,60,60); gridLay->addWidget(button1,0,0,Qt::AlignTop); gridLay->addWidget(button2,50,100,Qt::AlignBottom);
You want to specify row/column number. Not pixel number.
I suggest you use a QVBoxLayout for now. It's simpler than QGridLayout.
-
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
In place of QMainWindow, if I put QWidget, it gives an error.
You must update your .h file too.
gridLay->addWidget(box,60,60); gridLay->addWidget(button1,0,0,Qt::AlignTop); gridLay->addWidget(button2,50,100,Qt::AlignBottom);
You want to specify row/column number. Not pixel number.
I suggest you use a QVBoxLayout for now. It's simpler than QGridLayout.
@JKSH said in Confusion between the usage of 'this' and 'parent':
@Swati777999 said in Confusion between the usage of 'this' and 'parent':
You must update your .h file too.
Done! It works now!
gridLay->addWidget(box,60,60); gridLay->addWidget(button1,0,0,Qt::AlignTop); gridLay->addWidget(button2,50,100,Qt::AlignBottom);
You want to specify row/column number. Not pixel number.
Noted!
I suggest you use a QVBoxLayout for now. It's simpler than QGridLayout.
Okay