crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику ViGOur ::: Спасибо сказали: 231 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
8.6.2017, 12:37 Не отображается текст
Ошибки каие-то есть?
97WzugSKd31, DaLgAMYeVr1, gHzcXItj3a1,
11.4.2017, 13:39 Не удается скачать архив с документацией по Qt 4.8.x
Привет.
Всему своё время. Так как недавно посыпался жесткий диск я еще не успел восстановить всё. Максимум к этим выходным подниму FTP и можно будет качнуть доки по ссылкам...
9or6UxhWRa1, gHzcXItj3a1,
20.1.2016, 10:15 QString объект из функции.
Ну смотри, если бы все это отрабатывало без оптимизации, то вызовы были бы примерно такие:
Конструктор QString             // Создаётся локальный объект QString
Конструктор копий QString  // Копируется временный объект возвращенный из returnStr
Деструктор QString              // Удаляется локальный объект QString созданный в returnStr
...
Деструктор QString              // Удаляется локальный объект QString базовый
При оптимизации буду вызваны только Конструктор и Деструктор, что-то вроде:
QString *returnStr()
{
    return new QString("a");
}
int main()
{
    QString *str=returnStr();
}
Но со своим выделением памяти и своим сборщиком мусора

Для того, чтобы изучить как и что работает ты можешь создать обычный класс CClass например и сделать для него все то же самое поэкспериментировав с ключами оптимизации.
Ponchikus,
19.1.2016, 17:24 QString объект из функции.
Это оптимизация такая: Return value optimization
Если поиграться с разными уровнями оптимизации, то скорее всего при -O0 должны быть разные адреса.
Ponchikus,
25.12.2015, 13:46 Файл проекта
QMAKE_LFLAGS += -Wl,--no-as-needed
QMAKE_CXXFLAGS += -pthread -std=c++11

LIBS += -lpthread -lrt
ibx,
23.12.2015, 9:52 Перевести код под gtk+3.6.4
Ну да, ни инициализации, ни выделения памяти, ничего!
Ты лучше скажи, что нужно сделать?

Судя по коду, лабу! :)
lss,
16.12.2015, 13:55 QFileSystemModel и полное сканирование папок
Цитата(Алексей1153 @ 16.12.2015, 13:46) *
ViGOur, рекурсии нету, поскольку указаны SLOT и SIGNAL , поэтому препроцессор вроде понимает их как разные сигнатуры
согласен, перепрочел, был невнимателен.
dmsovetov,
1.12.2015, 16:01 Как создать QToolBar на QDockWidget?
QToolBar создаётся на QMainWindow.
Создай объект QMainWindow, на нем создай тулбар, и помести его на QDockWidget, примерно так (в конструкторе доквиджета):
QMainWindow *pChildMain = new QMainWindow(this);
QToolBar *pToolBar = new QToolBar(pChildMain);
pChildMain->setWindowFlags(Qt::Widget);
pChildMain->addToolBar(pToolBar);
setWidget(pChildMain);
Код сделал на коленке, потому не обессуть если не сразу заработает! :rolleyes:
kruger,
26.11.2015, 9:03 Создание БД и таблицы
Попробуй так:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("password");

if (!db.isValid()){
    qDebug() << db.lastError().text();
    return;
}

db.open();
QString query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'addressbook'";
QSqlQuery q = db.exec( query );
if (q.size() == 0)
{
    db.exec("CREATE DATABASE IF NOT EXISTS addressbook;");
    qDebug() << db.lastError().text();
    db.setDatabaseName("addressbook");
    // ... создание таблиц или еще чего-то там
}
ht1515,
28.10.2015, 9:41 "Склеивание" сообщений ТСР
1. Почему нет? Ты можешь считать за один раз сколько тебе нужно, а там уже разобрать эти данные на 1 байт + данные + склеенное сообщение (если будет и отправить склеенной для следующего разбора)
2. Синхронизация, используй QMutex, чтобы пока один поток не отработал, другой не вошел для чтения.

Метод recv был для примера, ты можешь так же в место него использовать read... :)
pwp2008,
27.10.2015, 12:31 Перевести QVariant обратно в мой указатель на объект
Тут всё намного проще чем кажется, просто после объявления твоего класса CMyStatus добавь строчку:
Q_DECLARE_METATYPE(CMyStatus*)
И всё заработает! :)
kruger,
27.10.2015, 10:30 "Склеивание" сообщений ТСР
4 байта было сказано для примера, ты сам решай, какой длины будет у тебя поле длина пакета. К тому же жестко указывать размер нельзя, а только sizeof(int), так как под разными системами int разного размера.
4 байта могут так же прийти по частям, это маловероятно, но может быть, например при медленном соединении или при крайней загруженности системы или сети.
Блоки не переставляются и контрольные суммы по идее не нужны, так как TCP протокол гарантирует доставку пакета
Набросал на коленке пример реализации:
struct sDataPacket
{
    int nLen;
    char *pData;
};

