Russian Qt Forum
Ноябрь 26, 2024, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Механика создания класса формы Qt Designer  (Прочитано 9343 раз)
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;

Конечно, можно на это не обращать внимания, создалось и слава Богу, но все же хотелось бы понять, откуда такая нужда?
« Последнее редактирование: Август 21, 2014, 15:59 от makar182 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 21, 2014, 16:14 »

Не нужда а умность (в хорошем смысле). Пространство имен Ui подчеркивает что все в нем может быть изменено интерактивно, в дызайнере. Написав Ui:: мы четко видим что это привязано к форме (той самой). Хорошо это или плохо - то по-всякому, но выделить это необходимо.

Как дела? Нашли заказ или так, тренируетесь на кошках (неэффективно  Улыбающийся)
Записан
makar182
Гость
« Ответ #2 : Август 21, 2014, 17:05 »

Цитировать
Как дела? Нашли заказ или так, тренируетесь на кошках (неэффективно  Улыбающийся)

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

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

Заказов еще не брал, потому, что я откровенно путаюсь в базовых вещах и зачастую не могу разобрать всплывающую схему написания той или иной команды  Смеющийся Так что, решил сейчас повторить все за ведущим этого курса (курс достаточно полный и краткий) вручную, а потом написать свою собственную простенькую программу - записную книжку с напоминаниями или вроде того, а там дальше посмотрим. Вобщем, надо что-то сделать от А и до Я, чтобы почувствовать себя уверенно и просить заказы Улыбающийся, а то сейчас я их только завалю. Да и, по правде говоря, никто не откликнулся на предложение бесплатного сотрудника (я его тут же на форуме размещал). А на сайтах фриланса, как пить дать, попросят портфолио и т.п.
Записан
Bepec
Гость
« Ответ #3 : Август 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 Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 21, 2014, 19:08 »

...чтобы почувствовать себя уверенно и просить заказы Улыбающийся, а то сейчас я их только завалю. Да и, по правде говоря, никто не откликнулся на предложение бесплатного сотрудника (я его тут же на форуме размещал). А на сайтах фриланса, как пить дать, попросят портфолио и т.п.
Мне приходится выступать в роли заказчика (для меня тягостной) - чихал я на то портфолио. Даже наоборот, если человек чересчур упорно/настойчиво рекламирует себя - толку скорее всего не будет. Размещать объявление здесь - ну не вредно, но шансов немного. Пока смущает фриланс - хорошо, тогда возьмите форумы попроще, там много нерадивых студентов типа "памагите, скоро здавать", конечно заплатят они копейки (если заплатят вообще), но профессионалом Вы станете, и в такой работе нет ничего зазорного.

А "неуклонно повышать свой уровень" - путь тупиковый. В первой же практической работе выяснится что минимум 95% изученного и нафиг не надо. Поэтому чем быстрее перейдете от теории к практике - тем лучше.
Записан
makar182
Гость
« Ответ #5 : Август 21, 2014, 19:11 »

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

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

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

Адресов не знаете? Смеющийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Август 21, 2014, 19:18 »

На деле есть 2 варианта объявления UI.
вообще-то есть 3 способа, в настройках креатора можно выбрать любой.
непонятное объявление namespace
напрашивается только одно слово: фейспалм.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Август 21, 2014, 19:27 »

Адресов не знаете? Смеющийся
Та любое "ru", напр cyberforum. Данный форум - приятное исключение, все-таки Qt требует знания языка. А на остальных начинающие прочно доминируют
Записан
makar182
Гость
« Ответ #8 : Август 21, 2014, 20:05 »

Адресов не знаете? Смеющийся
Та любое "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();
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Август 21, 2014, 20:12 »

Адресов не знаете? Смеющийся
Та любое "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();
}

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

makar182
Гость
« Ответ #10 : Август 21, 2014, 20:17 »

Адресов не знаете? Смеющийся
Та любое "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();
}

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

В следующий раз так и поступлю Улыбающийся
У меня Мак и я так понимаю, что это не относительный путь...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #11 : Август 21, 2014, 20:32 »

может права на домашней папке поломались? попробуй их починить через дисковую утилиту.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
makar182
Гость
« Ответ #12 : Август 21, 2014, 20:47 »

может права на домашней папке поломались? попробуй их починить через дисковую утилиту.

Не помогло Грустный Хотя, что интересно, на Windows код сработал.
« Последнее редактирование: Август 21, 2014, 21:39 от makar182 » Записан
Bepec
Гость
« Ответ #13 : Август 21, 2014, 22:18 »

Непонятный именно для людей никогда его не видевших Улыбающийся
Я один пытался работать с Creator'ром и самый частый вопрос был - а что за левый namespace тут? Улыбающийся
Записан
makar182
Гость
« Ответ #14 : Август 21, 2014, 22:25 »

так как запустить это дело на Mac-e?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 23.