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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Button и Label в разных окнах 0_о  (Прочитано 5162 раз)
Sandr
Гость
« : Март 04, 2012, 22:08 »

Всем здрасте))
Осваиваю Qt 4.7 и пытаюсь создать окошко, в котором будут находиться кнопка и надпись. Вот код:

Код
C++ (Qt)
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QLabel *label = new QLabel("Text");
label->show();
QPushButton *butt = new QPushButtob("Text");
butt->show();
return app.exec();
}
Запускаю, но почему-то создаются 2 окна, в одном из которых кнопка, а в другом лэйбел. Подскажите, что не так в этом коде, пожалуйста?
« Последнее редактирование: Март 04, 2012, 22:13 от Sandr » Записан
Странник
Гость
« Ответ #1 : Март 04, 2012, 22:19 »

чуть менее, чем все. посмотрите примеры. или книжку почтайте, что ли...Бланшета или того же Шлее.
Записан
Bepec
Гость
« Ответ #2 : Март 04, 2012, 22:20 »

Для того чтобы создать окно, тебе нужно создать класс типа QWidget/QMainWindow.
Он будет окном программы.
А далее при создании объектов указываешь им родителя - этот самый QWidget/QMainWindow.

Код:
	
int main(int argc, char *argv[])
{
 QApplication app(argc, argv);
 QWidget w;
 //QLabel  ( const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0 )
 QLabel *label = new QLabel("Text", w);
 //QPushButton ( const QString & text, QWidget * parent = 0 )
 QPushButton *butt = new QPushButtob("Text", w);
 w.show()
 return app.exec();
}

show() вызывается соответственно только для окна, а он уже сам вызывает для своих потомков Подмигивающий

offtop to Странник:

Почему то во всех учебниках по Qt, которые я видел, в примерах все виджеты создаются динамически. Без исключения  Подмигивающий
Это довольно странная вещь. Особенно когда я по книге написал программку, один интерфейс которой был примерно 1,5к строк Подмигивающий

И таки да, вопрос к Знающим. Если создать
Код:
// widget - объект типа QWidget
QLabel *lala = new QLabel("txt", widget)
То при уничтожении widget'a он уничтожит lala или нет?
 
« Последнее редактирование: Март 04, 2012, 22:23 от Bepec » Записан
Sandr
Гость
« Ответ #3 : Март 04, 2012, 22:22 »

Верес, большое спасибо за помощь Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #4 : Март 04, 2012, 22:34 »

чтобы расположить виджет внутри чего-то, он должен иметь родителя (а именно это самое что-то). в ином случае (без родителя) виджет считается отдельным окном.
Код
C++ (Qt)
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget w;
QLabel *label = new QLabel("Text", w);
QPushButton *butt = new QPushButtob("Text", w);
w.show();
return app.exec();
}
в этом самом простом случае оба элемента будут прилеплены к верхнему левому краю друг на друге. чтобы разместить их относительно нормально, надо воспользоваться менеджером компоновки (layout) - ручное позицирование предлагать не буду Улыбающийся
Код
C++ (Qt)
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget w;
QLabel *label = new QLabel("Text", w);
QPushButton *button = new QPushButtob("Text", w);
QVBoxLayout *layout = new QVBoxLayout(&w);
layout->addWidget(label);
layout->addWidget(button);
w.show();
return app.exec();
}
эх, я тут написал, и всё зря Улыбающийся
И таки да, вопрос к Знающим. Если создать
Код:
// widget - объект типа QWidget
QLabel *lala = new QLabel("txt", widget)
То при уничтожении widget'a он уничтожит lala или нет?
да, объект типа QObject уничтожает всех своих детей
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #5 : Март 04, 2012, 22:38 »

Благодарю. Теперь запомню навеки.

Незря вы писали, у вас более подробный пример Подмигивающий
Записан
Sandr
Гость
« Ответ #6 : Март 04, 2012, 22:59 »

Верес, сейчас попробовал запустить, но выдаёт кучу ошибок.

kambala, ни разу не зря) Но в вашем примере также выводит ошибки.

В обоих примерах ошибки одинаковые, вот скрин ошибок http://s2.ipicture.ru/uploads/20120304/ORjUsI8O.gif
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #7 : Март 04, 2012, 23:05 »

Я тоже написал, практически 1в1 как у kambala'ы Улыбающийся
Код
C++ (Qt)
#include <QApplication>
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QDialog dlg;
   QVBoxLayout *layout = new QVBoxLayout();
   QLabel *label = new QLabel("Label");
   QPushButton *button = new QPushButton("Button");
   layout->addWidget(label);
   layout->addWidget(button);
   dlg.setLayout(layout);
   dlg.show();
   return a.exec();
}
 

а не компилируется у них, если присмотреться, потому что там, где функции требуется указатель на объект, передается сам объект, писали прямо в браузере видимо Улыбающийся
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Sandr
Гость
« Ответ #8 : Март 04, 2012, 23:10 »

Kurles, да мне хотя бы с простым выводом разобраться, а потом до позиционирования дойду))
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #9 : Март 04, 2012, 23:14 »

У меня и так простой вывод, без позиционирования, по крайней мере ручного. Про компоновку почитай.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #10 : Март 04, 2012, 23:47 »

писали прямо в браузере видимо Улыбающийся
именно, с копипастой кода ТС Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Sandr
Гость
« Ответ #11 : Март 05, 2012, 00:31 »

Kurles, и вам так же спасибо))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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