Russian Qt Forum

Qt => Вопросы новичков => Тема начата: makar182 от Август 21, 2014, 15:57



Название: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 15:57
Добрый день, форумчане

После автоматического создания класса формы Qt Designer, типичный заголовочный файл формы выглядит так:

myDialog.h
Код:
#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>

namespace Ui {
class myDialog;
}

class myDialog : public QDialog
{
    Q_OBJECT

public:
    explicit myDialog(QWidget *parent = 0);
    ~myDialog();

private:
    Ui::myDialog *ui;
};

#endif // MYDIALOG_H

Объясните, пожалуйста, для чего мы записываем имя класса в пространство имен "UI"
Код:
namespace Ui {
class myDialog;
}

И почему, создавая новый член класса, мы используем вызов с указанием пространства имен?
Код:
private:
Ui::myDialog *ui;

Конечно, можно на это не обращать внимания, создалось и слава Богу, но все же хотелось бы понять, откуда такая нужда?


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Igors от Август 21, 2014, 16:14
Не нужда а умность (в хорошем смысле). Пространство имен Ui подчеркивает что все в нем может быть изменено интерактивно, в дызайнере. Написав Ui:: мы четко видим что это привязано к форме (той самой). Хорошо это или плохо - то по-всякому, но выделить это необходимо.

Как дела? Нашли заказ или так, тренируетесь на кошках (неэффективно  :))


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 17:05
Цитировать
Как дела? Нашли заказ или так, тренируетесь на кошках (неэффективно  Улыбающийся)

Закончил разбирать лекции Nokia для начинающих, что-то новое узнал, но проблема в том, что те лекции выложены отрывками.

Нашел в интернете архив видеоуроков от какого-то парня. Уроки хорошие, чисто практические, то, что нужно. Эти занятия -последний рубеж перед полноценной практикой (в принципе начав эти уроки я и начал хоть какую-то практику).

Заказов еще не брал, потому, что я откровенно путаюсь в базовых вещах и зачастую не могу разобрать всплывающую схему написания той или иной команды  ;D Так что, решил сейчас повторить все за ведущим этого курса (курс достаточно полный и краткий) вручную, а потом написать свою собственную простенькую программу - записную книжку с напоминаниями или вроде того, а там дальше посмотрим. Вобщем, надо что-то сделать от А и до Я, чтобы почувствовать себя уверенно и просить заказы :), а то сейчас я их только завалю. Да и, по правде говоря, никто не откликнулся на предложение бесплатного сотрудника (я его тут же на форуме размещал). А на сайтах фриланса, как пить дать, попросят портфолио и т.п.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Bepec от Август 21, 2014, 18:12
На деле есть 2 варианта объявления UI.
Креатор делает через namespace в h-нике.
Addin использует namespace из ui_*.h файла.

Вот пример из аддина
Код:
#include "ui_extensionsorter.h"

class ExtensionSorter : public QWidget
{
Q_OBJECT

public:
ExtensionSorter(QWidget *parent = 0, Qt::WFlags flags = 0);
~ExtensionSorter();

private:
Ui::ExtensionSorterClass ui;
}

Мне больше нравится второй вариант - отсутствует непонятное объявление namespace :)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Igors от Август 21, 2014, 19:08
...чтобы почувствовать себя уверенно и просить заказы :), а то сейчас я их только завалю. Да и, по правде говоря, никто не откликнулся на предложение бесплатного сотрудника (я его тут же на форуме размещал). А на сайтах фриланса, как пить дать, попросят портфолио и т.п.
Мне приходится выступать в роли заказчика (для меня тягостной) - чихал я на то портфолио. Даже наоборот, если человек чересчур упорно/настойчиво рекламирует себя - толку скорее всего не будет. Размещать объявление здесь - ну не вредно, но шансов немного. Пока смущает фриланс - хорошо, тогда возьмите форумы попроще, там много нерадивых студентов типа "памагите, скоро здавать", конечно заплатят они копейки (если заплатят вообще), но профессионалом Вы станете, и в такой работе нет ничего зазорного.