sDataPacket *getPacket( int socket )
{
    sDataPacket *pPacket = new sDataPacket;
    // Читаем первые 4 байта
    int nLen = sizeof(pPacket->nLen);
    char *pBuff = new char[nLen];
    do
    {
        int nRet = recv( socket, pBuff, nLen, 0 );
        if( nRet == sizeof(pPacket->nLen) )
        {
            // Переводим прочитанные 4 байта в длину
            memcpy((void*)&pPacket->nLen, (void*)pBuff, nLen);
            // Читаем указанное количество байт данных
            if( pPacket->nLen > 0 )
            {
                pPacket->pData = new char[pPacket->nLen];
                nRet = recv( socket, pPacket->pData, pPacket->nLen, 0 );
                if( nRet < pPacket->nLen )
                {
                    // Дочитываем
                }
            }
            break;
        }
        else
        {
            // Дочитываем
        }
    }while(true);
    delete []pBuff;

    return pPacket;
}
Тебе только осталось дописать докачку...

Как вариант, во избежании склеивания, можно сделать клиент серверный диалог с подтверждением, например:
1. Клиент отправляет пакет
2. Сервер получает пакет
3. Сервер отправляет подтверждение о получении пакета
4. Клиент получает подтверждени и идет к 1 пункту
pwp2008,
26.10.2015, 17:17 "Склеивание" сообщений ТСР
pwp2008, вот ты упрямец! Перечитай заново, что я описал выше. :)

Таймауты тебе могут помочь в том случае, если сервер или клиент не заняты, но если один из них занят (I\O операции или по процессору) то всеравно будет склейка и тайм ауты не помогут. Это из серии я надеюсь всё будет в порядке, но в программировании это не допустимо, потому нужно создавать условия, чтобы всё было в порядке.
pwp2008,
20.10.2015, 21:03 "Склеивание" сообщений ТСР
Ты не понял.
TCP стеку все равно, что в него попадает видео, звук или сообщения, он как получил так и отдал, твоя забота уже правильно разобрать переданые тобой данные.
За пример можно взять лог файл, если не сделать правильное форматирование, то логи будут не читабельны, то же самое и здесь.

Есть 3 варианта того, какими ты можешь получить свои сообщения:
1. Не полное сообщение (в том случае, если ты забираешь данные быстрей, чем они приходит)
2. Полное сообщения (идеальное стечение обстоятельств)
3. Склеенное сообщение (в том случае, если ты забираешь медленней, чем они приходят и склееным может быть как часть следующего пакета, так и несколько пакетов...)

Обычно, чтобы всегда были идеальные условия используют структуру приведенную мной выше, по следующей схеме:
1. При поступленни данных читаем первые 4 байта, и приводим их к int, чтобы получить размер буфера.
2. Читаются столько байт, сколько указанно в первых четырех байтах полученных в 1 пункте.
3. Что-то там делаем с полученными данными.
4. Переходим к 1 пункту.

Или чтобы не писать свой протокол над TCP, отправлять сообщения одной длины, например 1024 байта...
pwp2008,
20.10.2015, 9:09 "Склеивание" сообщений ТСР
Это нормально. Пакет может прийти неполный или склеенный с другим, а то и с несколькими.
Для того, чтобы нормально разбирать пакеты обычно для их отправки используют свою структуру данных, что-то вроде:
struct sTcpData{
    int nLen;    // Размер буфера
    char *pBuf;  // Сам буфер
}
По желанию можно добавить CRC

TCP буфер можно расценивать как файл, в который пишутся данные одним потоком, а из другого потока ты эти данные разбираешь.
pwp2008,
6.10.2015, 12:51 Аля Visio или создание, перемещение объектов на форме...
Посмотри пример: Elastic Nodes, если я тебя правильно понял, что тебе и нужно.
kruger,
6.5.2015, 11:24 MDI window и plugin
Сделай так и все должно работать:
QMdiSubWindow * pSubWindow= pArea->addSubWindow( pWidget );
pSubWindow->show();  // <----------------- Добавить это строку
balbes,
3.1.2015, 22:14 вызов окна в зависимости от выбранного значения в combobox
Делаешь один базовый класс для твоих документов, от которого будут унаследованы твои Prosmotrrashodnakladnih, ProsmotrVozvratov и другие.
Добавляешь объект базового класса в твой класс MainWindow и делашь что-то вроде:
switch (index)
{
case 0:
     m_pBaseDoc = new Prosmotrrashodnakladnih;
    break;
case 1:
     m_pBaseDoc = new ProsmotrVozvratov;
break;
    default: return;  
}
Или реализуй полноценную фабрику классов...
lexflax,
14.1.2014, 15:04 как избавиться от / "обнулить" пространство имён?
Не сразу тебя понял...

