4426
|
Qt / Qt-инструментарий / Re: QtCreator + Boost
|
: Августа 01, 2011, 17:50
|
1. для того, чтоб не "на ум приходило", надо читать документацию 2. регэксп не запускал, но должен работать 3. может ты там тоже только папку указывал без имени файла? нерабочий код в студию.
|
|
|
4427
|
Qt / XML / Re: Как читать Enter'ы?
|
: Августа 01, 2011, 17:47
|
а то, что тег заканчивается на <binary> (без слеша) - так и должно быть или опечатка в посте?
|
|
|
4428
|
Qt / Qt-инструментарий / Re: QtCreator + Boost
|
: Августа 01, 2011, 16:15
|
т.е. указать просто папку нельзя?
нет. неужели так сложно к папке приплюсовать слеш и имя файла?  Кстати, вопрос такой. Как QRegExp::cap() узнает какую стрингу ему надо парсить, или предварительно обязал надо юзать QRegExp::indexIn()? Нет ли какой то setText или перегруженный cap с аргументом стринга?
QRegExp::cap() только возвращает захваченную подстроку (с параметром 0 - полное совпадение), а непосредственно поиск выполняется в QRegExp::indexIn() (или QRegExp::lastIndexIn() или QRegExp::exactMatch()). и тут тоже пытаешься сэкономить на строчке? 
|
|
|
4431
|
Qt / Qt-инструментарий / Re: QtCreator + Boost
|
: Августа 01, 2011, 08:14
|
По поводу QRegExp. Мне надо было вытащить USERPROFILE из environ. Я сначало сделал QString str = QProcess::systemEnvironment().join(",") и нахожу регуляркой что мне надо, что бы не пробегать foreach (нравятся регулярки, хотя хз че быстрее будет). Юзаю бустом такую регулярку = boost::regex xRegEx("USERPROFILE=(.+?),"); Такая же с помощью QRegExp не канала. Вроде вообще ничего не находила.
C++ (Qt) QRegExp re("USERPROFILE=(.+),"); re.setMinimal(true); QString userprofile; if (rx.indexIn(QProcess::systemEnvironment().join(",")) > -1) userprofile = rx.cap(1);
а вообще, как говорится  Если у программиста есть проблема и он думает — «Я решу ее при помощи регулярных выражений», то с этого момента у программиста уже две проблемы. QFileInfo f("d:\\vstup.py"); QFile::copy(f.absoluteFilePath(),QDir("d:\\test_qt").absolutePath()) ? std::cout<<"ok" : std::cout<<"bad"; Вот так использовать? Всеравно не копирует. Наверное доступа нету. надо указывать полный путь к файлу в обоих параметрах: C++ (Qt) QFileInfo f("d:/vstup.py"); QFile::copy(f.absoluteFilePath(), QString("d:/test_qt/%1").arg(f.fileName())) ? std::cout<<"ok" : std::cout<<"bad";
и да, в Qt можно всегда пользоваться прямыми слешами независимо от платформы. если же надо вывести путь в "родном" виде, то используй функцию QDir::toNativeSeparators(). ну и конечно папка d:/test_qt должна существовать.
|
|
|
4433
|
Qt / Дополнительные компоненты / QtCreator + tabs UI
|
: Июля 31, 2011, 13:21
|
Нашёл проект по добавлению табов в QtCreator - http://gitorious.org/qt-creator-tabs . Жаль только он основан на версии 2.1.80 и последний коммит был 15-го февраля, но выглядит вполне нормально. Для сборки правда пришлось скопировать некоторые приватные хедеры из исходников Qt и сделать небольшую правку в filefilteritems.h (оказывается нельзя объявлять свойства в классе-наследнике на основании информации из класса-родителя). Немного поигрался - вроде ведёт себя нормально, но при закрытии проекта открытые табы не закрываются (собственно как и при закрытии проекта в безтабовой версии открытые файлы не закрываются).
|
|
|
4434
|
Qt / Работа с сетью / Re: Скачивание картинок
|
: Июля 31, 2011, 12:16
|
C++ (Qt) QString data = rep->readAll();
думаю проблема тут - readAll() всё-таки возвращает QByteArray, а не QString, а дальше ноль-символа QString не читает (а 12-й байт как раз и есть ноль-символ). лучше записывай данные в файл так: C++ (Qt) file.write(rep->readAll()); file.flush();
и после записи не забудь удалить QNetworkReply: C++ (Qt) rep->deleteLater();
|
|
|
4438
|
Qt / Вопросы новичков / QDataStream operator << записывает не сразу
|
: Июля 30, 2011, 19:07
|
Здравствуйте. Почему оператор << у QDataStream записывает данные в свой device() не сразу же (как например cout, см. ниже), а лишь в конце команды? Вот пример: C++ (Qt) QByteArray saveFileContents; QDataStream outputDataStream(&saveFileContents, QIODevice::ReadWrite); ... quint32 fileSize = saveFileContents.size(); outputDataStream << fileSize << checksum(saveFileContents);
Раньше у меня стоял вывод этих двух значений на разных строчках, а сегодня решил сэкономить на одной и втулил оба вывода в одну. Убил часа 2 на то, чтобы понять, что так делать нельзя, поскольку вызов checksum() происходит прежде, чем QDataStream записывает fileSize, и соответственно в момент вызова checksum() новое значение ещё не успевает появиться в saveFileContents. Попробовал сделать нечто аналогичное с cout, так тут всё происходит так, как и ожидается (хотя может и не совсем удачный пример): C++ (Qt) int a[] = {2, 3}; std::cout << a[0]++ << " " << (a[0] + a[1]); // вывод "2 6"
|
|
|
4439
|
Qt / 2D и 3D графика / Re: Уничтожение объектов
|
: Июля 30, 2011, 18:42
|
удивительно как у тебя код скомпилировался - выделение памяти совершенно неправильное. я так понимаю у тебя там "строки строк" указателей на Hexagon - Hexagon ***arr. C++ (Qt) BattleField::BattleField(QObject *parent) : QGraphicsScene(QRectF(0,0,12*80,12*60), parent) { int x=64; int y=64; arr = new Hexagon**[rows]; //Указатели на строки указателей for (int i=0; i<rows; ++i) { if(i%2!=0) cols--; arr[i] = new Hexagon*[cols]; //Создание строк указателей for (int j=0; j<cols; ++j) { arr[i][j] = new Hexagon; //Создание объекта по каждому указателю addItem(arr[i][j]); arr[i][j]->setPos(x,y); x+=2*len; } if(i%2!=0) {cols++; x=64;} else x=64+len; y+=1.5*r; } } BattleField::~BattleField() { for (int i=0; i<rows; i++) delete[] arr[i]; delete[] arr; }
ещё для простоты можно пользоваться вектором или списком. а сцена - да, сама поудаляет добавленные на неё объекты.
|
|
|
4440
|
Qt / Работа с сетью / Re: простейший вебсервер на qt
|
: Июля 30, 2011, 00:48
|
а нету исходников простенькой программы (чем проще тем лучше,с такой штукой я еще дела не имел) реализующей веб морду посредством данного WebToolkit. на сайте этого тулкита куча примеров если не ошибаюсь
|
|
|
|
|