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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 714 715 [716] 717 718 ... 761
10726  Разное / Говорилка / Re: Хочу выучить еще какой-то ЯП. Но какой предпочесть? : Декабрь 28, 2009, 20:55
какой нибудь не совсем стандартный язык типа Lisp
Это точно, нестандартный (полтора года писал на AutoLisp  Улыбающийся).
10727  Qt / Общие вопросы / Re: сигналы и слоты. : Декабрь 28, 2009, 18:14
Нет слота QTextEdit::append("TEST")
Есть слот QTextEdit::append(const QString &)

При коннекте нельзя использовать имена параметров и тем более константы. Можно только типы
10728  Qt / Общие вопросы / Re: Кто работал с QBitArray? - поделитесь соображениями : Декабрь 28, 2009, 17:53
Да, и самый главный вопрос - а выгодно ли это делать с точки зрения скорости? Ведь если загружаю байты, то их будет больше, но читаются они быстрее. Если загружу битами (хотя это те же байты, конечно), то памяти займет меньше, но скорость? Как я понимаю, чтобы прочитывать все элементы, там в каждом байте сначала биты будут сдвигаться и сравниваться.

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

2) Да, это позволит сэкономить память значительно, но есть ли у Вас что экономить?  Улыбающийся Паковать имеет смысл начиная примерно со 100 Mb

3) Есть ли это в Qt - не знаю. Но и своя реализация ничем не плоха, например простенько

Код:
typedef unsigned char uchar;   
struct Array3Bits {
   Array3Bits( size_t num ) : mData(0) { Alloc(num); }
 ~Array2Bits( void ) { Destroy(); } 
 
   uchar Get( size_t index ) const                { return (mData[index / 2] >> ((index & 1) ? 0 : 4)) & 7; }
   void   Set( size_t index, uchar val )
   {
     uchar & t = mData[index / 2];
     if (index & 1) t = (t & 0xF8) | (val & 7);
     else t = (t & 0x8F) | ((val << 4) & 0x70); 
   }
 
private:
  void Alloc    ( size_t num )        { mData = num ? (new uchar [(num + 1) / 2]) : 0; }
  void Destroy( void )                 { if (mData) delete [] mData; }
 
// data
   uchar * mData;
};
10729  Qt / Общие вопросы / Re: обработка нажатий клавишь клавиатуры : Декабрь 28, 2009, 17:16
А вот то что часть кода оказалась в блоке namespace { .... },  что это означает ...
"anonymys namespace", эффект тот же что написать static для каждой ф-ции /переменной (т.е. доступна только в этом файле)
10730  Qt / 2D и 3D графика / Re: Определить цвет точки : Декабрь 27, 2009, 13:17
Визуализация это конечно хорошо, но метод Монте-Карло обычно входит в программу курса моделирования случайных величин (где-то в начале), а не компьютерной графики.
Не знаю как в теории преподавания но на практике в 3D графике Монте-Карло применяется очень интенсивно, можно сказать - доминирует в некоторых областях. Многочисленные попытки заменить его чем-то пока большого успеха не имеют.

Насчет решения - задача сводится к определению находится ли точка P1 внутри полигона. Алгоритм простой: берем любую точку P0 которая гарантированно лежит вне полигона. Подсчитываем число пересечений отрезка (P0, P1) со всеми отрезками контура. Если это число четное -  точка снаружи фигуры, иначе внутри.

Если же надо (или есть желание) "решить задачу средствами Qt" - то совершенно незачем привлекать path, ellipse и.т.п - можно просто залить фигуру, пройтись по вмещающему прямоугольнику и подсчитать число точек цвета заливки. Правда к Монте-Карло это никакого отношения не имеет.