А "неуклонно повышать свой уровень" - путь тупиковый. В первой же практической работе выяснится что минимум 95% изученного и нафиг не надо. Поэтому чем быстрее перейдете от теории к практике - тем лучше.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 19:11
Цитировать
А "неуклонно повышать свой уровень" - путь тупиковый. В первой же практической работе выяснится что минимум 95% изученного и нафиг не надо. Поэтому чем быстрее перейдете от теории к практике - тем лучше.

Согласен, но нужно самое основное понять, от чего плясать-то:) А дальше только практика :)

Цитировать
возьмите форумы попроще, там много нерадивых студентов типа "памагите, скоро здавать"

Адресов не знаете? ;D


Название: Re: Механика создания класса формы Qt Designer
Отправлено: kambala от Август 21, 2014, 19:18
На деле есть 2 варианта объявления UI.
вообще-то есть 3 способа, в настройках креатора можно выбрать любой.
непонятное объявление namespace
напрашивается только одно слово: фейспалм.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Igors от Август 21, 2014, 19:27
Адресов не знаете? ;D
Та любое "ru", напр cyberforum. Данный форум - приятное исключение, все-таки Qt требует знания языка. А на остальных начинающие прочно доминируют


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 20:05
Адресов не знаете? ;D
Та любое "ru", напр cyberforum. Данный форум - приятное исключение, все-таки Qt требует знания языка. А на остальных начинающие прочно доминируют

Понял, спасибо :)

Возник вопрос. Я написал простой код (см. ниже), но почему то при запуске невозможно открыть(в моем случае - создать) файл для записи и соответственно, прочитать файл. Такая же проблема (я думаю это как-то связано) были при отработке "mkpath".

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QString>

void Write(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::WriteOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream out(&mFile);
     out << "Hello world!";
     mFile.flush();
     mFile.close();

}

void Read(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::ReadOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream in(&mFile);
     QString mText = in.readAll();
     qDebug() << mText;

     mFile.close();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString mFileName = "/Users/max/myfile.txt";

    Write(mFileName);
    Read(mFileName);

    return a.exec();
}


Название: Re: Механика создания класса формы Qt Designer
Отправлено: gil9red от Август 21, 2014, 20:12
Адресов не знаете? ;D
Та любое "ru", напр cyberforum. Данный форум - приятное исключение, все-таки Qt требует знания языка. А на остальных начинающие прочно доминируют

Понял, спасибо :)

Возник вопрос. Я написал простой код (см. ниже), но почему то при запуске невозможно открыть(в моем случае - создать) файл для записи и соответственно, прочитать файл. Такая же проблема (я думаю это как-то связано) были при отработке "mkpath".

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QString>

void Write(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::WriteOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream out(&mFile);
     out << "Hello world!";
     mFile.flush();
     mFile.close();

}

void Read(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::ReadOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream in(&mFile);
     QString mText = in.readAll();
     qDebug() << mText;

     mFile.close();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString mFileName = "/Users/max/myfile.txt";

    Write(mFileName);
    Read(mFileName);

    return a.exec();
}

С кодом, вроде бы, все в порядке, значит проблема в том, что не получается обнаружить тот файл :) попробуйте абсолютный путь указывать, а не относительный ;)
И лучше в следующий раз создавайте отдельную тему: одна проблема -- одна тема :)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 20:17
Адресов не знаете? ;D
Та любое "ru", напр cyberforum. Данный форум - приятное исключение, все-таки Qt требует знания языка. А на остальных начинающие прочно доминируют

Понял, спасибо :)

Возник вопрос. Я написал простой код (см. ниже), но почему то при запуске невозможно открыть(в моем случае - создать) файл для записи и соответственно, прочитать файл. Такая же проблема (я думаю это как-то связано) были при отработке "mkpath".

Код:
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QFileInfo>
#include <QString>

void Write(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::WriteOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream out(&mFile);
     out << "Hello world!";
     mFile.flush();
     mFile.close();

}

void Read(QString fileName)
{
    QFile mFile(fileName);

     if (!mFile.open(QFile::ReadOnly | QFile::Text))
     {
         qDebug() << "Could not open the file!";
         return;
     }

     QTextStream in(&mFile);
     QString mText = in.readAll();
     qDebug() << mText;

     mFile.close();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString mFileName = "/Users/max/myfile.txt";

    Write(mFileName);
    Read(mFileName);

    return a.exec();
}

