Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sinj от Май 19, 2009, 14:38



Название: подключение формы в qt
Отправлено: sinj от Май 19, 2009, 14:38
Доброго времени суток!

Стоит задача подключить форму, которую создал в designere и добавил в проект. Работаю в creatore. Не могу разобраться. Имеется файл form2.ui. Чего с ним дальше делать не знаю...


Название: Re: подключение формы в qt
Отправлено: spirit от Май 19, 2009, 15:08
открываем справку по Qt Designer в Qt Assistant и ищем раздела Using a Component in Your Application.


Название: Re: подключение формы в qt
Отправлено: sinj от Май 20, 2009, 09:02
Спасибо. Что-то нашел, но английский не знаю... А по русски нагуглить понятный пример не смог. Может кто-то поделится ссылкой?


Название: Re: подключение формы в qt
Отправлено: spirit от Май 20, 2009, 09:23
в общем так:
-- создаешь форму в Qt Designer;
-- подключаешь ее к проетку (нужно отредактировать pro-файл) добавив
Цитировать
HEADERS += <your_widget_name_which_use_a_ui>.h
FORMS += <your_form_name>.ui
HEADERS += <your_widget_name_which_use_a_ui>.cpp
your_widget_name_which_use_a_ui -- имя файла в котором будет использоваться ui;
your_form_name -- имя ui  файла.
-- создаешь файл, который будет использовать ui файл.
есть три варианта использование ui файла.
первый (множественное наследование).
Код
C++ (Qt)
#include "ui_myform.h"
#include <QWidget>
 
class MyWidget: public QWidget, private Ui::MyWidget
{
...
public:
   MyWidget(QWidget *parent = 0)
       :QWidget(parent)
   {
       setupUi(this);
   }
};
 
второй (использование члена-класса).
Код
C++ (Qt)
#include "ui_myform.h"
#include <QWidget>
 
class MyWidget: public QWidget
{
...
public:
   MyWidget(QWidget *parent = 0)
       :QWidget(parent)
   {
       m_ui.setupUi(this);
   }
 
private:
   Ui::MyWidget m_ui;
};
 
третий (использование указателя на форму в виде члена-класса).
h-file
Код
C++ (Qt)
#include <QWidget>
 
namespace Ui {
   class MyForm;
}
 
class MyWidget: public QWidget
{
...
public:
   MyWidget(QWidget *parent = 0);
   ~MyWidget();
 
private:
   Ui::MyWidget *m_ui;
};
cpp-file
[code=cpp]
#include "myform.h"
#include "ui_myform.h"
 
MyWidget::MyWidget(QWidget *parent)
   :QWidget(parent), m_ui(new Ui::MyForm())
{
   m_ui->setupUi(this);
}
 
MyWidget::~MyWidget()
{
   delete m_ui;
   m_ui = 0;
}
 

ПРИМЕЧАНИЕ: заголовочный файл формы генерируется автоматически при помощи uic
и поэтому он всегда начинается с ui_...h.[/code]


Название: Re: подключение формы в qt
Отправлено: kuzulis от Май 20, 2009, 09:26
Цитировать
Работаю в creatore.

А попробуйте без креатора обоитись.. и погуглите на предмет поиска книг в электронном виде по QT на русском языке
с ходу могу посоветовать:  
"QT4 : программирование QUI на С++"  Жасмин Бланшет, Марк Саммерфилд, КУДИЦ-ПРЕСС Москва, 2007


Название: Re: подключение формы в qt
Отправлено: sinj от Май 20, 2009, 10:24
Разобрался. Спасибо.


Название: Re: подключение формы в qt
Отправлено: break от Май 24, 2009, 00:45
Код:
А попробуйте без креатора обоитись..
- а он то чем виноват?


Название: Re: подключение формы в qt
Отправлено: sinj от Май 25, 2009, 13:18
вы можете подсказать альтернативу креатору? Мне казалось, что он вполне удобный. Да и пока что более оптимальным кажется вариант использования этого средства разработки. Хочу еще попробовать qt на студии. Вручную, извините, пока писать не могу, т.к. проект большой. Да и вообще я только учусь.


Название: Re: подключение формы в qt
Отправлено: Авварон от Май 25, 2009, 15:17
обойтись без креатора в данном случае значит сделать ручками, там и про книги упоминание есть (тнкий намек, что в книгах написано как сделать ручками)