Примечание (для любознательных): выброс точки с помощью 2-х rand (чистый Монте-Карло) не лучший, Quasi Monte Carlo заметно сильнее.
10731  Qt / Общие вопросы / Re: QFile setFileName QDir::setCurrent : Декабрь 26, 2009, 23:21
Я не смог получить полное имя от QFile, но его можно взять через QFileInfo 
10732  Разное / Говорилка / Re: Хочу выучить еще какой-то ЯП. Но какой предпочесть? : Декабрь 26, 2009, 23:17
больше сказать нечего?
Во-первых, с чего Вы взяли что Вы прекрасно владеете С++? Мне уже не раз приходилось пересматривать свою самооценку  Улыбающийся Все прекрасно пока мы в рамках уже освоенных задач, но почему все куда-то девается когда приходит новая, еще незнакомая задача?

Во-вторых, подход "а чего бы мне полезного поизучать" непрофессионален. Не будем путать, "профессионализм" не есть "круто" (как часто считают), это просто "работа за деньги" (есть масса прекрасных профессионалов но тупых).  Так вот, мое мнение - без оплачиваемой серъезной задачи все те "изучения" - это максимум повышение эрудиции, ничего более (заметим что ее отсутствием Вы явно не страдаете и сейчас  Улыбающийся)
10733  Qt / Общие вопросы / Re: обработка нажатий клавишь клавиатуры : Декабрь 26, 2009, 16:26
С фокусом Вы заблудились в 3 соснах - поставили его не на сам OGLWidget а на виджет в который он вставлен  Улыбающийся. Ну и я подправил по мелочам (attachment), но, конечно, там еще пахать и пахать 
10734  Qt / Установка, сборка, отладка, тестирование / Re: Просмотр в режиме отладки QString : Декабрь 26, 2009, 00:37
Далее на примере типовой случай. Переменная создана и ей присвоено значение. Содержимое в отладчике- пусто. Аналогично в хинте дебагера.
В данном случае "переменная" - экземпляр довольно сложного класса. "Присвоено значение" звучит неуместно - был вызван оператор присваивания который может делать все что угодно, в данном случае он конвертирует "AAA" в Unicode. С какой стати Вы рассчитываете увидеть в отладчике "AAA" если его в данной QString нет физически?

Ваша критика справедлива в том смысле что нормальный отладчик для структуры/объекта должен показать все ее члены (и private тоже), как, напр, делает Gdb. Но даже там просмотреть содержимое непросто  Улыбающийся
10735  Qt / Работа с сетью / Re: Время прохождения пакета по сети : Декабрь 25, 2009, 12:39
Сижу думаю, в чём дело??? Вдруг, примерно через минуту Б получает " STATUSSTATUSSTATUSSTATUSSTATUSSTATUS". Т.е. все мои команды пришли разом. Получается первое слово пришло через минуту-две, последнее, через 10- 20 сек. А заказчик требует точность до 10 мс (описался в первом посте). О какой статистике и прогнозе может идти речь при таких задержках?
Не видно смысла посылать следующий пакет не получив подтверждения что предыдущий получен. Хотя бы потому что следующая посылка зависит от ответа, проще иметь подтверждение всегда.

Насчет 10 миллисекунд. Спорить с заказчиком не нужно, 10 так 10. Но надо четко пояснить ему что программа не отвечает за скорость передачи, за качество канала связи и.т.п. Программа посылает/принимает данные в/из какого-то порта - это ВСЕ. Разборки с маршрутизацией и др. - все это другая задача, которая, разумеется, должна оплачиваться отдельно.

Примечания: (может пригодится)

-при посылке/приеме больших данных в сокет буферирование так же важно для скорости как и при записи в файл.

- часто лучше сначала вылить посылаемый пакет в файл а затем этот файл лить в сокет
10736  Qt / Работа с сетью / Re: Время прохождения пакета по сети : Декабрь 24, 2009, 20:00
Один раз мне приходилось это делать (правда это было на жабе и уже лет 10 назад, помню смутно). Я крутил так: при любой посылке в пакет вписывается время ее начала. При любом приеме запоминается время конца приема. На каждый принятый пакет посылается подтверждение "принят", в нем же записано время конца приема. На стороне отправителя все на руках, накапливается статистика (для каждого принимающего).

