Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: StLynx от Апрель 04, 2014, 09:53



Название: Проблема с добовлением виджета без компоновщика
Отправлено: StLynx от Апрель 04, 2014, 09:53
Доброго времени суток.
Объясните дураку почему не добавляется кнопка?

Код:
#include <QWidget>
#include <QPushButton>

class Window : public QWidget
{
    Q_OBJECT

public:
    explicit Window(QWidget *parent = 0) : QWidget(parent) { }

    void add()
    {
        QPushButton * c = new QPushButton(this);
        c->setGeometry(200, 200, 100, 100);
    }
};

Код:
#include <QApplication>
#include "window.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Window w;

    QPushButton * b = new QPushButton(&w);
    b->setGeometry(0, 0, 100, 100);

    QObject::connect(b, &QPushButton::clicked, &w, &Window::add);

    w.showFullScreen();

    return a.exec();
}


Название: Re: Проблема с добовлением виджета без компоновщика
Отправлено: VPS от Апрель 04, 2014, 10:57
Попробуйте в методе "add" добавить "c->show()". Но лучше (наверное) использовать layout-ы...


Название: Re: Проблема с добовлением виджета без компоновщика
Отправлено: StLynx от Апрель 04, 2014, 11:56
Попробуйте в методе "add" добавить "c->show()". Но лучше (наверное) использовать layout-ы...

И ведь точно! Спасибо большое! Оказывается виджет при вызове метода show() вызывает
этот метод и у своих "чайлдов", поэтому когда я добавлял другую кнопку до вызова "w.showFullScreen();"
она отрисовывалась и без show().

З.Ы. иногда layout'ы не очень удобны, например, когда главное окно не должно менять размер, а
виджеты должны иметь фиксированную позицию и размер.


Название: Re: Проблема с добовлением виджета без компоновщика
Отправлено: vizir.vs от Апрель 07, 2014, 09:06
Попробуйте в методе "add" добавить "c->show()". Но лучше (наверное) использовать layout-ы...

И ведь точно! Спасибо большое! Оказывается виджет при вызове метода show() вызывает
этот метод и у своих "чайлдов", поэтому когда я добавлял другую кнопку до вызова "w.showFullScreen();"
она отрисовывалась и без show().

З.Ы. иногда layout'ы не очень удобны, например, когда главное окно не должно менять размер, а
виджеты должны иметь фиксированную позицию и размер.

Если хочешь зафиксировать размер то использую setFixedSize.