10786
|
Qt / Общие вопросы / Re: Трудоемкие задачи (прервать или продолжить). Как прервать?
|
: Декабрь 14, 2009, 00:16
|
Как можно оптимизировать C++ (Qt) inline bool ItemOk( QTableWidgetItem * item ) { if (!item) return false; if (item->text().isEmpty()) return false; return item->data(Qt::DisplayRole).toString().indexOf(";") == -1; } //////////////////////////////////////////основная часть кода принадлежит bool Spreadsheet::sort_data_with_GUI(const QList<QTableWidgetSelectionRange>& range)////////////////////////////// QString error; for(int it = 0; it < range.size(); it++) { int begR = range[it].topRow(); int endR = range[it].bottomRow(); for (int i = begR; i <= endR; i++) { int begC = range[it].leftColumn(); int endC = range[it].rightColumn(); for (int j = begC; j <= endC; j++) { if (!ItemOk(item(i, j)) error += QString("item at column %1, row %2 is invalid\n").arg(get_header_label(j)).arg(i); } } } }
|
|
|
10787
|
Qt / Пользовательский интерфейс (GUI) / Re: Как позволить пользователю менять размер виджета?
|
: Декабрь 13, 2009, 22:01
|
Просто дело в том, что виджет не должен быть доком (окном). А именно должен перемещаться по форме. P.S. Копаю mouseEvent...
Не выгоднее ли изменить/продумать задачу? Например поставить в toolbar 4 маленьких кнопки/стрелки. Пользователь нажимает на одну из них - виджет перемещается влево-вправо-вверх-вниз (в зависимости от стрелки). Перекрывать QMouseEvent может быть хлопотно да и как дать пользователю понять что он может двигать QPlainText?
|
|
|
10791
|
Qt / Пользовательский интерфейс (GUI) / Re: Получаю не правильный размер widget'a и маленький вопрос о include
|
: Декабрь 13, 2009, 20:57
|
Как я и писал в конце метода вызывать qApp->processEvents() и получать после него или ставить в очередь вызов слота (Qt::QueuedConnection). Естественно, что размеры виджета могут тут же поменяться на другие после того как они уже были получены, просто нужно дополнять документацию, чтобы народ не удивлялся.
processEvents и экран обновит и много чего может еще сделать что к размерам не имеет отношения. Коряво, хотя согласен - лучшего не видно (в текущей версии)
|
|
|
10793
|
Qt / Пользовательский интерфейс (GUI) / Re: Получаю не правильный размер widget'a и маленький вопрос о include
|
: Декабрь 13, 2009, 20:26
|
Маленькое уточнение. Виртуальные методы в конструкторе вызывать можно, но не как виртуальные, поскольку в C++ конструкторы не виртуальны, на мой взгляд один из самых больших недостатков C++, - постоянно приходится делать init методы. Конструктор не может быть виртуальным поскольку именно его вызов прописывает VMT. А также лучше сказать: при конструировании базового класса будут вызываться его виртуальные методы (а не виртуальные методы порожденного класса). Короче, не вижу разницы когда можно вычислять размеры, в конструкторе(в нужном с точки зрения программера месте) или после.
По-моему нужен метод виджета который бы обеспечивал "все размеры посчитаны, больше меняться не будут" (чтобы не приходилось делать это коряво через таймер). Может такой и есть но я его не нашел. Пробовал resize, setGeometry (для главного окна конечно) - не бычит, размеров child виджетов я не имею Edit: А как насчет adjustSize вызываемого в конструкторе? И получения размеров после него, как правило корректных.
А как "не правило"? Я пробовал и иногда adjustSize работает, иногда нет. Как я понял зависит от флагов (Fixed, Expanded) - тоже не дело
|
|
|
10794
|
Qt / Пользовательский интерфейс (GUI) / Re: Получаю не правильный размер widget'a и маленький вопрос о include
|
: Декабрь 13, 2009, 19:10
|
>>Да - сконсруирован уже в начале конструктора. В начале конструктора сконструирован только базовый класс, то что память выделилась, ещё ни о чём не говорить, там кроме мусора ещё ничего нет
Не только члены и базовые классы - сам экземпляр инициализирован, указатель на VMT прописан, виртуальные методы в конструкторе вызывать можно. Размеров в конструкторе не получить - это правильно поскольку размеры зависят от (многих) парентов и лайаутов. Но плохо что их вообще нельзя получить до show и часто приходится заниматься неприятными вычислениями длин/ширин или полагаться на мудрость лайаутов.
|
|
|
10795
|
Qt / Базы данных / Re: Для таблицы типа exel, spreadsheet. Помогите новичку.
|
: Декабрь 13, 2009, 18:49
|
Примитивная таблица из QTableWidget готова, теперь можете ответить на вопрос про модель? Я просто уже курсач делаю месяц и хочу сделать его продуманным.
Работа с большими данными предполагает свап на диск, организацию подкачки страницами и.т.п. Это непросто даже для данных фиксированной длины. Для данных как QString (т.е. произвольного размера) трудности многократно возрастают. Короче это совсем не "маленькое дополнение/фича" к уже имеющейся таблице, а новая работа которая превышает выполненную во много раз. Как правило, если данные велики, намного проще и лучше использовать БД чем управлять такими данными самому. Но не везде это подходит (напр для тех же excel таблиц БД может быть недостаточно гибкой). Я бы посоветовал думать реально и в рамках реальной задачи а не "растекаться мыслью по древу". Обсуждать таблицу 5Кх5К имеет смысл только если она реально есть (т.е. есть заказчик которому такая вещь нужна и который готов платить за нее). Иначе все мгновенно превращается в беспредметные фантазии (что я и вижу в запущенных Вами темах )
|
|
|
10796
|
Qt / Базы данных / Re: Для таблицы типа exel, spreadsheet. Помогите новичку.
|
: Декабрь 13, 2009, 18:09
|
Как решить проблему с большим потребленией памяти для QAbstractTableModel (таблица 5000*5000- забита строками QString)
Всегда есть ЗАДАЧА и она определяет что нужно а что нет. Если Вы делаете "просто таблицу" - это, скажем, тема лабораторной работы и сделать это можно за несколько дней или быстрее. А если Вы делаете "таблицу которая работает с большими данными" (1-2 Gb и более) - то это уже совсем др. задача которая может быть темой курсового или даже дипломного проекта - потому что работы в десятки раз больше. Поэтому не начинайте обсуждать серьезные вещи "просто так", из баловства. Сделайте сначала "просто таблицу" - до работы с большими данными Вам еще пахать и пахать
|
|
|
10798
|
Qt / Общие вопросы / Re: Трудоемкие задачи (прервать или продолжить). Как прервать?
|
: Декабрь 12, 2009, 19:57
|
C++ (Qt) void Spreadsheet::setRowCount(int count_,QProgressDialog &dialog) //мое работает { dialog.setLabelText(tr("set Row")); dialog.setRange(0,0); dialog.setValue(0); dialog.setMinimumDuration(1); QTableWidget::setRowCount(count_); RowCount=count_; }
При установке большого числа строк возникает зависание приложения на 3 сек. Как в эти 3 сек выводить QProgressDialog со свойствами: setRange(0,0), setValue(0)? Заранее спасибо Число шагов известно, значит надо использовать setRange(0, count_). Метод setRowCount позовет метод модели insertRows, вот там и обновляйте QProgressDialog
|
|
|
10799
|
Qt / 2D и 3D графика / Re: Рисование математической формулы
|
: Декабрь 12, 2009, 15:18
|
Обычно всё проще Можно воспользоваться html для этого дела.. Да, это конечно не LaTeX, но если формулы достаточно плюшевые, то вполне можно юзать Не знал что так можно, а мне это тоже может пригодиться. Спасибо за инфу
|
|
|
10800
|
Qt / 2D и 3D графика / Re: Рисование математической формулы
|
: Декабрь 12, 2009, 14:42
|
Писал синтаксический калькулятор, написал, теперь нужно чтобы введённая формула выводилась в нормальном графическом виде. Т.е. ввожу sqrt(x) а прога рисует знак коря и под ним x. Програмлю на qt, но с графикой ни когда не работал. Пожалуйста, подскажите в какую сторону рыть. Или может кто подскажет где найти такие исходники.
Обычно это решается шрифтом в котором есть знак корня, знак числа пи и.т.п. (т.е Вам не нужно рисовать знаки графикой)
|
|
|
|
|