С обработкой много разумных ходов. Когда пакетов мало (напр. 32 и меньше) - тупо осредняем. Для большего числа: осредняем, затем отбрасываем значения меньше среднего в 2(N) раз и опять осредняем. Разумеется, каждый пакет знает свою длину, осредняем скорости. Если пакет не прошел (подтверждение не получено) - накапливаем это для др. статистики (кол-во сбойных пакетов), сюда не вмешиваем
10737  Qt / Общие вопросы / Re: обработка нажатий клавишь клавиатуры : Декабрь 24, 2009, 17:08
Не вижу ничего плохого в том что MainWindow отдает какие-то нажатия клавиш wgOpenGL (даже если он не в фокусе). А если уж привязываться к фокусу то надо как-то это показать в самом  wgOpenGL (напр. толстая рамка в фокусе, тонкая - без). Это и в UI по делу и с отладкой легче  Улыбающийся 
10738  Qt / Пользовательский интерфейс (GUI) / Re: Зависает интерфейс программы нужна помощь.... : Декабрь 24, 2009, 16:50
еще один глупый вопрос Грустный, долгий расчет записан в отдельный файл formula.cpp, соответственно при необходимости расчета вызывается функция int formula(int param), как предоставить возможность функции formula посылать сигнал (emit changedStatus(QString) ), я же его объявил в классе Run...   ?
Run у Вас кто? Расчетная часть, вот пусть она и занимается расчетами, а не посылкой сигналов. Поэтому место класса Run в файлах formula.h и formula.cpp. И формула должна вычисляться в одном из методов Run.

Если расчет короткий то достаточно что TransactionThread сама обновит UI. Если же длинный (2 сек и больше) и разбить его на части неудобно - тогда через прокладочку (см. интерфейс CProgressShow в ishodniki2.zip). В любом случае formula.h и formula.cpp ничего не должны знать о QtGUI, сигналах и.т.п.
10739  Qt / Общие вопросы / Re: Создание дочернего окна - сложности с нахождением ошибки : Декабрь 24, 2009, 14:19
Создал вот такой mw.cpp:
Код:
#include <QtGui>
#include "mw.h"
mw::mw(QWidget *parent)

: QDialog(parent)

{
setupUi(this);

}

Приложение собралось - это радует.  Улыбающийся Одно странно - сообщений и предупреждений об ошибке не было, но вторая форма не показывается.  Непонимающий

Да, виден конструктор класса (с не очень выразительным именем mw  Улыбающийся). Но посоветовать Вам нечего т.к. где и как Вы зовете формы - неизвестно. Выложите компилябельный проект.
10740  Qt / Пользовательский интерфейс (GUI) / Re: Зависает интерфейс программы нужна помощь.... : Декабрь 24, 2009, 14:09
а как тогда делать правильно, какой должен быть подход ?
Правильный подход в исходном примере. Смысл простой: не смешивать расчеты с UI, выделить все расчеты в отдельные классы (а лучше в отдельный файл(ы)). Сделать промежуточное звено (в примере это TransactionThread) которое обеспечивает взаимодействие "расчеты - UI". На первый взгляд это может показаться заумным и.т.п. но когда в один прекрасный день Вы услышите "нужна версия программы с командной строкой" - придется пожалеть о содеянном   Улыбающийся

как решение была выбрана работа с потоками и вывод информации в статус бар, можно бы ло бы просто создавать поток и делать всю работу в нем но дело в том что расчетов (функций) как минимум 3-4 варианта и для каждого из них описывать свой поток как мне кажется не совсем читабельно, используя выше приведенный подход можно вызывать только требуемые режимы расчета (функции) при этом поток всегда один, а вызывать несколько расчетов сразу мне ненужно
У Вас в примере показано как Улыбающийся Класс Run порождается от Transaction. Пусть Run - это "расчет 1". Делаете еще классы порожденные от Transaction, напр. Run2, Run3 (расчет 2, расчет 3) для каждого делаете виртуальный метод где выполняются сами расчеты (у Вас это apply) - и одна и та же TransactionThread работает со любыми расчетами, хотите по очереди, хотите вперемежку - зависит от того какие Transaction Вы кладете в очередь.
Страниц: 1 ... 714 715 [716] 717 718 ... 761

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