Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: lenny от Февраль 09, 2011, 16:11



Название: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 09, 2011, 16:11
Здравствуйте! Подскажите, что такое ui? Создаю форму и класс в Creator-е. Хочется иметь доступ к ui как к public. Даю доступ public, не работает, причем в creator-е в вываливающемся списке после ввода селектора класса ui все равно рисуется с замком, если закрыть проект и снова открыть ui без замка, но доступа нет. Делал метод возвращающий указатель, его успешно получаю, пользоваться не могу.

Код:
#include <QDialog>          //Это создает Creator
#include "ui_dialog.h"

namespace Ui {
    class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
public:
    Ui::Dialog *ui;
};

Хотелось бы иметь такую возможность Dialog d; d.ui->бла-бла-бла.
Код:
#include <dialog.h> 
MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWidget)
{
    ui->setupUi(this);
    Dialog *d = new Dialog(this);
    d->ui->pushButton->setText("------");          //Не работает, ругается
    d->open();
}

Пошел путем наследования
Код:
#include <QDialog>
#include "ui_dialog.h"
class Dialog : public QDialog, public Ui::Dialog
{
    Q_OBJECT

public:
    explicit
    Dialog(QWidget *parent = 0): QDialog(parent), Ui::Dialog()
    {
        setupUi(this);
    }
};

Работает! Но при изменении формы глючит, приходится пересобирать проект.


Название: Re: Что такое ui в Qt Creator
Отправлено: Странник от Февраль 09, 2011, 16:46
Борис, ты не прав! Требование инкапсуляции еще никто не отменял)


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 09, 2011, 16:58
Данный случай, правилам инкапсуляции С++ противоречит, или у меня пробелы в знаниях.
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    Ui::Dialog *ui;

А случай с наследованием показывает, что члены Ui::Dialog открыты.                             


Название: Re: Что такое ui в Qt Creator
Отправлено: smackthat от Февраль 12, 2011, 16:46
Создавай элементы gui вручную и меняй их как хочешь. На примере Paintings -> basic drawing можно посмотреть.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 13, 2011, 12:38
Руками(кодом) начинал изучая qt, хочется более быстрой разработки с теми же возможностями. В принципе вариант с наследованием ui меня полностью устраивает. Странно что ui в виде объекта странно себя ведет. Подниму немного знания C++, может чего не понимаю.


Название: Re: Что такое ui в Qt Creator
Отправлено: b-s-a от Февраль 14, 2011, 23:24
ui - это лишь обертка для набора элементов, генерируемых на этапе компиляции из формы дизайнера. Использовать ее извне класса формы - моветон. Смотри, если сделать как ты хочешь, при изменении имени элемента в форме, после этого придется менять в 10 файлах. В одном же проще! Более того, посмотри как используется инкапсуляция в самой Qt. Ты где видел, чтобы у стандартного класса можно было получить доступ к ui?!? Нет такого. Вот и ты пиши. Придумай интерфейс (API) формы: что на входе, что на выходе. А все остальное инкапсулируй внутри класса формы.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 15, 2011, 11:08
Спасибо! Действительно не красиво получается. На сам qt для мне весьма полезно посмотреть. А с объектом ui все в порядке, зря я на него нагнал, не знаю что там было, тот проект я удалил.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 15, 2011, 12:49
ui - это лишь обертка для набора элементов, генерируемых на этапе компиляции из формы дизайнера.
Как-то не так я qt creator изучать стал, может delphi или .net подействовали. Вначале не мог найти файлы ui_....h подумал, что они не существуют или еще чего. Почитал теории, нашел ui_..h. Теперь все просто и понятно.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 17, 2011, 11:17
Здравствуйте! Возник глупый вопрос. Если у меня на форме имеется виджеты для которых необходимо использовать drag and drop, то следует их создавать вне дизайнера? Чтоб переопределить/определить функции dragEnterEvent и т.д. Или есть какой нибудь другой способ? Или сразу делать заготовку формы в дизайнере, брать файл ui_....h и забивать на дизайнер? Вроде можно и так и сяк. Какой подход лучше реализовывать?


