qtuser-interfaceqwidget

QWidget setGeometry show without use of a QLayout


The target is to paint a QWidget subclass in a other QWidget. By give only the coords.

#include <QApplication>
#include <QWidget>
#include <QLabel>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget* w = new QWidget;
    w->show();
    QLabel* l = new QLabel;
    l->setText("Hello World!");
    l->setParent(w);
    l->setGeometry(0,0,100,100);

    return a.exec();
}

Why i see nothing on the window.


Solution

  • You must call QWidget::show to show the label since you add it after the parent widget has already been shown.

    QLabel* l = new QLabel;
    l->setText("Hello World!");
    l->setParent(w);
    l->setGeometry(0,0,100,100);
    l->show();
    

    An alternative solution is to show the parent after all the child widgets are already added. You don't need to allocate anything explicitly the heap:

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWidget w;
        QLabel l("Hello World!", &w);
        l.setGeometry(0,0,100,100);
        w.show();
        return a.exec();
    }