4411
|
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 должна существовать.
|
|
|
4413
|
Qt / Дополнительные компоненты / QtCreator + tabs UI
|
: Июль 31, 2011, 13:21
|
Нашёл проект по добавлению табов в QtCreator - http://gitorious.org/qt-creator-tabs . Жаль только он основан на версии 2.1.80 и последний коммит был 15-го февраля, но выглядит вполне нормально. Для сборки правда пришлось скопировать некоторые приватные хедеры из исходников Qt и сделать небольшую правку в filefilteritems.h (оказывается нельзя объявлять свойства в классе-наследнике на основании информации из класса-родителя). Немного поигрался - вроде ведёт себя нормально, но при закрытии проекта открытые табы не закрываются (собственно как и при закрытии проекта в безтабовой версии открытые файлы не закрываются).
|
|
|
4414
|
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();
|
|
|
4418
|
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"
|
|
|
4419
|
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; }
ещё для простоты можно пользоваться вектором или списком. а сцена - да, сама поудаляет добавленные на неё объекты.
|
|
|
4420
|
Qt / Работа с сетью / Re: простейший вебсервер на qt
|
: Июль 30, 2011, 00:48
|
а нету исходников простенькой программы (чем проще тем лучше,с такой штукой я еще дела не имел) реализующей веб морду посредством данного WebToolkit. на сайте этого тулкита куча примеров если не ошибаюсь
|
|
|
4424
|
Qt / Пользовательский интерфейс (GUI) / Re: Separator'у не присваивается имя
|
: Июль 28, 2011, 09:08
|
Но лучше сделать выпадающее меню на этот пункт со всеми последними файлами.
сначала думал так сделать, но потом передумал и решил добавлять все недавние файлы прямо в основное меню. а сепаратор я просто создаю в конструкторе и сохраняю указатель на него.
|
|
|
4425
|
Qt / Общие вопросы / Re: Проблема с чтением из файла
|
: Июль 27, 2011, 17:04
|
надо все русские буквы заменить percent-encoded utf-8 эквивалентом. например, слово "русский" будет выглядеть как "%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9" (без кавычек). а как страницу скачать только недавно несколько раз обсуждалось, посмотри в поиске.
|
|
|
|
|