LINUX.ORG.RU

[Qt] Разработка с помощью designer

 


0

0

А при написании кутешных приложений реально ли пользоваться designer'ом или нет? Я вот попытался им что-то нарисовать, потом добавить функционал, затем скомпилять. Но вот когда потом захотел внести ещё изменения в интерфейс - мне что, заново вставлять куски кода в сгенеренные сорцы? Чего-то я не понимаю. В результате, пишу по-старинке всё в редакторе, без рисования гуйнюшки в дезигнере. Какие подводные камни?

anonymous

qt3 или qt4?

Ибо наследоватся надо батенька, а не куски в сгенеренный сорс вставлять.

imp ★★
()

>>мне что, заново вставлять куски кода в сгенеренные сорцы

для таких, извини, дураков, Тролли специальную вставку сделали: "WARNING! All changes made in this file will be lost when recompiling ui file!"

Для Qt3 нужно 2 раза кликнуть по пустому месту на форме, создасть .ui.h файл, и внём прописывать дополнительные методы, которые необходимы. Сигналы (как и всё остальное) можно добавить справа вверху в панели Object Explorer.

Для Qt4 форма - это всего лишь описание интерфейса. Функционала в ней почти нет. Поэтому нужно от неё наследоваться и писать свой функционал в наследнике.

И вообще, открываем Assistant и читаем Qt Designer Manual, что и надо было сделать вначале.

alex_custov ★★★★★
()

Да здравствует множественное наследование !

hexenlord
()

в designer - только рисовать. Всё остальное делать наследованием. А можешь для облегчения труда скачать qdevelop. Там всё немного более понятно.

Vitaly-KF
()

Раздел справки по Qt Designer
Using a Component in Your Application

Способ множественного наследования подходит в большинстве случаев (ИМХО), вот код из справки:

#include "ui_calculatorform.h"

class CalculatorForm : public QWidget, private Ui::CalculatorForm
 {
     Q_OBJECT

 public:
     CalculatorForm(QWidget *parent = 0);

 private slots:
     void on_inputSpinBox1_valueChanged(int value);
     void on_inputSpinBox2_valueChanged(int value);
 };

 CalculatorForm::CalculatorForm(QWidget *parent)
     : QWidget(parent)
 {
     setupUi(this);
 }

kod-x
()

есть от троллей книга "Qt4: программирование GUI на C++", авторы:жасмин бланшет и марк саммерфилд.

почитай ее, и у тебя все сразу станет на места

z0D5e8n7x
()
Ответ на: комментарий от kod-x

Можно и не наследоваться

#include "ui_calculatorform.h"

class CalculatorForm : public QWidget
{
Q_OBJECT

public:
CalculatorForm(QWidget *parent = 0);

private slots:
void on_inputSpinBox1_valueChanged(int value);
void on_inputSpinBox2_valueChanged(int value);
private:
Ui::CalculatorForm ui;
};

CalculatorForm::CalculatorForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}

Такой код генерит и мастер в плагине к эклипсу. Код переписал не глядя так что не пинайте:)

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

На самом деле агрегация одного экземпляра - практически то же самое, что и приватное наследование.

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

Честно говоря, книга Макса Шлее понравилась больше. Там больше примеров и написано доступно, чего не скажешь о книге от троллей.

kod-x
()
Ответ на: комментарий от olegk

На практике вышло так, что наследовать удобнее, не надо постоянно ссылаться на форму (вида ui.myWidget...) а использовать имена виджетов формы прямо в коде.

По поводу общего вопроса: как уже было сказано - designer есть генератор форм, наполнение кода уже идёт в редакторе. Но не надо забывать про то, что в дизайнере можно вставлять свои виджеты, через функцию promote, либо создав плагины для дизайнера из своих виджетов (об этом хорошо написано в справке).

kod-x
()

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

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