Russian Qt Forum

Qt => Вопросы новичков => Тема начата: KsenZ от Февраль 26, 2011, 15:30



Название: Помощь при обучении (разработке)
Отправлено: KsenZ от Февраль 26, 2011, 15:30
Суть в следующем, прочитал пару книг по С++ и Qt. Так как научиться программировать можно только программируя, я и придумал себе задание в виде программы. Взялся писать, и понял, что не знаю с какой стороны к ней подойти, т.е. с чего начать, правильно или нет делаю и т.д.
Вот и хотел спросить, можно ли я буду описывать свои действия здесь, или если кто нибудь согласиться то в личку (аську, скайп и т.д.). Что бы контролировать меня, правильно ли я делаю, если нет то подсказать как нужно, с чего начать и т.д.


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Февраль 26, 2011, 16:51
Стукани мне в скайп (panter_dsd), попробую помочь. Только в рабочий день.


Название: Re: Помощь при обучении (разработке)
Отправлено: alexman от Февраль 26, 2011, 20:46
А что на форуме изложить вопрос запрещается?


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Февраль 28, 2011, 08:35
Когда много вопросов, лучше в онлайне.


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 07:45
Можно постепенно, по мере их появления. Ведь каждому в скайпе не ответишь :( ...


Название: Re: Помощь при обучении (разработке)
Отправлено: s200999900 от Март 02, 2011, 11:55
Когда много вопросов, лучше в онлайне.

Если вам не будет трудно можно и мне вам вопросы начинающего позадавать?  :)


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 02, 2011, 11:57
Давай, если у меня время будет.


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 13:45
Тогда, если можно такой вопрос. Есть у меня задумка, смысл программы в подсчете колличества символов в тексте, с чего начать реализацию ???

На форме разместил: QPlainTextEdit (в него планирую вводить текст), потом там есть кнопка QPushButton (по нажатии на нее будет происходить вычисление кол-ва символов), и четыре QLabel (в двух из них уже внес текст "количество символов с пробелмаи", "Количество символов без пробелов" в свой свойство text), а два остальных будут служить выводом самой информации о количестве символов.

Теперь вопрос - куда копать дальше :), с чего начинать, точнее куда продолжать ???

P/S/ Принимается любое "хи-хи" реагирую адекватно ... :)


Название: Re: Помощь при обучении (разработке)
Отправлено: meego_man от Март 02, 2011, 13:55
Тогда, если можно такой вопрос. Есть у меня задумка, смысл программы в подсчете колличества символов в тексте, с чего начать реализацию ???

На форме разместил: QPlainTextEdit (в него планирую вводить текст), потом там есть кнопка QPushButton (по нажатии на нее будет происходить вычисление кол-ва символов), и четыре QLabel (в двух из них уже внес текст "количество символов с пробелмаи", "Количество символов без пробелов" в свой свойство text), а два остальных будут служить выводом самой информации о количестве символов.

Теперь вопрос - куда копать дальше :), с чего начинать, точнее куда продолжать ???

P/S/ Принимается любое "хи-хи" реагирую адекватно ... :)
Ну а теперь самое интересное, программирование  :D Добавляем обработчик нажатия кнопочки и пишем код подсчета символов. Потом все это выводим в QLabel


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 02, 2011, 14:02
Ну, далее читаешь в ассистенте про QTextDocument и вперед!


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 14:37
Ну а теперь самое интересное, программирование  :D Добавляем обработчик нажатия кнопочки и пишем код подсчета символов. Потом все это выводим в QLabel

Я правильно понял что для обработки клика по кнопке. нужно перейти на редактор сигналов и слотов и там прописать: отправитель - наша кнопка, сигнал - clicked(), получатель - выбираем тот обьект который бедт чето делать при клике на кнопке, а вот что в слот писать :) ?

Я хоть примерно правильно думаю ?


Название: Re: Помощь при обучении (разработке)
Отправлено: meego_man от Март 02, 2011, 14:43
Ну а теперь самое интересное, программирование  :D Добавляем обработчик нажатия кнопочки и пишем код подсчета символов. Потом все это выводим в QLabel

