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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 124 125 [126] 127 128 ... 140
1876  Программирование / С/C++ / Re: работа с шаблонным классом : Октябрь 03, 2010, 17:16
Цитировать
"Тело" template ф-ции должно быть "в той же единице транслятора". Если Вы перенесете его из myclass.cpp в myclass.h, то линкер его найдет. Я обычно собираю тела template в еще одном h файле (напр. myclass_template.h) и в конце myclass.h пишу #include "myclass_template.h". А то myclass.h получается очень замусоренным (на мой вкус).
Неправда)

ошибка здесь:
Код
C++ (Qt)
template <class S>
void myclass::login(S login, S pass)
{
 
   additional_func->connect(login,pass);
 
}
 

а надо так:
Код
C++ (Qt)
template <class S>
void myclass<S>::login(S login, S pass)
{
 
   additional_func->connect(login,pass);
 
}
 
Ну и конечно, лучше по константной ссылке передавать значения.
1877  Qt / Дополнительные компоненты / Re: отрисовка графиков : Октябрь 03, 2010, 11:15
LightPlot2D - http://code.google.com/p/lightplot2d/

Обсуждение здесь - http://www.prog.org.ru/topic_10208_0.html
1878  Разное / Говорилка / Re: Задачки : Октябрь 03, 2010, 00:40
Как то у нас проходила неделя французского кино и меня вытащили на один из фильмов, названия не помню, но запомнилась одна игра)
Суть игры следующая:
Играют двое.
Имеется 4 ряда (пусть будет спичек, хотя не важно чего, но в фильме это были спички), причём в первом ряду одна спичка, во втором 3 спички, в третьем 5 спичек и в четвёртом 7 спичек (типа пирамидка).
Каждый игрок за один ход может взять любое число спичек, но только с одного ряда. Затем ходит второй и тож может взять любое число спичек но только с одного какого-либо ряда. Проигрывает тот, кто забирает последнюю спичку.

Хочу написать маленькую програмку, и пока в основной проге проходят расчёты (считает долго) позабавить тем самым пользователя))

Подскажите как енто лучше сделать))       
1879  Qt / Установка, сборка, отладка, тестирование / Re: Компиляция динамической библиотеки : Сентябрь 27, 2010, 17:48
Цитировать
LIBS += -L xmlqtwrapper/
Это не правильно. Надо писать
LIBS += -Llib_path -lxmlqtwrapper
где lib_path - путь к либе
1880  Qt / Установка, сборка, отладка, тестирование / Re: Компиляция динамической библиотеки : Сентябрь 27, 2010, 13:50
Цитировать
По инструкции http://www.prog.org.ru/topic_8259_0.html переделывал библиотеку под компиляцию в mingw.
При попытке компиляции выдает ошибку -

[Makefile] Error 2

как это понимать?
Попробуйте заменить эту строчку
Код
C++ (Qt)
LIBS += -L../../lib -ldlabel
 
на эту
Код
C++ (Qt)
LIBS += -L../../lib -ldlabel1
 
1881  Программирование / Алгоритмы / Re: Упаковка массива : Сентябрь 18, 2010, 14:49
Извиняйте, но это вообще бредовая идея определять оператор неравенства для такого объекта, как Point2D

