Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Билдер vs Qt Дизайнер
Форум на CrossPlatform.RU > Курилка > Трёп
Страницы: 1, 2
AD
Цитата(kuler @ 21.1.2009, 15:34) *
в дизайнере сделать connect signal и он slot создаст

А эти вещи и не предполагаются для дизайнера. Вообще-то для лучшей наглядности и модифицируемости проекта лучше все connect(ы) писать ручками.
kuler
Цитата(AD @ 21.1.2009, 15:40) *
Вообще-то для лучшей наглядности и модифицируемости проекта лучше все connect(ы) писать ручками

ты com не использовал в приличных проектах? а то б знал для чего нужна atl. (в принципе mfc из тойже темы, но таккак считаю её полным авнищем то это плохой пример). Или stl юзал? а то щас у меня код написанный до меня, там надо отсортировать чтото, так ты чо, написан целый метод quicksort, видимо это круто.
Litkevich Yuriy
Цитата(kuler @ 21.1.2009, 18:34) *
и он slot создаст
а где он его создать должен?
AD
Цитата(kuler @ 21.1.2009, 16:04) *
Или stl юзал? а то щас у меня код написанный до меня, там надо отсортировать чтото, так ты чо, написан целый метод quicksort, видимо это круто.

К чему ты это? :) А вообще не понимаю с чего ты com приплел? Разве в atl есть дизайнер? Какая quicksort, самописная что-ли? :) Можно разжевать так, чтобы чайник вроде меня понял все! Заранее спасибо! :))))
kuler
Цитата(Litkevich Yuriy @ 21.1.2009, 16:05) *
а где он его создать должен?

ну у меня в студии в коде on_aFilter_triggered()
Цитата(AD @ 21.1.2009, 16:11) *
с чего ты com приплел? Разве в atl есть дизайнер?

а это тонкий намек, что с твоей позицией и atl не нужна ибо
Цитата(AD @ 21.1.2009, 15:40) *
Вообще-то для лучшей наглядности и модифицируемости проекта лучше все connect(ы) писать ручками.
Цитата(AD @ 21.1.2009, 16:11) *
Какая quicksort, самописная что-ли?

ну короче просто самописная сортировка
Litkevich Yuriy
Цитата(kuler @ 21.1.2009, 22:39) *
ну у меня в студии в коде on_aFilter_triggered()
не понял, что это и где это?

Дизайнер создает ui-файл (например foo.ui), затем при сборке из него с помощью uic создается ui_foo.h.
А использовать этот файл (либо foo.ui либо ui_foo.h) ты можешь самым разным способом. В файле foo.ui слот не разместишь, т.к. в XML'нике не предусмотрено место для кода (хотя в секцию CDATA можно, наверно, воткнуть). В файл ui_foo.h тоже нельзя, так как ты можешь хотеть динамически загружать foo.ui, да uic перетерает этот файл. Вот и получается, что нет места, где можно было бы разместить пользовательский слот.
Tonal
2 kuler Это ты о чём говоришь?
Дизайнер Qt вообще не поддерживает создание пользовательских слотов.
Может ты говоришь про интегратор для студии - тут я не в курсях. :)
Зато в ассистенте описано, что есть 2 метода привязывания слотов к сигналам формы:
1. Явно в коде с помощью connect. При этом можно связать как угодно.
2. Неявно, после создания интерфейса слоты с именами вида on_widgetName_signalName привязываются к сигналам соответствующих объектов.

Понятно, что во втором случае не о каком связывании с множеством виджетов рачи не идёт.
Да и вообще этот способ не рекомендован тролями и создаёт дополнительные трудности при рефакторинге.

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

Если смотреть с этой точки зрения на перечисленные тобой библиотеки, то:
stl - общие куски многих алгоритмов в обобщённом виде.
ATL - обёртка низкоуровневых концепций COM для С++.
Ни та не другая не пытается предоставлять свой сетевой протокол, играть звук или рендерить видио.

Ну и по поводу GUI - он должен быть как можно более развязан от логики. Т.е. все вычисления, проверки и т.д. должны быть оторваны от GUI-я.
Представь, что заказчику понравилась твоя мегапрограмма, и он захотел в следующей версии иметь к ней доступ по вебу с мобильника.
Не устанишь выковыривать логику из всех этих OnClick-ов? :)
Да и нанять дизайнера, чтобы он нарисовал красивый и удобный интерфейс просто не получится - он должен будет иметь навыки работы со средой и понимание связывания кода с рожей. :)
kuler
Цитата(Litkevich Yuriy @ 21.1.2009, 20:39) *
не понял, что это и где это?

on_aFilter_triggered()
{
}
это будет то что выполнится по нажатию на экшен aFilter.
Цитата(Tonal @ 22.1.2009, 9:09) *
т.е. независимым от остальных кусков.

то есть стл нельзя использовать, ибо идет зависимость?
AD
Цитата(kuler @ 22.1.2009, 12:00) *
Цитата
т.е. независимым от остальных кусков.

то есть стл нельзя использовать, ибо идет зависимость?