Я правильно понял что для обработки клика по кнопке. нужно перейти на редактор сигналов и слотов и там прописать: отправитель - наша кнопка, сигнал - clicked(), получатель - выбираем тот обьект который бедт чето делать при клике на кнопке, а вот что в слот писать :) ?

Я хоть примерно правильно думаю ?
Направление правильное :) Я так понимаю используете QtDesigner? Лучше бы взялись за Qt Creator, очень удобный редактор. Ну это дело личных предпочтений.
В слоте пишем код, который подсчитывает количество символов. Вот примерный мета-код:

Код:
NumberOfSimbolsWithSpaces = 0;
NumberOfSimbolsWithoutSpaces = 0;
String plainTextComponent.getString ();
for (int i=0; i<String.size (); i++)
{
   if (String[i] != whiteSpace)
     NumberOfSimbolsWithoutSpaces ++;
   NumberOfSimbolsWithSpaces ++;
}

Label1.setText (NumberOfSimbolsWithoutSpaces);
Label2.setText (NumberOfSimbolsWithSpaces);
Опять же, это мета-код. Всего лишь последовательность действий. В качестве подсказки, используйте QString для доступа к содержимому вашего поля ввода и QChar для получения разделителей (не только пробелы, но и таббуляция и перевод стоки)


Название: Re: Помощь при обучении (разработке)
Отправлено: m_ax от Март 02, 2011, 16:49
Мне тоже такую штуку нужно: подсчёт символов в тексте. Но чтоб можно было считать символы из pdf документа.
Как напишете, опубликуйте) 


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 16:52
Эх, чет я так и непонял чего куда писать, у меня в поле слот тупо выпадающий список, и куда чего писать непонятно ... :( Да, использую Qt Creator ...

тут выложил картинку - http://foto.dbprogs.ru/qtcreator_1.jpg (http://foto.dbprogs.ru/qtcreator_1.jpg)


Название: Re: Помощь при обучении (разработке)
Отправлено: meego_man от Март 02, 2011, 17:05
Эх, чет я так и непонял чего куда писать, у меня в поле слот тупо выпадающий список, и куда чего писать непонятно ... :( Да, использую Qt Creator ...

тут выложил картинку - http://foto.dbprogs.ru/qtcreator_1.jpg (http://foto.dbprogs.ru/qtcreator_1.jpg)
В режиме Изменение виджетов (F3) щелкаем правой кнопкой мыше на элементе для которого нужно написать слот (кнопка в нашем случае). Выбираем "перейти к слоту". Далее выбираем clicked (). Нас переносят в редактор кода (слот по умолчанию будет называться on_pushButton_clicked()) там все пишем :)


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 17:09
Вот, вот, именно это я и пытался найти :) ... Спасибо ...

p/s/ Думаю я скоро вернусь с  новыми вопросами :)


Название: Re: Помощь при обучении (разработке)
Отправлено: кып от Март 02, 2011, 19:26
Предлагаю немного усложнить задачу. Пусть программа подсчитывает символы/слова в тексте не по кнопке, а сразу по мере набора. Так интересней будет.  :)


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 02, 2011, 19:53
Сложнее код не станет, просто сменится обработчик (ну или как там правильно сказать :) ) ...


Название: Re: Помощь при обучении (разработке)
Отправлено: meego_man от Март 03, 2011, 00:15
Сложнее код не станет, просто сменится обработчик (ну или как там правильно сказать :) ) ...
ну как сказать, тут нужно уже будет думать об оптимизации ;)


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 06:14
ну как сказать, тут нужно уже будет думать об оптимизации ;)

Да, об этом не подумал ...


Название: Re: Помощь при обучении (разработке)
Отправлено: alexman от Март 03, 2011, 07:59
Предлагаю немного усложнить задачу. Пусть программа подсчитывает символы/слова в тексте не по кнопке, а сразу по мере набора. Так интересней будет.  :)
Подсчет символов:
1. Храним отображение QMap<QChar,int> _cache - символ->количество.
2. При вводе для символа ch делаем: _cache[ch]++;

