Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Старнности после наследования от QWidget


Автор: JekaZZ 11.12.2009, 18:58
Использую QtCreator 1.3.0, Qt 4.5.1 Создаю проект "GUI приложение QT". В него добавляю класс С++ MyWidget - наследник QWidget.
В коснтрукторе главной формы MainWindow создаю объект класса И делаю с ним следующее:
Код

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QWidget* w = new MyWidget(this);
    QPalette p = w->->palette();
    p.setColor(QPalette::Background, QColor(Qt::red));
    w->setPalette(p);
    w->resize(300, 500);
    w->move(10, 10);
    w->show();
}


Ожидается, что на форме появится красный прямоугольник. Но! Его нет! Почему???
Если MyWidget-у не передавать parent, то красный прямоугольник появляется, но, естественно, не на форме, а как отдельное окно. А вот чтобы работал приведённый пример, нужно в описании класса MyWidget убрать макрос Q_OBJECT. И всё работает. Но тогда же объекты этого класса не смогут отправлять/принимать сигналы. 
Что, вообще, происходит, почему оно так работает?

Автор: chaos 12.12.2009, 00:25
JekaZZ
Код

...
this->layout = new QVBoxLayout(this);
this->layout->addWidget(yourRectangle);
...

Автор: JekaZZ 12.12.2009, 18:49
И ничего....

Автор: SABROG 12.12.2009, 19:17
Может потому, что в виде отдельного окна виджет не прозрачен и фон вынужден рисоваться, а в виде дочернего виджета он прозрачен, т.к. свойство autoFillBackground по-умолчанию выключено.

Автор: JekaZZ 13.12.2009, 21:33
SABROG, Вы гений!  smile 
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)