Russian Qt Forum

Qt => Вопросы новичков => Тема начата: vanix от Февраль 16, 2011, 17:23



Название: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 17:23
Вопрос в следующем: создаю главный виджет и зависимый следующим образом:
Код:
#include <QtGui>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    QWidget mainWidget;
    mainWidget.show();
    QWidget commandWidget = new QWidget(&mainWidget);
    commandWidget.show();
    return a.exec();
}

при сборке выдается следующее сообщение:
conversion from 'QWidget*' to non-scalar type 'QWidget' requested
Если убрать  = new QWidget(&mainWidget), то естественно все собирается и работает.
В чем ошибка? Хотя, если следовать хелпу, то все должно быть правильно.
Описание конструктора QWidget:
QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 )
Constructs a widget which is a child of parent, with widget flags set to f.


Название: Re: Создания виджета
Отправлено: twp от Февраль 16, 2011, 17:28
Код:
QWidget *commandWidget = new QWidget(&mainWidget);


Название: Re: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 17:42
twp, спасибо.
но тут возникает другой вопрос.
Код:
#include <QtGui>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    QWidget mainWidget;
    mainWidget.setGeometry(0,20,1024,550);
    mainWidget.show();
    QWidget* commandWidget = new QWidget(&mainWidget);
    commandWidget->setGeometry(0, 600, 1024, 50);
    commandWidget->show();
    return a.exec();
}

В результате выполнения, я чего то подчиненного виджета не наблюдаю?? Что тут опять не так?


Название: Re: Создания виджета
Отправлено: Пантер от Февраль 16, 2011, 17:43
Другой вопрос не ясен. :)


Название: Re: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 17:45
извините за оффтоп:
я правил пост ))


Название: Re: Создания виджета
Отправлено: Пантер от Февраль 16, 2011, 17:51
Ты его не видишь, но он существует. :) Замени второй QWidget на, к примеру, QLineEdit.
И читай про компоновку.


Название: Re: Создания виджета
Отправлено: ruzik от Февраль 16, 2011, 17:59
Вот например
Код:
#include <QApplication>
#include <QPushButton>
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton *newbtn = new QPushButton(QObject::tr("OK"));//создается новая кнопка с надписью ок
    QObject::connect(newbtn, SIGNAL(clicked()), &app, SLOT(quit())); //соединяется сигнал "Нажатие" кнопки и слот "выход" формы
    newbtn->resize(180,40); //изменяется длина/ширина
    newbtn->show(); //кнопка показываетя
    return app.exec();
}


Название: Re: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 18:02
Пантер, спасибо.
То есть, как я понял, он создается на главном виджете? Если так, то как сделать что бы они отражались как отдельные. Задача в следующем, создать многооконное приложение, при уничтожении главного виджета должны умереть все остальные(что-то наподобие GIMP'a). Или в данной ситуации возможно только отлавливание сигналов?


Название: Re: Создания виджета
Отправлено: Пантер от Февраль 16, 2011, 18:02
ruzik, к чему этот пример? Я как понял, человек хочет расположить один виджет на другом.


Название: Re: Создания виджета
Отправлено: Пантер от Февраль 16, 2011, 18:03
QWidget* commandWidget = new QWidget(&mainWidget);
Ты назначаешь родителя.
QWidget* commandWidget = new QWidget(0);
Тут не указываешь родителя, так что виджет отобразится отдельно.


Название: Re: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 18:05
ну я уже понял, что если не указывать родителя, то все нормально, но преимущество задания родителя в том, что когда умирает родитель умирают и все его потомки.


Название: Re: Создания виджета
Отправлено: Пантер от Февраль 16, 2011, 18:08
Тут уж выбирай: или шашечки, или ехать. :)


Название: Re: Создания виджета
Отправлено: vanix от Февраль 16, 2011, 18:12
спасибо всем, ток я не понял при чем тут пример который привел ruzik))


Название: Re: Создания виджета
Отправлено: ruzik от Февраль 16, 2011, 18:25
У тебя выскакивали ошибки
Цитировать
conversion from 'QWidget*' to non-scalar type 'QWidget' requested
То есть ты забыл сделать указатель и инициализировать его
Цитировать
В результате выполнения, я чего то подчиненного виджета не наблюдаю?? Что тут опять не так?
Тут использовал объект, который не отображается
Вот я тебе и скинул пример, в котором это все реализовано, так для справки