Подсчет слов:
1. Храним отображение QMap<QString,int> _cache - слово->количество.
2. Храним последнее введенное слово _lastText.
3. При вводе проверять:
 -если символ ch не разделитель, то: _lastText += ch;
 -если ch разделитель, то _cache[_lastText]++;_lastText.clear();

ЗЫ Конечно здесь учтены не все случаи.


Название: Re: Помощь при обучении (разработке)
Отправлено: Igors от Март 03, 2011, 12:56
Предлагаю немного усложнить задачу. Пусть программа подсчитывает символы/слова в тексте не по кнопке, а сразу по мере набора. Так интересней будет.  :)
Подсчет символов:
1. Храним отображение QMap<QChar,int> _cache - символ->количество.
2. При вводе для символа ch делаем: _cache[ch]++;

Подсчет слов:
1. Храним отображение QMap<QString,int> _cache - слово->количество.
2. Храним последнее введенное слово _lastText.
3. При вводе проверять:
 -если символ ch не разделитель, то: _lastText += ch;
 -если ch разделитель, то _cache[_lastText]++;_lastText.clear();

ЗЫ Конечно здесь учтены не все случаи.
Хороший пример того смотря КАК делать  :)
Если просто побаловаться (абы було) то, конечно, легко и приятно. А вот если надо, напр. на лету отследить вырезку/вставку блоков текста, undo и.т.п. - куда тогда девается весь энтузиазм/интерес?  :)

Поэтому мое мнение - все эти учебные примеры дают очень мало, надо делать реальную задачу (желательно за деньги), хотя это (часто) трудно и неприятно



Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 13:05
Такой вопрос, как обращаться к свойствам виджетов (дай Бог правильно написал :) ) ?

Пример, есть форма, на ней кнопка, и label, что мне прописать в коде что-бы при нажатии на кнопку изменилось свойство text виджета label ?

void proba::on_pushButton_clicked()
{
    ............... :(
}

Или я вообще не в ту сторону копаю ? :)


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 03, 2011, 13:07
В общем случае label->setText ("Some text"), могут быть вариации в зависимости от использования ui и метода включения этого ui.


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 13:33
В общем случае label->setText ("Some text"), могут быть вариации в зависимости от использования ui и метода включения этого ui.

А в конкретном ? :)

этих label может-же быть и 100 штук на форме ...

Приведенный пример выдает 'label' was not declared in this scope


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 03, 2011, 13:34
Не видя h файла, сказать ничего не могу.


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 13:36
#ifndef PROBA_H
#define PROBA_H

#include <QMainWindow>

namespace Ui {
    class proba;
}

class proba : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::proba *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // PROBA_H


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 03, 2011, 13:37
В твоем случае ui->label->setText


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 13:42
В твоем случае ui->label->setText

работает ...

получается я передаю данные на форму, а та на лейбл ?

Я просто вспоминаю дни когда пытался кодить под Делфи, там по-моему, было немного проще. Есть объект, есть его свойства, все, указал объект, указал какие свойства изменить, и больше никаких забот, тут же все немного по другому ...


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 03, 2011, 13:45
ui - объект, на котором располагается другой объект (label), у которого есть свойство setText.

Тебе бы сначала с++ выучить, а потом уже за Qt браться.


Название: Re: Помощь при обучении (разработке)
Отправлено: dbprogs.ru от Март 03, 2011, 13:49

Тебе бы сначала с++ выучить, а потом уже за Qt браться.

Тут я согласен ... Просто считаю что проще учить язык попутно решая поставленную задачу, за вышесказанное огромное спасибо, отправную точку получил ...


Название: Re: Помощь при обучении (разработке)
Отправлено: Пантер от Март 03, 2011, 13:52
Пока не овладеешь ЯП, решай задачи в консоли.