I'm trying to inset QPushButton in a grid layout which is pretty easy but I won't know the number in advance.
Here is what I have:
testapp.cpp
#include "testapp.h"
testApp::testApp(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
QPushButton* panelButton = new QPushButton();
panelButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
ui.PanelButtonGridLayout->addWidget(panelButton,i,j);
}
}
}
testApp::~testApp()
{
}
main.cpp
#include <QtGui/QApplication>
#include "testapp.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
testApp w;
w.show();
return app.exec();
}
So I know that this won't work because the object is going to be deleted at the end of the current loop.
I thought about creating a QList (for example) of QPushButton in the main and pass it to the testapp class but I'm not sure it's a good solution. there might be way better ways.
EDIT: For some reasons, it wasn't compiling. It now is. I hate when that arrives.
Actually, no, the object will not be deleted at the end of the loop, as you're allocating it on the heap, and not on the stack:
QPushButton* panelButton = new QPushButton();
In this case, buttons will be destroyed automatically when their parent (ui.PanelButtonGridLayout
) is destroyed.
As the comments below state, the parent of the object will be set internally by addWidget
method.
From the documentation:
Note: The ownership of item is transferred to the layout, and it's the layout's responsibility to delete it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With