Ты неправильно понял мысль. Как раз наоборот. Эти библиотеки предоставляю ОБЩИЙ интерфейс для выполнения каких-то задач. Сами задачи должен реализовывать программист, как здесь были приведен пример, это предоставление сетевого протокола. В Билдере же как раз есть очень большая беда, что GUI-код зависит от логики напрямую. Что является большим минусом Билдера, а не плюса. Поэтому Билдер, возможно, удобно использовать в каких-нибудь очень небольших программах и утилитах - это будет быстрее. Но если следует разработать систему, которая впоследствии будет модифицироваться, при этом, возможно, другими людьми, то он непригоден для этих целей. И приведенные тобой библиотеки, относятся как раз к хорошим библиотекам, потому что в них реализована общая логика для большинства задач. Но при этом в них нет конкретной привязки к GUI или же реализации какой-нибудь конкретной задачи.
Litkevich Yuriy
Цитата(kuler @ 22.1.2009, 15:00) *
on_aFilter_triggered()
{
}
дак где это, в каком файле? ты его сам написал?
AD
Цитата(Litkevich Yuriy @ 22.1.2009, 12:56) *
дак где это, в каком файле? ты его сам написал?

Юра, этот слот пишется в файл класса данного виджета.
Ну то есть в указанный вот так:
class WidgetTest: public ui_WidgetTest, public QMainWindow
{
private:
        // .....
protected:
        // ..........
public slots:
        void on_aFilter_triggered();
};

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

При этом явного коннекта нет. Каким-то образом идет связь через moc-файлы (moc_<name>.cpp)
Litkevich Yuriy
Цитата(AD @ 22.1.2009, 16:19) *
Юра, этот слот пишется в файл класса данного виджета.
а как узнать этот файл? я пишу код в блокноте.
А если я вообще не хочу множественное наследование использовать? Куда тогда писать?
А если я использую такой вариант:
...
     QWidget *widget = new QWidget;
     Ui::CalculatorForm ui;
     ui.setupUi(widget);

...
}

Да и файл-то я еще не создал?

Цитата(AD @ 22.1.2009, 16:19) *
При этом явного коннекта нет. Каким-то образом идет связь через moc-файлы (moc_<name>.cpp)
это делается с помощью автоматического связывания (QMetaObject::connectSlotsByName(...))
AD
Цитата(Litkevich Yuriy @ 22.1.2009, 13:55) *
а как узнать этот файл? я пишу код в блокноте.
А если я вообще не хочу множественное наследование использовать? Куда тогда писать?
А если я использую такой вариант:
...
     QWidget *widget = new QWidget;
     Ui::CalculatorForm ui;
     ui.setupUi(widget);

...
}

Да и файл-то я еще не создал?

Если, если.... Если не создал, то и разговора нет! :)))) kuler создал. ;) 8)
kuler
Цитата(Litkevich Yuriy @ 22.1.2009, 13:55) *
а как узнать этот файл?

в студии, есть такой пункт project->add qt gui class после выбора и вписывания имени класса появляются 3 файла - cpp, h, ui.
Цитата(Litkevich Yuriy @ 22.1.2009, 13:55) *
А если я вообще не хочу множественное наследование использовать?

в диалоге есть галочка "юзать множественное наследование"

при нажатии правой клавишей на компоненте есть пункт connect signal там выбираешь, жмешь ок и все происходит как в билдере, при этом в cpp и h нет вызова connect

Цитата(Litkevich Yuriy @ 22.1.2009, 13:55) *
а как узнать этот файл?

студия сама распознает
void*
Цитата(AD @ 22.1.2009, 12:19) *
При этом явного коннекта нет. Каким-то образом идет связь через moc-файлы (moc_<name>.cpp)

Официальная книжка по Qt4 28 страница
Цитата
In the constructor, we call setupUi() to initialize the form. Thanks to multiple
inheritance, we can access Ui::GoToCellDialog’s members directly. After creat-
ing the user interface, setupUi() will also automatically connect any slots that
follow the naming convention on_objectName_signalName() to the corresponding
objectName’s signalName() signal. In our example, this means that setupUi() will
establish the following signal–slot connection:
connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(on_lineEdit_textChanged()));
kuler
Цитата(void* @ 22.1.2009, 16:54) *
connect any slots that
follow the naming convention on_objectName_signalName() to the corresponding
objectName’s signalName() signal.

на самом деле это стремно, ибо нельзя красиво назвать обработчик, в билдере можно
AD
Цитата(kuler @ 22.1.2009, 17:15) *
на самом деле это стремно, ибо нельзя красиво назвать обработчик, в билдере можно

Повторюсь, делай коннекты сам и называй, как душе угодно! ;) Поверь, это лучше. Легче отследить связи!
kuler
Цитата(AD @ 22.1.2009, 17:58) *
Легче отследить связи!

50 коннектов вручную? код засоряется такими действиями
AD
Цитата(kuler @ 22.1.2009, 18:01) *
50 коннектов вручную? код засоряется такими действиями

