Russian Qt Forum
Апрель 16, 2024, 11:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создания виджета  (Прочитано 9061 раз)
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.
Записан
twp
Гость
« Ответ #1 : Февраль 16, 2011, 17:28 »

Код:
QWidget *commandWidget = new QWidget(&mainWidget);
Записан
vanix
Гость
« Ответ #2 : Февраль 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();
}

В результате выполнения, я чего то подчиненного виджета не наблюдаю?? Что тут опять не так?
« Последнее редактирование: Февраль 16, 2011, 17:44 от vanix » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Февраль 16, 2011, 17:43 »

Другой вопрос не ясен. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vanix
Гость
« Ответ #4 : Февраль 16, 2011, 17:45 »

извините за оффтоп:
я правил пост ))
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 16, 2011, 17:51 »

Ты его не видишь, но он существует. Улыбающийся Замени второй QWidget на, к примеру, QLineEdit.
И читай про компоновку.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ruzik
Гость
« Ответ #6 : Февраль 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();
}
Записан
vanix
Гость
« Ответ #7 : Февраль 16, 2011, 18:02 »

Пантер, спасибо.
То есть, как я понял, он создается на главном виджете? Если так, то как сделать что бы они отражались как отдельные. Задача в следующем, создать многооконное приложение, при уничтожении главного виджета должны умереть все остальные(что-то наподобие GIMP'a). Или в данной ситуации возможно только отлавливание сигналов?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Февраль 16, 2011, 18:02 »

ruzik, к чему этот пример? Я как понял, человек хочет расположить один виджет на другом.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Февраль 16, 2011, 18:03 »

QWidget* commandWidget = new QWidget(&mainWidget);
Ты назначаешь родителя.
QWidget* commandWidget = new QWidget(0);
Тут не указываешь родителя, так что виджет отобразится отдельно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vanix
Гость
« Ответ #10 : Февраль 16, 2011, 18:05 »

ну я уже понял, что если не указывать родителя, то все нормально, но преимущество задания родителя в том, что когда умирает родитель умирают и все его потомки.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Февраль 16, 2011, 18:08 »

Тут уж выбирай: или шашечки, или ехать. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vanix
Гость
« Ответ #12 : Февраль 16, 2011, 18:12 »

спасибо всем, ток я не понял при чем тут пример который привел ruzik))
Записан
ruzik
Гость
« Ответ #13 : Февраль 16, 2011, 18:25 »

У тебя выскакивали ошибки
Цитировать
conversion from 'QWidget*' to non-scalar type 'QWidget' requested
То есть ты забыл сделать указатель и инициализировать его
Цитировать
В результате выполнения, я чего то подчиненного виджета не наблюдаю?? Что тут опять не так?
Тут использовал объект, который не отображается
Вот я тебе и скинул пример, в котором это все реализовано, так для справки
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.