Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
vab9petryk
2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 253
1

Указатель или объект? Как лучше создавать элементы виджета?

21.02.2016, 13:18. Просмотров 967. Ответов 11
Метки нет (Все метки)

В классе виджета можно задать элемент виджета как объект:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
 
#include "mapframe.h"
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
 
class MainWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MainWidget(QWidget *parent = 0);
private:
    MapFrame mapFrame;
    QPushButton bt;
    QHBoxLayout mainLayout;
    QVBoxLayout leftLayout;
};
 
#endif // MAINWIDGET_H


А можно и как указатель на объект:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef MAINWIDGET_H
#define MAINWIDGET_H
 
#include "mapframe.h"
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
 
class MainWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MainWidget(QWidget *parent = 0);
private:
    MapFrame *mapFrame;
    QPushButton *bt;
    QHBoxLayout *mainLayout;
    QVBoxLayout *leftLayout;
};
 
#endif // MAINWIDGET_H


Для меня не понятно преимущество того или иного метода. В книгах видал только второй способ. Первым почти никто не делает. В чем преимущества? Разве только в том, что не надо брать адрес при передаче по указателю?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2016, 13:18
Ответы с готовыми решениями:

Где лучше создавать 2d-3d игры QT или Builder?
Доброго времени суток, собственно вопрос в названии темы, вопрос немного не верный, все же я...

Как навести мышку на x,y внутри виджета относительно 0,0 виджета (левого верхнего угла виджета)?
Как навести мышку на x,y внутри виджета относительно 0,0 этого виджета (левого верхнего угла...

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня...

Что лучше? создавать формы в Run_time или создавать в Design режиме.
(Excel) У меня 11 разных форм.С многими контроль-s. Поделитесь опытом 1.-Для быстрой загрузки...

Как лучше создавать элементы структуры?
Привет :) Начал изучать структуры в c++. У меня назрел вопрос. Чем отличаются эти две записи...

11
Wyn
1059 / 641 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.02.2016, 13:34 2
Цитата Сообщение от vab9petryk Посмотреть сообщение
Для меня не понятно преимущество того или иного метода. В книгах видал только второй способ. Первым почти никто не делает. В чем преимущества? Разве только в том, что не надо брать адрес при передаче по указателю?
1) Указатель даёт возможность отсутствия объекта. То есть объект можно подгружать лишь при желании.
2) При компиляции больших программ есть проблема обхода заголовочных файлов, на которую тратится очень много времени. Указатели не требуют полного определения класса и, следовательно, не требуют подключения заголовочного файла класса.
3) С указателями есть возможно использовать в качестве членов класса классы без дефолтного конструктора.

Разумеется есть и минусы - при указателях на пользователя ложится проблема управления памяти.

И т.д. и т.п. Это то, что первое пришло в голову.
0
vab9petryk
2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 253
21.02.2016, 13:38  [ТС] 3
первый и второй пункт я знаю
Цитата Сообщение от Wyn Посмотреть сообщение
Разумеется есть и минусы - при указателях на пользователя ложится проблема управления памяти.
В данном случаи, не ложится, так как использую лайауты.
0
Wyn
1059 / 641 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.02.2016, 13:45 4
Цитата Сообщение от vab9petryk Посмотреть сообщение
В данном случаи, не ложится, так как использую лайауты.
Я вообще про с++ говорю, а не только про виджеты.

Ещё пункт, проистекающий из первого - с указателя можно использовать сторонний класс, созданный где-то за пределами класса и затем в него переданный.

С виджетами почти всё ровно тоже, что и с обычными классами с++.
Единственное, пожалуй исключение - это то, что механизм parent в данном случае(при использования элемента-члена, а не указателя) лучше не применять, тк виджеты уже являются членами класса и не должны быть удалены до того, как этот класс завершит свою работу.
0
21.02.2016, 13:45
kolts
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
21.02.2016, 15:21 5
Актуально ли переполнение стека или нет? А то слышал, даже известный сайт назвали в его честь, а пока в своей небольшой практике не встречал.
0
Wyn
1059 / 641 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.02.2016, 15:27 6
Цитата Сообщение от kolts Посмотреть сообщение
Актуально ли переполнение стека или нет? А то слышал, даже известный сайт назвали в его честь, а пока в своей небольшой практике не встречал.
Ты много знаешь людей, которые встречались с переполнением стека при нормальной работе программы? Вот и я - нет.
0
RazrFalcon
1392 / 1249 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
21.02.2016, 15:49 7
kolts, зависит от ОС. Меньше всего на видне, насколько я знаю, 1МБ. наклепать классов на 1МБ - это надо постараться.

Wyn, если программа работает не верно, ее никто выкладывать не будет. Переполнение стека делается очень просто: рекурсия.
0
Wyn
1059 / 641 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.02.2016, 15:58 8
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Wyn, если программа работает не верно, ее никто выкладывать не будет. Переполнение стека делается очень просто: рекурсия.
С рекурсией всё было всегда понятно. Но и используя рекурсию это надо постараться, чтоб правильно написанная рекурсия переполнила стек. Обычно переполнение стека достигается, когда рекурсия написана неправильно и бесконечно вызывает себя. Актуально ли подобное поведение? Да ни разу.
0
RazrFalcon
1392 / 1249 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
21.02.2016, 16:02 9
Цитата Сообщение от Wyn Посмотреть сообщение
Актуально ли подобное поведение? Да ни разу.
Актуальна ли возможность ошибки в программе? Конечно.
0
Wyn
1059 / 641 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
21.02.2016, 19:56 10
Цитата Сообщение от RazrFalcon Посмотреть сообщение
Актуальна ли возможность ошибки в программе? Конечно.
Кто с этим спорит? В программе с ошибкой может быть всё что угодно. Вопрос, насколько я понял, в том, актуально ли переполнение стека в обычной программе, которая без ошибок.
0
8-BITOV
542 / 485 / 104
Регистрация: 05.05.2014
Сообщений: 1,110
21.02.2016, 20:53 11
Цитата Сообщение от Wyn Посмотреть сообщение
актуально ли переполнение стека в обычной программе, которая без ошибок.
Сомневаешься? Посчитай число Аккермана.
0
Croessmah
++Ͻ
15867 / 8995 / 1728
Регистрация: 27.09.2012
Сообщений: 22,103
Записей в блоге: 2
Завершенные тесты: 2
24.02.2016, 03:03 12
Цитата Сообщение от Wyn Посмотреть сообщение
Обычно переполнение стека достигается, когда рекурсия написана неправильно и бесконечно вызывает себя.
Рекурсия может быть очень глубокой, но это не значит, что она неправильная
Хотя если есть шанс, что рекурсия далеко зайдет,
то лучше искать другой путь или ограничивать всё это дело.
0
24.02.2016, 03:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2016, 03:03

Как лучше создавать cookie? На JS или PHP
Наверно, ответ очевиден - на php, ведь будет работать у всех, не зависимо от состояния JS на...

Создание полиморфного объекта, зачем создавать указатель на объект базового класса?
Зачем создавать указатель на объект базового класса: Base *A = new Derived Если можно сделать...

Как лучше создавать мувиклип - кодом или раскадровкой?
Такая ситуация: есть кнопка которая является мувиклипом. Первые n кадров содержат анимацию активной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.