:) Если хочешь использовать Qt, то принимай правила игры, которые диктует эта библиотека, либо используй другие библиотеки! Другого вряд ли посоветуешь! Ну вот так она устроена. На всех нельзя угодить. :) Не обижайся, просто по-другому не объяснить! :)
trdm
Цитата(kuler @ 22.1.2009, 18:01) *
код засоряется такими действиями

ие...
а ты не мусори, а пиши по-делу...
Litkevich Yuriy
kuler, во-первых, применительно к IDE это действительно можно реализовать.
Во-вторых,
Цитата(kuler @ 22.1.2009, 21:01) *
50 коннектов вручную? код засоряется такими действиями
именно 50 коннектов, действительно засоряет код, не делай так, используй инструмент (Qt) рационально, пользуйся QSignalMapper. У меня есть приложение, модно называющееся SCADA система, у меня меньше 10(!) ручных соединений, и использовано 4(!) файла UI.

однако представляющее 11 отчетов и свыше 15 конфигурационных диалогов. Большую часть нагрузки по соединению сигналов взял на себя QSignalMapper
E5150
Цитата(AD @ 18.12.2008, 12:19) *
Цитата(Tonal @ 18.12.2008, 11:58) *

:D :D :D :D :D
Неужели ты тоже так считаешь?

На мой взгляд, если элемент, сделанный в дизайнере, описывается 3-5 строчками - то это хороший дизайнер и хорошая библиотека! :) Qt - именно такая Тем более, что в Qt это сделано через внятные и качественные классы. Дерево наследования классов прозрачно и понятно. Что может в этом не нравится? :blink:

В билдере нет внятных элементов, нет внятного описания, нет понятных методов. Могу сказать, что, когда я начал программить на С/С++, моими первыми компиляторами были Turbo C (полгода), а потом - Visual C++ 6.0 [хороший компилятор даже на сегодняшний день], поэтому я привык делать вещи, которые вообще-то принято делать руками, делать руками (:)). Билдер (на нем я тоже программил и, бывает программлю, к сожалнию, приходиться по работе) - это конструктор ЛЕГО, не более того, а если хотите программировать, то с него надо уходить. ;)


я с вами не соглашусь относительно компиляторов, т.к. сам сравнивал VS2005(MFC), VS2008(MFC), CBuilder-2007(VCL) и CBuilder-2009(VCL) на двух разных машинах, компилировал пустое окно, в Билдерах время компиляции (Build - сборка exe-файла) не более 5 секунд, в VS около 30 секунд или более. А вот если создать проект в .NET допустим тоже пустое окно, то оно компилится ну почти мгновенно, но .NET не в счёт, о ней отдельный разговор!
Qt+MinGW компилится очень........ долго...

создавать проекты в CBuilder-2009(VCL) куда более удобно понятно и доступно нежели например, в VS2008(MFC), купил и не жалею! и если получится научится Qt, то возможно буду в ней делать проекты параллельно для Маков и Люнуксов, но на VS уж точно не буду переходить, даже не смотря на то, что она (Express) безплатная!!
kuler
Цитата(E5150 @ 14.2.2009, 22:27) *
в VS около 30 с

пустой проект qt из одной формы тоже секунд 5 билдится
Tonal
Цитата(E5150 @ 15.2.2009, 1:27) *
создавать проекты в CBuilder-2009(VCL) куда более удобно понятно и доступно нежели например, в VS2008(MFC), купил и не жалею! и если получится научится Qt, то возможно буду в ней делать проекты параллельно для Маков и Люнуксов, но на VS уж точно не буду переходить, даже не смотря на то, что она (Express) безплатная!!

Использовать параллельно CBuilder (VCL) для винды и Qt для остальных в принципе можно, если основной код хорошо отделён от гуйни и не использует классов ни VCL ни Qt.
Ну и если вспомнить, что С++ от багланда наиболее глючный и нестандартный из всех распространённых, то придётся довольно, э..., аккуратно писать этот основной код. :)

Ну а насчёт скрости компиляции - настрой прекомпиленные хедеры и возьми машинку по мощнее. :)
AD
Цитата(kuler @ 16.2.2009, 13:58) *
Цитата(E5150 @ 14.2.2009, 22:27) *
в VS около 30 с

пустой проект qt из одной формы тоже секунд 5 билдится

Приятно, когда человек начинает видеть не только черное и белое! :))))
kuler
мне кажется или у лэбела нельзя в дизайнере настроить цвет шрифта?
BRE
Цитата(kuler @ 16.3.2009, 17:30) *
мне кажется или у лэбела нельзя в дизайнере настроить цвет шрифта?

StyleSheet ?
kuler
а еще при попытке через дизайнер подрубить слот пишет что не может найти класс который юзает эту форму - как настроить?
AD
Цитата
а еще при попытке через дизайнер подрубить слот пишет что не может найти класс который юзает эту форму - как настроить?

Мне удалось исправить такую ошибку одним методом - писать коннекты ручками!
aus2007
Оригинально ;)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.