С кодом, вроде бы, все в порядке, значит проблема в том, что не получается обнаружить тот файл :) попробуйте абсолютный путь указывать, а не относительный ;)
И лучше в следующий раз создавайте отдельную тему: одна проблема -- одна тема :)

В следующий раз так и поступлю :)
У меня Мак и я так понимаю, что это не относительный путь...


Название: Re: Механика создания класса формы Qt Designer
Отправлено: kambala от Август 21, 2014, 20:32
может права на домашней папке поломались? попробуй их починить через дисковую утилиту.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 20:47
может права на домашней папке поломались? попробуй их починить через дисковую утилиту.

Не помогло :( Хотя, что интересно, на Windows код сработал.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Bepec от Август 21, 2014, 22:18
Непонятный именно для людей никогда его не видевших :)
Я один пытался работать с Creator'ром и самый частый вопрос был - а что за левый namespace тут? :)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 22:25
так как запустить это дело на Mac-e?


Название: Re: Механика создания класса формы Qt Designer
Отправлено: kambala от Август 21, 2014, 22:55
Непонятный именно для людей никогда его не видевших :)
Я один пытался работать с Creator'ром и самый частый вопрос был - а что за левый namespace тут? :)
ну да, когда не знаешь что такое forward declaration...
так как запустить это дело на Mac-e?
у меня твой код нормально отрабатывает, файл создается и читается. попробуй другую папку.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 21, 2014, 23:06
Непонятный именно для людей никогда его не видевших :)
Я один пытался работать с Creator'ром и самый частый вопрос был - а что за левый namespace тут? :)
ну да, когда не знаешь что такое forward declaration...
так как запустить это дело на Mac-e?
у меня твой код нормально отрабатывает, файл создается и читается. попробуй другую папку.

Пробовал и в корень кидать и в папку Downloads один черт...


Название: Re: Механика создания класса формы Qt Designer
Отправлено: kambala от Август 21, 2014, 23:21
систему переустанови =)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: vizir.vs от Август 22, 2014, 11:32
систему переустанови =)
Генту ставь и не парься =)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: kambala от Август 22, 2014, 12:23
недавно видел на ленте в фб:

Максим Ігнатенко: Кажется, в гентушника я таки морфировать не смогу. Слишком уж оно не работает.
Михаил Бортник: в гентушника можно только фалломорфировать, говорю как бывший гентушник


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Igors от Август 22, 2014, 17:13
У меня Мак и я так понимаю, что это не относительный путь...
Относительный, полный начинается с /Volumes/...
Вообще вопрос недостоин обсуждения. Код ошибки печатали? Руками в том фолдере файл создается? Права доступа щупали? Все это надо сначала проверить, а потом уж (может быть) спросить на форуме. Не привыкайте "пастись"  :)


Название: Re: Механика создания класса формы Qt Designer
Отправлено: Fregloin от Август 24, 2014, 09:04
по поводу namespace UI, в креаторе есть настройка, можно сделать что бы виджеты вашей формы были:
в namespace ui в стеке,
в namespace ui в куче,
класс вашей формы использовал множественное наследование от QDialog и созданой формы UI_YourFrom, тогла namespace сипользоваться вообще не будет, все виджеты будут членами результрующего класса. (Подход похожий на Delphi/C++ Builder).
Все зависит от привычки.
Можете поискать в настойках.


Название: Re: Механика создания класса формы Qt Designer
Отправлено: makar182 от Август 24, 2014, 11:47
У меня Мак и я так понимаю, что это не относительный путь...
Относительный, полный начинается с /Volumes/...
Вообще вопрос недостоин обсуждения. Код ошибки печатали? Руками в том фолдере файл создается? Права доступа щупали? Все это надо сначала проверить, а потом уж (может быть) спросить на форуме. Не привыкайте "пастись"  :)

У вас есть опыт, потому вы сразу и разложили, как это проверить. Я бы сам не додумался полезть проверять права доступа и т.п.,если бы тут не посоветовали...