Как я понимаю, обы куска ты где-то взял и совместил вместе, правильно?
Если так, то для второго куска тебе нужно просто сделать обертку, вроде:
#ifdef MY_LIB
namespace Lib {
#endif  // MY_LIB

// 2 Кусок

#ifdef MY_LIB
}
#endif  // MY_LIB
Ну и добавь в
#define MY_LIB
в заголовочник, где объявлена твоя Lib

После чего все будет работать...
Litkevich Yuriy,
1.8.2013, 13:47 Интеграция QT и OpenCV 2.4.6
Цитата(skipy @ 31.7.2013, 23:35) *
только теперь вот такой вопрос: где они находятся?
Или их нету и необходимо самому написать
Они есть в сырцах Qt, если ты используешь уже сконфигуренное и скомпиленное Qt, то тебе нужно скачать исходники Qt, и самому сконфигурить их...


Цитата(Iron Bug @ 31.7.2013, 22:21) *
роблемы будут не только в случае с исключениями, но и в случае вызова виртуальных методов и контрукции дочерних классов
Про виртуальные методы вылетело из головы... Я не говорю, что это правильно, а говорю о том, что для Qt Designer это принято и *.h c *.cpp файлы автоматически генерируются Qt Designer, которые отвечают за ручную компановку форм...
skipy,
3.7.2013, 11:11 Web/JavaScript: Как прочитать в переменную поле ввода (input)
Цитата(Litkevich Yuriy @ 1.7.2013, 22:51) *
Осталось не понятно после функции вал надо ли ставить точку с запятой или нет? (работает вроде, но вдруг это, например, дурной тон, ...)
Я ставлю, так как незнаешь как и кто реализует интерпретатор JavaScript... :)
Litkevich Yuriy,
1.7.2013, 21:20 Web/JavaScript: Как прочитать в переменную поле ввода (input)
Посмотри: http://api.jquery.com/val/

И переменную value из данного примера присваивай:
yaGoalParams.quantity = value;
Litkevich Yuriy,
10.5.2013, 16:38 Паттерны проектирования
В вики я начал описывать паттерны проектирования.
Что-то было взято с форума, что-то сам сваял.

Кто хочет присоединяйтесь, чтобы быстрей сделать. Если желающих не будет сам доделаю как время будет... :)

з.ы. ссылку на патерны сделал на главной странице вики.
Litkevich Yuriy,
7.4.2013, 18:54 Хеш пароля root
/etc/passwd (от англ. password — пароль) — файл, содержащий в текстовом формате список пользовательских учётных записей (аккаунтов).

Является первым и основным источником информации о правах пользователя операционной системы. Существует в большинстве версий и вариантов UNIX-систем. Обязан присутствовать в POSIX совместимой операционной системе.

Каждая строка файла описывает одного пользователя и содержит семь полей, разделённых двоеточиями:
  1. регистрационное имя или логин;
  2. хеш пароля (см. ниже);
  3. идентификатор пользователя;
  4. идентификатор группы по умолчанию;
  5. информационное поле GECOS (см. ниже);
  6. начальный (он же домашний) каталог;
  7. регистрационная оболочка, или shell.


Например:
root:lZTB0KTrSKy8M:0:0:root:/root:/bin/sh/daemon:x:1:1:daemon:/usr/sbin:/bin/false/bin:x:2:2:bin:/bin:/bin/false
john:H5ned8EV1vank:101:101::/home/john:/usr/bin/csh/bill:7qeFjndagetZk:102:102::/home/bill:/bin/sh
DaiV,
27.3.2013, 18:57 Баги в форуме
Это ты наверное сделал (САМ) древовидную структуру, чтобы вернуть обратно тебе нужно Опциях (это кнопка вверху справа, прям под кнопками ответить, открыть тему, так у меня по крайней мере в теме Cozy Green), выбрать режим отображения Стандартный.

Если же я тебя не правильно понял, скрин дай. :)
Алексей1153,

8 страниц V   1 2 3 > » 
RSS Текстовая версия Сейчас: 19.3.2024, 13:56