LINUX.ORG.RU

[Qt] Модели-представления

 


0

0

Никак не могу постичь сей подход к программированию.

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QAbstractItemModel *model;

    QListView *view = new QListView;
    view->setModel(model);
    view->show();

    return app.exec();
}

Почему прога валится с сегфолтом на строчке

view->setModel(model);
? Что я в этом коде сделал не так?


Ответ на: комментарий от staseg

Пишу так:

QAbstractItemModel *model = new QAbstractItemModel;

Выдаёт:

src/newfile.cpp:7: ошибка: cannot allocate an object of abstract type ‘QAbstractItemModel’

Я в C++ ещё довольно зелёный, если что, многого не понимаю.

fedyan
() автор топика
Ответ на: комментарий от fedyan

>Я в C++ ещё довольно зелёный, если что, многого не понимаю.

ты пытаешься создать объект абстрактного класса, а это делать нельзя (на то он и абстрактный).

alex_custov ★★★★★
()
Ответ на: комментарий от fedyan

Поменял Abstract на Standard, всё нормально запустилось. А чего такого в Abstract не хватало для запуска?

fedyan
() автор топика
Ответ на: комментарий от fedyan

общая идея там понятна - model хранит и предоставляет клиентам какую-то конкретную реализацию какой-то сущности - файловой системы, SQL запросов и т.д. View предосталяет просмотр той модели, которую ему передали.

Если ты подцепишь модель файловой системы к listview, увидишь содержимое своего диска в виде вертикального списка, если к treeview - в виде дерева и т.д. Аналогично и со всеми другими моделями.

Программировать GUI на таком можно аытаться только для больших проектов, там где модульность имеет вес. Для малкнькиз проектов я бы советовал использовать по старинке QListWidget, QTreeWidget и т.д.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Это я понял, а не понял, почему с Abstract не запускается. Чего такого в него добавляют в производных классах, что он внезапно становится рабочим? Если можно, то просто в двух словах, чтобы уловить суть.

fedyan
() автор топика
Ответ на: комментарий от placement_new

> Думаю стоит изучить С++ прежде чем на нем писать.

Лучшее обучение - на конкретных примерах. А на модели/представлении выбор остановился, потому как возможно в будущем придётся иметь с ней дело.

fedyan
() автор топика
Ответ на: комментарий от fedyan

Абстрактные классы содержат чистые виртуальные функции, т.е. функции, не имеющие реализации. Их можно(нужно) реализовать в производных классах. Создать экземпляр класса, содержащий не реализованную функцию нельзя.

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

Далее от это класса создадим производные классы: Треугольник, Квадрат, Окружность и т.д. В них уже функция вычисления площади будет реализована для каждого класса своя. И можно смело создавать объекты.

anonymous
()
Ответ на: комментарий от fedyan

Дело не в Qt, а в языке. Невозможно создать объект абстрактного класса. Нигде, ни в С++, ни в Java. Невозможно по той простой причине, что абстрактный класс подразумевает наличие нереализованных методов.

Ian ★★
()
Ответ на: комментарий от fedyan

> Лучшее обучение - на конкретных примерах.

Ты сейчас на примерах пытаешься выучить сразу 3 вещи: C++, Qt и MVC как таковой. Это перебор, так ты, во-первых, замучаешься, во-вторых, будешь иметь крайне поверхностное представление о всех 3.

kemm
()

Спасибо всем ответившим.

fedyan
() автор топика
Ответ на: комментарий от kemm

Согласен. :) Ладно, попробую чего попроще.

fedyan
() автор топика

Ну вот разрекламировали Qt на этом вашем ЛОРе. Щас школьники будут набигать. Сначала выучат быстренько все после обеда, потом начнут мегапроект, а через неделю будут орать, мол "не нужен этот Qt со своими непонятными виртуальными моделями представлений и абстрактными контроллерами делегатов!!1 GNOM нашо всеоо!!111"

anonymous
()
Ответ на: комментарий от anonymous

Оно уже именно так лет несколько, разве нет? 8))

kemm
()
Ответ на: комментарий от fedyan