Название: Re: подключение формы в qt
Отправлено: sinj от Май 25, 2009, 20:57
И не пытаюсь спорить.  Дело в том, что есть ли смысл досконально тратить огромное количество времени на изучение, когда разработчики предоставили вполне понятный диалог, возможностей которого хватит для реализации задачи? Согласен с Вами, что необходимо сидеть и разбираться во всем досконально, но когда нет времени? Видимо поэтому написал в раздел для новичков, надеясь на помощь, а не рекомендацию подучить матчасть.


Название: Re: подключение формы в qt
Отправлено: Авварон от Май 25, 2009, 21:08
огромное количество времени == 3 часа на прочтение первых глав любой книги по qt. И да, время потратить стоит (в этом случае), так далеко не всё можно сделать из дизайнера (по крайней мере быстро и не ковыряя сам дизайнер).


Название: Re: подключение формы в qt
Отправлено: break от Май 26, 2009, 05:56
QtCreator - действительно хороший инструмент, наша команда перешла на него после долгой работы с KDevelop, но всякие там классы для форм я создаю вручную чтобы точно знать что там у меня есть и как называется, т.е. для более полного контроля, хотя креатор это тоже может. А вот всякие там коннекты с сигналами - только в коде т.к. это 100% более верный и контролируемый путь. Кроме того креатор и его втроенный дизайнер имеет ряд ошибок кот. например нет во внешнем QtDesigner.


Название: Re: подключение формы в qt
Отправлено: EarlGray от Октябрь 24, 2009, 16:35
Я тоже новичок, пока что от работы со встроенным дизайнером QtCreator'a явно плохие впечатления. Это следствие того, что я не умею работать в нём или следствие его неудобности? Найти примеры работы с ним почти нереально — почти все тьюториалы о чистом Qt и программировании интерфейса ручками. Но если есть графическое средство, наглядное. то зачем тратить кучу времени (особенно новичку, который часто создает новые учебные проекты) на создание азов?!


Название: Re: подключение формы в qt
Отправлено: Igors от Октябрь 24, 2009, 17:01
Я лично предпочитаю создавать формы в дизайнере а потом грузить их как ресурсы. Так я не имею "вражеского кода" но могу что-то править интерактивно. Ну а "программирование в QCreator" за пределами моего понимания :)


Название: Re: подключение формы в qt
Отправлено: mike_price от Ноябрь 12, 2009, 07:09
Возьмём пример Бланшета во второй главе; прошу прощения за разжёванность, но мне надо понять один раз)
- создаём gotocelldialog.ui в Designer
- кидаем в папку с проектом где уже есть main.cpp:
Код:
#include <QApplication>
#include <QDialog>

#include "ui_gotocelldialog.h"

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

    Ui::GoToCellDialog ui;
    QDialog *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog->show();

    return app.exec();
}

- создаём gotocell.pro
     qmake -project
- создаём проект для студии
     qmake -tp vcapp

В итоге файл ui_gotocelldialog.h не появляется?!

содержимое gotocell.pro:
Код:
TEMPLATE    = app
 FORMS       = gotocelldialog.ui
 SOURCES     = main.cpp


Название: Re: подключение формы в qt
Отправлено: gmorgunov от Ноябрь 12, 2009, 16:35
Класс Ui::GoToCellDialog - это полуфабрикат, посмотрите файл ui_gotocelldialog.h - там даже нет конструктора. Если доработать вот так, то диалог появится:
Код:
#include <QApplication>
#include <QDialog>

#include "ui_gotocelldialog.h"
class GoToCellDialog : public QDialog, public Ui::GoToCellDialog
{
  
public:
    GoToCellDialog(QWidget *parent = 0):QDialog(parent)
    {
         setupUi(this);
    }
};

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

    Ui::GoToCellDialog ui;
    QDialog  *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog->show();

    return app.exec();
}
Далее: qmake -project; qmake; make
По-моему для начинающих лучше книга Макса Шлее.
 


Название: Re: подключение формы в qt
Отправлено: gmorgunov от Ноябрь 12, 2009, 18:50
Присмотрелся повнимательней, лучше вот так:
Код:
QApplication app(argc, argv);

    /*Ui::GoToCellDialog ui;
    QDialog  *dialog = new QDialog;
    ui.setupUi(dialog);
    dialog->show();*/
    GoToCellDialog *gc = new GoToCellDialog;
    gc->show();


Название: Re: подключение формы в qt
Отправлено: mike_price от Ноябрь 12, 2009, 20:53
всё равно файл ui_gotocelldialog.h не генерируется из gotocelldialog.ui

ещё и ошибка появляется
fatal error C1083: Cannot open include file: 'QApplication': No such file or directory
попробую Шлее почитать
=====================
уже разобрался)
поставил с офф сайта плагин для вижуалки.
теперь всё более цивилизованно. никаких qmake  - всё компилится)