crossplatform.ru

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

История благодарностей участнику mezmay ::: Спасибо сказали: 16 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
12.1.2015, 5:47 QTcpSocket. Как понять, что данные досттавлены?
Вообще протокол TCP должен гарантировать 100%-ю доставку данных и о таких проблемах я не слышал.
Теоретически может срабатывать алгоритм Нейгла:
Цитата
...Алгоритм Нейгла работает путем объединения нескольких небольших исходящих сообщений, а затем отправки их всех сразу. В частности, пока существует отправленный пакет, для которого отправитель еще не получил никакого подтверждения о доставке, отправитель должен держать в буфере его данные для отправки, до тех пор, пока не наберется достаточно данных на полный пакет, который можно отправить единожды...
Читать на википедии

Если коротко, то он маленькие пакеты сразу не отправляет, а ждет пока накопится определенный объем или не наступит таймаут.
Отключить это на Qt:
socket->setSocketOption(QAbstractSocket::LowDelayOption, true)
(надо сделать на обоих концах).

Но и простой отчет о доставке реализовать просто (но протокол TCP делает это внутри себя)
MishaUA,
24.1.2014, 12:41 Использование сокетов в QThread
Этому сокету передаются данные о том, с каким клиентом работать, с помощью дескриптора. Делается это в строке:
tcpSocket.setSocketDescriptor(socketDescriptor)

Ну а сам дескриптор скорее всего получается там, где слушаются коннекты.

Происходит это часто в другом потоке, а так как сами сокеты передавать между потоками нельзя, то передается дескриптор и в новом потоке присваивается сокету
iCast,
18.12.2012, 16:59 Развернуть окно и вывести на передний план
Прога свернута в панель задач и есть ярлык в трее. Надо чтобы по щелчку по значку в трее окно активировалось и попадало на передний план. Далаю так:
show();
raise();
activateWindow();
- не работает

решено через showNormal()
Artem,
15.12.2012, 21:14 Открытие одной формы по клику из другой
в заголовочном файле твоего класса:

class MainWindow : public QMainWindow
{
    ... // Тут конструкторы, деструктор, функции
private:
    history *hst;      
}

Рекомендую книгу по С++ Павловской
lex_qt,
15.12.2012, 16:22 QWebElement не находит дочернии элементы
А ждать loadFinished() кто будет?)
EvgeniyM,
14.12.2012, 22:11 Возможности QtWebkit (серия вопросов)
Для полной имитации клика мыши:
Создаешь событие мыши:
QMouseEvent event(QEvent::MouseButtonPress, pos, Qt::LeftButton, 0, 0);

Посылаешь его своему веб вью:
QApplication::sendEvent(webView, &event);


Что касается взаимодействия с flash, то уверен что можно только по координатам
EvgeniyM,
14.12.2012, 10:38 Переопределение конструктора
Так не делают, двойной инклюд делать нельзя, и вообще это плохое решение. Но можно

в tt.h
вместо
#include "mainwindow.h"

сделать
class MainWinow;
т.к. тебе в tt.h тебе нужен только указатель,
а в tt.cpp уже сделать
#include "mainwindow.h"


сигналы и слоты ведь не зря придумали, в том числе чтобы перекрестными указателями не страдать
alzasr,
13.12.2012, 23:51 Сохранение в формат SVG QMainWindow,
13.12.2012, 14:38 Уничтожение QTableWidgetItem при уничтожении QTableWidget
Нет, не нужно - сами уничтожаются
chereppiter,
8.12.2012, 20:04 Что значит "this"?
Указатель на текущий объект. В данном случае используется для того, чтобы указать создаваемой кнопке родительский обеъкт. То есть данный (вызывающий) объект станет родительским для кнопки.
А вообще почитай что-нибудь фундаментальное на эту тему - советую книгу по С++ Павловской
http://ru.scribd.com/doc/48055873/68/Указатель-this
EndlessBorland,
6.12.2012, 8:42 webkit & Javascript
Надо добавить в страницу, с которой ты работаешь, глобальный объект, унаследованный от QObject:
page()->mainFrame()->addToJavaScriptWindowObject("CWindowObject", obj);
Его properties станут свойствами созданного в JavaScript объекта, а слоты - методами. После этого в любом месте ява скрипта можешь вызывать нужный метод этого объекта, ну а в этом методе уже высылать нужный сигнал
lissdx,
5.12.2012, 8:31 ODBC+MySQL
правильно пишется AUTO_INCREMENT, а не AUTOINCREMENT. И для VARCHAR он, скорее всего, не работает
Sonnenstein,
30.11.2012, 23:13 QPlainTextEdit подсветка строки
Исправляюсь, надо использовать не NextRow, a Down:

ui.plainTextEdit->moveCursor(QTextCursor::Down);

Проверил, работает.

p.s. А NextRow нужен для перемещения по таблицам
p.p.s. И если перемещение делается, например, по нажатию кнопки, то надо не забыть вернуть фокус текст эдиту (если надо чтобы отображался курсор)
qt_user,
29.11.2012, 21:02 Потоки
Для этой задачи совсем не обязательно использовать дополнительный поток, если данные у тебя отсылаются в цикле, то можно сделать так:
for(int i=0; i<n; i++)
{
    sendDataByteToDevice(...);
    qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
}
То есть обрабатывать системные сообщения между отправками пакетов.

Но если хочешь освоить потоки, то тебе подойдет другой простой вариант:
1. Создаешь класс, унаследованный от QThread (лучше с помощью встроенного в среду разработки мастера):
mythread.h:
//Переопределяешь виртуальный метод run
class MyThread : public QThread
{
public:
     void run();
};
}

mythread.cpp:
 void MyThread::run()
{
    for(int i=0; i<n; i++)
        sendDataToDevice();    
}


Создаешь в основном GUI-потоке объект этого класса:
    MyThread thread;

И запускаешь поток:
    thread.start();

Обрати внимание, что поток запускается с помощью метода start(). Ну и время жизни переменной thread должно быть достаточным для выполнения потока
ALeXUI,
29.11.2012, 19:43 QPlainTextEdit подсветка строки
bool movePosition ( MoveOperation operation, MoveMode mode = MoveAnchor, int n = 1 )


под рукой нет среды разработки, но думаю что использовать так:
plaintTextEdit.movePosition(QTextCursor::NextRow, QTextCursor::MoveAnchor, n);

n - количество строк, которое надо пройти
qt_user,
14.12.2011, 20:08 вопрос размещения объектов для работы в отдельном потоке
Создаешь класс например CMyWork, унаследованный от QObject, содержащий все необходимые для работы протокола и записи в БД функции.
Экземпляр этого класса создаешь в run(), затем подключаешь необходиме для связи с основным потоком сигналы и слоты и запускаешь exec():

Пример:
void CMyThread::run()
{
    CMyWork work;

    connect(m_pMainThread, SIGNAL(beginWork()), &work, SLOT(slotBeginWork()));
    connect(m_pMainThread, SIGNAL(writeStringToDB(QString)), &work, SLOT(slotWriteString(QString)));

    exec();
}


таким образом все методы класса CMyWork будут работать в отдельном потоке.
call_me_Frank,

RSS Текстовая версия Сейчас: 11.12.2024, 21:21