Название: Re: Что такое ui в Qt Creator
Отправлено: Авварон от Февраль 17, 2011, 11:49
использовать "promote to..." в дизайнере


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 17, 2011, 13:22
использовать "promote to..." в дизайнере
Не нашел "promote to..." у меня все на русском, а что это?


Название: Re: Что такое ui в Qt Creator
Отправлено: ruzik от Февраль 17, 2011, 13:27
Преобразованные виджеты


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 17, 2011, 13:40
Поковырялся с преобразованием, ничего пока не получилось. Насколько понял, должен получится класс унаследованный от преобразованного виджета, записаться в отдельный файл, включиться в ui_...h, а потом в классе ui_тырыпыры создаться объекты этих классов. Вот тока файлов преобразованных я не нашел и creator тоже. Куда они выгружаются ???


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 17, 2011, 13:48
Поиск по диску ничего не дал ???, ну и фиг с ним. Руками не сложно написать.


Название: Re: Что такое ui в Qt Creator
Отправлено: b-s-a от Февраль 17, 2011, 21:07
Ты видимо не очень понял, что такое "promote to"... Ты пишешь свой виджет, например, MySuperComboBox, наследник QComboBox. Чтобы не создавать его на форме ручками, ты кидаешь QComboBox, жмешь правой кнопкой мыши и выбираешь пункт "Преобразовать в". Затем в появившемся окне пишешь MySuperComboBox, выбираешь базовый виджет (в данном случае QComboBox), проверяешь название включаемого хидера, при необходимости включаешь галочку "глобальное включение" (это чтобы инклюды были с угловыми скобками, а не кавычками; в случае, если виджет находится в проекте, достаточно кавычек) и жмешь "добавить"...


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 18, 2011, 09:34
Видать все равно не понимаю ??? Думал(и до сих пор думаю), что получу пользовательский класс-наследник класса преобразованного виджета.


Название: Re: Что такое ui в Qt Creator
Отправлено: b-s-a от Февраль 18, 2011, 12:31
нет. дизайнер вообще за код не отвечает. Он лишь генерирует XML файл с расширением ui, в котором хранится набор объектов с измененными атрибутами. А операция "promote to" позволяет переложить на ui функцию создания на окне виджетов, отличных от стандартных. Проще говоря, если ты сделаешь то, что я описал в предыдущем посте, то в ui добавится информация, что на самом деле виджет должен быть класса MySuperComboBox, а uic ("компилятор" ui -> _ui.h) вместо new QComboBox, сделает new MySuperComboBox. ВСЕ! Больше отличий нет.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 18, 2011, 13:30
Спасибо!!! Понял :) Что-то я все не стой стороны на этот Qt creator смотрю.


Название: Re: Что такое ui в Qt Creator
Отправлено: ruzik от Февраль 18, 2011, 14:01
Спасибо!!! Понял :) Что-то я все не стой стороны на этот Qt creator смотрю.
Нет на Creator вы с той стороны смотрите-это IDE, вы не с той стороны на дизайнера смотрите


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Февраль 18, 2011, 17:34
Нет на Creator вы с той стороны смотрите-это IDE, вы не с той стороны на дизайнера смотрите
Точно дизайнер, он не так и плох, все довольно логично.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Март 02, 2011, 22:01
Появилась еще одна непонятка. Иногда, после долгих манипуляций в дизайнере, объекты от ново-добавленных виджетов не увидеть в вываливающемся списке редактора кода при вводе селектора класса(типа ui. или ui->). Это не критично, но как напасть какая то. У меня это с DirectX6 в VS2001 началось, и во вех IDE это преследует.


Название: Re: Что такое ui в Qt Creator
Отправлено: Sahab от Март 03, 2011, 09:58
сохраняй ui файл. Креатор обновит модель кода.
если не поможет = попробовать скомпилировать, чтоб uic создал хидер.


Название: Re: Что такое ui в Qt Creator
Отправлено: lenny от Март 04, 2011, 08:18
Спасибо! Помогает удаление и создание снова хедеров.