2073
|
Qt / Многопоточное программирование, процессы / Re: Правильное разделение решателя и GUI (прогресса)
|
: Апрель 23, 2013, 08:32
|
PPS а "решатель" - это откуда у вас такой термин? (не ирония, действительно интересно)
в определенных кругах термин используется по аналогии с английским solver. В точку На самом деле, я как-то не особо хорошо разобрался с QThread и у меня всё равно всё валит в одном потоке, да и нет сигнала finished(). Мне не нужно нормального завершения потока при нажатии на отмену. Сейчас у меня есть класс, назовем его Parser. В нём есть слот parse. Есть ещё QThread* parserThread. Вот я moveToThread мой Parser* parser и connect(parserThread, SIGNAL(started()), parser, SLOT(parse())); connect(parserThread, SIGNAL(finished()), this, SLOT(showSuccessParse()));, где connect выдает везде значение true. далее parserThread->start(); parseProgrDlg->exec(); Результат: выполняется слот parse при этом показывается зависший диалог прогресса, а по завершении метода диалог отвисает и, по пока ещё не понятным мне причинам, не выполняется слот showSuccessParse()....
|
|
|
2074
|
Qt / Многопоточное программирование, процессы / Правильное разделение решателя и GUI (прогресса)
|
: Апрель 22, 2013, 09:45
|
Привет всем!!! Небезизвестно, что если в одном потоке заключить какой-нибудь решатель и погресс диалог, то с прорисовкой графического интерфейса будут проблемы. Меня интересует, как можно вывести в отдельный поток решатель для нормального отображения прогресса с min(0), max(0) и возможностью отмены процесса решателя без внедрения в решатель каких-либо проверок (типа if(кнопка отмены была нажата) return;)
|
|
|
2075
|
Программирование / Общий / Re: Тип double из c++ в delphi
|
: Апрель 11, 2013, 22:01
|
Снимаю вопрос. Я сам разобрался. Оказалось, что при использовании оператора << в QDataStream происходит кодирование данных. Нужно было просто записывать в сыром виде... int QDataStream::writeRawData ( const char * s, int len )
|
|
|
2076
|
Программирование / Общий / Тип double из c++ в delphi
|
: Апрель 11, 2013, 21:37
|
Всем привет! Есть функция в c++, которая записывает в бинарный файл переменную double. Этот файл я читаю в Delphi с помощью: reset(f, 1); blockRead(f, doubleVariable, 8);
почему-то в doubleVariable оказывается не то значение, которое я ожидаю... чтение идёт верно, так как перепроверял при записи считанного файла в массив байтов. В c++ веду запись с помощью <QDataStream>, размер файла - 8 байт. В чём может быть проблема?
|
|
|
2077
|
Qt / Вопросы новичков / Как работать с QScrollArea?
|
: Март 28, 2013, 10:47
|
Доброго времени суток! Не могу понять, что нужно сделать для оптимального отображения... есть виджет, который содержит несколько QGroupBox на QHBoxLayout из документации понял, чтобы отображался этот виджет в прокрутке, нужно задать минимальные его размеры. Но при этом способе получается, что содержимое виджета расползается. Как сделать вывод без этого расползания?
|
|
|
2079
|
Qt / Вопросы новичков / Накладываются виджеты друг на друга
|
: Март 27, 2013, 10:45
|
Доброго времени суток. Создаю окно на подобии окна настроек, где есть QListWidget. То есть, по сути, при изменении выбора элемента списка выводится соответствующее содержимое настроек в этом же окне рядом с самим списком... Я столкнулся с такой проблемой, что создал в конструкторе несколько виджетов для настройки и проблема в том, что не добавляя на layout родителя, они вылезают в верхнем левом углу... Как избавиться от этой проблемы? setVisible()?
|
|
|
2081
|
Qt / Пользовательский интерфейс (GUI) / Re: QMdiSubWindow запрет на удаление дочернего виджета
|
: Февраль 25, 2013, 11:07
|
Решил вопрос костылём! Сначала сделал код void MdiSubWindow::closeEvent(QCloseEvent* event) { setWidget(0); } Но он привел к закрытию самого окна, но таб и экшн в меню для этого окна всё равно оставался и не отвечал на действия. Затем добил void MdiSubWindow::closeEvent(QCloseEvent* event) { setWidget(0); mdiArea()->removeSubWindow(this); } Всё теперь работает как и было мне надо. Возможно, это велосипед. Может быть был способ без создания наследованного класса от QMdiSubWindow? Жду продолжения развития темы.
|
|
|
2082
|
Qt / Пользовательский интерфейс (GUI) / Re: QMdiSubWindow запрет на удаление дочернего виджета
|
: Февраль 25, 2013, 10:55
|
В документации по addSubWindow() написано с примером что и как делать.
Ничего не помогло. У меня организовано закрытие окон в табах а также в меню. Изначально у меня было типа mdiArea->addSubWindow(myWidget)->show(); По сути, ничего удаляться из myWidget не должно при закрытии суб окна, так как при данном действии создается новое суб окно, родитель которого mdiArea и оно является вьюпортом myWidget и должно удаляться только само окно при закрытии, как я понял. Теперь попробовал создать свое суб окно: QMdiSubWindow* win = new QMdiSubWindow; win->setWidget(flats[selectedFlat]); win->setAttribute(Qt::WA_DeleteOnClose); mdiArea->addSubWindow(win)->show();
Это кусок кода из моей программы, где flats это QMap со значениями QWidget*. Я проверил, что при повторном запуске значения адресов не меняются. Всё равно, данный код от проблемы не спас...
|
|
|
2085
|
Qt / Пользовательский интерфейс (GUI) / QMdiSubWindow запрет на удаление дочернего виджета
|
: Февраль 24, 2013, 23:06
|
Всем привет! У меня имеется в программе дерево с элементами. При нажатии на элемент появляется суб окно с виджетом, привязанным к нажатому элементу mdiArea->addSubWindow(myWidget)->show(); Если я закрою суб окно и попытаюсь снова открыть его, то програма выдаст мне ошибку Unhandled exception at 0x650f448f (QtGuid4.dll) in postprocessor.exe: 0xC0000005: Access violation reading location 0xfeeeff46. Я так понимаю, что при закрытии суб окна у меня вычищается myWidget и снова его вывести на экран становится невозможным. Я пробовал переопределить closeEvent у QMdiSubWindow и прописать там hide() и ignore(), но это не помогло, а только привело к тому, что окно закрывается, а таб из-под него остается и становится каким-то неактивным... Как же мне решить эту проблему?
|
|
|
|
|