>Лучшее обучение - на конкретных примерах
Лучшее обучение - с помощью конкретных примеров.
fixed.

в общем, пока не ознакомишься хотя бы со списком фич C++ (или любогоо другого языка) даже не суйся в программирование на нем. итак от быдлокодеров спасу нет...

xydo ★★
()
Ответ на: комментарий от xydo

> в общем, пока не ознакомишься хотя бы со списком фич C++ (или любогоо другого языка) даже не суйся в программирование на нем. итак от быдлокодеров спасу нет...

Месье у нас вовсе даже небыдлокодер? А кто? Очень интересно посмотреть на списочек проектов, в которых вы принимали непосредственное участие.

anonymous
()
Ответ на: комментарий от fedyan

>А на модели/представлении выбор остановился, потому как возможно в будущем придётся иметь с ней дело.
s/возможно//
т.к. это наиболее абстрагированный подход к программированию, и как следствие легко реконфигурируемый. когда реализуешь хоть один крупный проект, написанный подходом MV/MVC, поймешь, что вещь эта офигенная.

xydo ★★
()
Ответ на: комментарий от anonymous

о-хо-хо...
это не те дроиды, которых вы ищете (с) Obi-Wan
и список мои проектов тебя не касается!

xydo ★★
()
Ответ на: комментарий от anonymous

> Ну вот разрекламировали Qt на этом вашем ЛОРе.

Выбрал осознанно.

> Сначала выучат быстренько все после обеда, потом начнут мегапроект, а через неделю будут орать, мол "не нужен этот Qt со своими непонятными виртуальными моделями представлений и абстрактными контроллерами делегатов!!1

Предпочитаю в холиварах на эту тему не участвовать. И да, я знал, что так просто MVC не осилить, но тем не менее, заранее почитав статьи в интернете, остановил на нём свой выбор.

fedyan
() автор топика
Ответ на: комментарий от xydo

> в общем, пока не ознакомишься хотя бы со списком фич C++ (или любогоо другого языка) даже не суйся в программирование на нем.

Мне, как возможно и любому другому человеку, не интересно осиливать C++ по примерам из учебника, дающих голый вывод в консоль каких-нибудь математических задачек. Куда интереснее, нагляднее, понятнее, видеть результат в том виде, из-за которого, собственно и требуется его начать учить, или хотя бы близкий к нему. В данном случае - требуется GUI'шная приблуда, вот и начал учить с Qt. И кстати, у меня был вариант сбацать это дело по-быстрому на коленке на Lazarus+FPC, но не стал.

> итак от быдлокодеров спасу нет...

Потешили своё ЧСВ? :)

fedyan
() автор топика
Ответ на: комментарий от xydo

> т.к. это наиболее абстрагированный подход к программированию, и как следствие легко реконфигурируемый. когда реализуешь хоть один крупный проект, написанный подходом MV/MVC, поймешь, что вещь эта офигенная.

Спасибо. По крайней мере, теперь понятно что выбор правильный сделал.

fedyan
() автор топика
Ответ на: комментарий от fedyan

>Потешили своё ЧСВ? :)
нет, просто вздохнул с сожалением...

>Мне, как возможно и любому другому человеку, не интересно осиливать C++ по примерам из учебника

я тебе этого и не предлагал.
предлагал просто ознакомиться со списком фич: что есть в языке, что он позволяет делать и хотя бы с основными терминами.
нормальной практики без какой-либо теории быть не может, даже если они потом будут друг другу противоречить.

xydo ★★
()
Ответ на: комментарий от xydo

> предлагал просто ознакомиться со списком фич: что есть в языке, что он позволяет делать и хотя бы с основными терминами.
> нормальной практики без какой-либо теории быть не может, даже если они потом будут друг другу противоречить.


Ну в принципе, основные термины я знаю, правда тут вопрос наверно в том, что значит "основные" и как каждый это слово понимает.

Наследование, полиморфизм и так далее - да, читал про это, но на деле не пробовал, а следовательно, не уяснил на достаточном уровне.

fedyan
() автор топика

> Модели-представления

facepalm.jpg.exe

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.