Определяете сетку на плоскости и считаете сколько точек попало в каждую ячейку. Вместо тех точек, которые находятся в некоторой ячейки ставите одну с координатами их центра масс.
Самое логичное решение, на мой взгляд. В итоге у вас получится столько точек, сколько было ячеек.
Единственное что, сетку можно по-разному определить, но эт уже детали.  
1882  Программирование / С/C++ / Re: перегрузка оператора + (комплексные числа) : Сентябрь 17, 2010, 17:33
Цитировать
в первом случае ошибка  error: invalid operands of types `Complex*' and `Complex*' to binary `operator+'
во втором C:/Qt/2009.03/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_algobase.h:(.text$_ZN7ComplexplES_[Complex::operator+:-1: error: undefined reference to `Complex::Complex()'
Ошибка из-за того, что не определён конструктор по умолчанию (он у вас просто объявлен, как и деструктор).
Надо хотя бы сделать так:
Код
C++ (Qt)
public:
   Complex() {}
   ~Complex() {}
...
 
А это,
Цитировать
Complex operator+(Complex a)      // перегрузка оператора
{
    Complex rez;
    rez.im =im +a.im;
    rez.re = re+ a.re;
    return rez;
}
 
ваще жесть) Не пишите так) Или прочитайте литературу перед тем как воять подобное)

И кстати, есть уже готовое решение для класса комплексных чисел (так и называется complex)
пример:
Код
C++ (Qt)
#include <complex>
#include <iostream>
 
using namespace std;
 
int main() {
   complex<double> c1(1.0, 2.0);
   complex<double> c2 = c1;
   c2 += 1.0;
   cout << c1 << endl;
   cout << c2 << endl;
   return 0;
}
 

Вот описание этого класса: http://www.cplusplus.com/reference/std/complex/


 
1883  Qt / Общие вопросы / Re: QStringList : Сентябрь 14, 2010, 13:08
Цитировать
Так быстрее?) К тому же, если имя, отличное от d_* или s_*, занесется в d_table.
Ну если вопрос ставился изначально, что все имена начинаются либо с s либо с d, то быстрее)
Лучше конечно сравнивать с первым символом.

Цитировать
for (int i = 0; i < i1.count() - 1; i++)
    {
        QString string = i1;
        if (string.contains("s_")) s_tables.push_back(string);
        if (string.contains("d_")) d_tables.push_back(string);
    }

А в Вашем варианте вы не до конца проходите список. И более того, если у вас прошло первое условие:
 if (string.contains("s_")) s_tables.push_back(string);
то всё равно повторно будет произведён поиск на "d_". Зачем? 

Код
C++ (Qt)
foreach (QString str, i1) {
   if (str[0]=='s')
       s_table << str;
   else if (str[0]=='d')
       d_table << str;
}
 
1884  Qt / Общие вопросы / Re: QStringList : Сентябрь 14, 2010, 13:01
Цитировать
"d_s_"
тогда так:
Код
C++ (Qt)
foreach (QString str, i1) {
   if (str[0]=='s')
       s_table << str;
   else
       d_table << str;
}
 
1885  Qt / Общие вопросы / Re: QStringList : Сентябрь 14, 2010, 12:51
Код
C++ (Qt)
foreach (QString str, i1) {
   if (str.contains("s_"))
       s_table << str;
   else
       d_table << str;
}
 
1886  Qt / Кладовая готовых решений / Re: Переходничок : Сентябрь 13, 2010, 12:53
Как узнать имея итератор, что указатель на объект занулён?

 
1887  Qt / Кладовая готовых решений / Re: Переходничок : Сентябрь 12, 2010, 15:31
Цитировать
А почему handleEvent осведомлен о классе CMeshCalculator вообще? Откуда handleEvent знает какой текст нужно написать и какой прогресс показать? И если у Вас 2 или более обсерверов, откуда они знают кому чего показать?
Ну тут меня опередили (см. выше)

Цитировать
Я так вижу что ресурсы-то уже тратятся (STL и.т.п) а хотя бы минимальной ф-циональности еще нет.
Igors, это уже жадность)) Что там такого тратиться? Не думаю, что кто то вообще почувствует разницу по съеданию ресурсов в этом месте.. Короче это смешно)

А по-поводу минимальной функциональности это Вы не правы. В данном конкретном примере, целью которого было лишь продемонстрировать идею этого патерна, реальной функциональности нет) Эт ж пример))
Но, если смотреть глубже то здесь большой потенциал, для Вашей задумки с переходником.
Причём реализуется он без лишних беспокойств Санька, (того, который так хорошо кладёт код)
   
Чем по функциональности приведённый пример с патерном уступает вашему переходнику? 


1888  Qt / Кладовая готовых решений / Re: Переходничок : Сентябрь 11, 2010, 17:14
Интриги, скандалы, расследования!  Смеющийся

Почитал я на досуге про патерн Observe  Улыбающийся и это реально более изящное и правильное решение на мой взгляд.    
Используя этот патерн, Ваш пример с CMeshCalculator выглядел бы следующим образом:
Код
C++ (Qt)
#ifndef CMESHCALCULATOR_H
#define CMESHCALCULATOR_H
 
#include <list>
 
class CMeshCalculator;
 
class IObserver {
public:
   virtual void handleEvent(const CMeshCalculator &) = 0;
};
 
class CMeshCalculator {
public:
   CMeshCalculator()
       :_someParam(0) {}
 
   int someParam() const { return _someParam; }
 
   void calculate() {
   // Possible here _someParam is changed.
   // for example: _someParam++;
       notify();
   // ...
   }
   void reg(IObserver &ref) {
       _observers.push_back(&ref);
   }
 
   void unreg(IObserver &ref) {
       _observers.remove(&ref);
   }
 
private:
   std::list<IObserver*> _observers;
   typedef std::list<IObserver*>::iterator _iterator;
 
   void notify() {
       for(_iterator it = _observers.begin(); it != _observers.end(); it++)
           (*it)->handleEvent(*this);
   }
 
   int _someParam;
};
 
#endif // CMESHCALCULATOR_H
 
Где мы сотворили чисто виртуальный класс IObserve. Функция calculate() - это то, где производятся громоздкие расчёты и т.п. И в ней мы вызываем notify(), которая перебирает список всех зарегистрированных наблюдателей и вызывает у каждого переопределённый метод handleEvent.

Теперь пример класса TextProgressIndicatorObserver:
Код
C++ (Qt)
#ifndef TEXTPROGRESSINDICATOROBSERVER_H
#define TEXTPROGRESSINDICATOROBSERVER_H
 
#include <iostream>
#include "CMeshCalculator.h"
 
class TextProgressIndicatorObserver : public IObserver {
public:
   void handleEvent(const CMeshCalculator &calc) {
       std::cout << "processing..." << std::endl;
       std::cout << calc.someParam() << std::endl;
   }
};
 
#endif // TEXTPROGRESSINDICATOROBSERVER_H
 
 

Разумеется, информацию мы можем выводить не только в cout но в гуй и куда угодно. И это решение - как раз и отделяет интерфейсную часть от расчётной -> переходничок)

А используется это так:
Код
C++ (Qt)
#include <iostream>
#include "CMeshCalculator.h"
#include "TextProgressIndicatorObserver.h"
 
using namespace std;
 
 
int main()
{
   TextProgressIndicatorObserver tpiObserver;
   CMeshCalculator calc;
   calc.reg(tpiObserver);
   calc.calculate();
 
   return 0;
}
 
 

Поправьте, если чего то не того написал))

References:
http://en.wikipedia.org/wiki/Observer_pattern

1889  Qt / Кладовая готовых решений / Re: Кладовка готовых решений : Сентябрь 06, 2010, 00:02
Цитировать
История повторяется, что и для раздела "Секреты и интересные возможности Qt" на crossplatform.ru. Судя по тому, что в подобных разделах пишут 2-3 человека, то лучше пусть пишут хотя бы что-то. Иногда в полном хламе можно найти интересную идею, которую нужно просто развить.
Присоединяюсь)

Цитировать
История повторяется, что и для раздела "Секреты и интересные возможности Qt" на crossplatform.ru. Судя по тому, что в подобных разделах пишут 2-3 человека, то лучше пусть пишут хотя бы что-то. Иногда в полном хламе можно найти интересную идею, которую нужно просто развить.

Я квалифицирую такие посты как "ординарный/банальный цинизм". Вероятно молодой человек испытывает кризис, жизнь кажется ему исключительно "в оттенках черного" (возможно проблемы с девушкой) и.т.п. Это бывает - и это проходит 
А причём здесь цинизм? Вероятно, если тот, о ком Вы это написали испытывал подобные проблемы, и аж видел жизнь искл. в оттенках чёрного, он едва, на мой взгляд, постил бы здесь с таким энтузиазмом) Скорее депрессировал где-нить на кладбище с собратьями по мировоззрению)

А может создать на форуме, если на то пошло, отдельную тему, типа: психологическая помощь или тема доверия для потерянных больных первертов в мировой Qt-тусовке?))
Igors мог бы быть там модератором))   
 Подмигивающий
1890  Программирование / С/C++ / Re: операторы для ARGB : Сентябрь 04, 2010, 19:21
Цитировать
Отсутствует Ассоциативность, а не Коммутативность
С1+С2+С3 != С2+С3+С1
Но поскольку имеем Ассоциативность, то
С1+С2 == C2+C1 =>                               
(С1+С2)+С3 == (C2+C1)+C3 равносильно такой записи С1+С2+С3 == C2+C1+C3
И в чём тогда проблема? Или я чего-то не вкуриваю.. 
Страниц: 1 ... 124 125 [126] 127 128 ... 140

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