Russian Qt Forum
Май 22, 2024, 14:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 87 88 [89] 90 91 ... 96
1321  Qt / Общие вопросы / Re: непонятки с таймером, не всегда запускается, см. сообщение : Июнь 05, 2010, 00:06
ооо... там сложно рисуется... надо пробовать, но как-то странно выглядит это все  Грустный

тем более, что в Redraw используются вызовы Qt для рисования отдельных объектов, по идее оно должно разобраться с событиями

и если затык в том, что сигнал от таймера во время Redraw не приходит, то тогда почему он не приходит и после окончания Redraw?...
1322  Qt / Общие вопросы / Re: непонятки с таймером, не всегда запускается, см. сообщение : Июнь 04, 2010, 15:44
методом тыка выяснил, что

- таймер таки запускается, после отрисовки он остается активен, и останавливается соответствующим stop()
- независимо от заданного времени таймера, он не срабатывает по истечении заданного времени, поскольку stop() выполняется и после 2х секунд рисования, то, что таймер работает, показывает проверка isActive() НО! при этом таймером не генерится сигнал, и слот slNull() не вызывается, пробовал с разными типами соединений - не имеет значения
- при этом сигнал почему-то генерится, если убрать остановку таймера... Непонимающий - при длительной перерисовке курсор мигает

я баг нашел?
1323  Qt / Общие вопросы / непонятки с таймером, не всегда запускается, см. сообщение : Июнь 04, 2010, 14:59
хотел сделать, чтобы если перерисовка некоего объекта требует времени больше полсекунды, отображались песочные часы, вроде все просто

Код:
void MainWindow::slWaitCursor()
{
QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) );
cursorchanged = true;
}

void MainWindow::slNull()
{
slMessage("null\n"); // отладочная печать
}

void MainWindow::redrawScene()
{
QTimer timer; // = new QTimer;
cursorchanged = false;
connect( &timer, SIGNAL(timeout()), this, SLOT(slWaitCursor()) );
timer.start( 500 );
//a->processEvents();
large_object->Redraw();
connect( &timer, SIGNAL(timeout()), this, SLOT(slNull()) );
timer.stop();
if( cursorchanged )
QApplication::restoreOverrideCursor();
}

cursorchanged всадил на всякий случай, поскольку не написано, что restoreOverrideCursor() ничего не делает, если курсор не перегружался

шаманство с реконнектом слотов сделал, поскольку timer->singleShot стреляет всегда, независимо от способа и времени исчезновения или остановки таймера - то есть, если сделать stop до истечения времени, сигнал тоже будет послан

но... не работает, почему-то таймер не запускается, поскольку явно видно, что никогда не вызывается slNull() и не меняется курсор, вообще никогда

но! стоит убрать строку timer.stop(); - таймер начинает удивительным образом работать, сигнал в slNull сыпется каждые 500 мсек  Шокированный

large_object->Redraw(); не содержит ни таймеров, ни параллельных нитей, ничего, кроме много-много рисования на QGraphicsScene (причем именно держит свой код обработки объекта, который там выполняется), либо наоборот, мало-мало (тогда курсор менять не надо), но гарантированно - даже когда рисуется все пару секунд, никакие сигналы от таймера не идут, смотрел в отладчике - перед вторым connect в таких случаях явное зависание, но контрольная точка внутри slWaitCursor() не срабатывает (если убрать timer.stop(); то срабатывает)

думал, может очередь сообщений где-то блокируется, но вызов a->processEvents(); (a это есессно указатель на QApplication) не помогает

тупик... можно подумать и сделать часы как-то иначе, но вроде тут все должно работать
1324  Qt / Пользовательский интерфейс (GUI) / Re: как отличить полезные айтемы QListWidget от скроллбара? : Июнь 04, 2010, 08:22
да, конечно

конечно, вызывать обработчик события надо у того класса, который непосредственно наследован, поскольку классы в иерархии выше знать не знают что там ниже понавешано, соответственно QWidget ни сном, ни духом про какие-то скроллбары

/* просто под конец дня, после отладки нескольких сотен строк с нуля, моск уже сбоить начинает */
1325  Qt / Пользовательский интерфейс (GUI) / Re: как отличить полезные айтемы QListWidget от скроллбара? : Июнь 03, 2010, 19:46
весь нет смысла, там чистая специфика, только выдача тултипа, а кроме этого ровно так:

Код:
bool MytListWidget::event( QEvent* event )
{
if( event->type() == QEvent::ToolTip )
{
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
if( itemAt( helpEvent->pos() ) == 0 )
return QWidget::event(event);
QString text = itemAt( helpEvent->pos() )->text();
..... код формирования и выдачи тултипа, никакой связи с событиями
return true;
}
        return QWidget::event(event);
}

вот при вызове последнего event(event) где-то внутри Qt валится при обработке mouse wheel event

наверно надо QListWidget::event(event) вызывать, завтра посмотрю
1326  Qt / Пользовательский интерфейс (GUI) / падает в Qt при обработке события was: как отличить полезные айтемы QListWidget : Июнь 03, 2010, 15:50
но все равно ерунда какая-то происходит - если это мой айтем, я выдаю тултип, и сваливаю return true;, тут все хорошо

но если не мой, я честно сваливаю в виде return QWidget::event(event); по понятным причинам, так и в примере написано

так вот, почему-то при скроллированнии вниз, когда скроллтаб упирается в нижний или верхний край, стабильно происходит падение где-то в потрохах Qt внутри этого обработчика, который я вызываю, в стеке видно множество внутренних вызовов

если отключаю свой обработчик event то все нормально работает
1327  Qt / Пользовательский интерфейс (GUI) / Re: как отличить полезные айтемы QListWidget от скроллбара? : Июнь 03, 2010, 15:31
ну так оно и было... уже в отладчике увидел... Смеющийся
1328  Qt / Пользовательский интерфейс (GUI) / как отличить полезные айтемы QListWidget от скроллбара? : Июнь 03, 2010, 15:17
под конец рабочего дня моск уже плавится, не вижу, как сделать это...

есть список, унаследованный от QListWidget, отличается наличием обработчика клавиатуры, и обработчиком событий для реализации тултипа

начинается этот обработчик так:

Код:
bool MytListWidget::event( QEvent* event )
{
if( event->type() == QEvent::ToolTip )
{
QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
QString text = itemAt( helpEvent->pos() )->text();

................. и далее с полученной строкой что-то происходит, из чего получается тултип

собственно слямзено отсюда - и все работает, пока... курсор не зависнет на скроллбаре этого списка, тут же слет, поскольку внутри itemAt()->text() там что-то не определено

то есть, логично проверку сделать, не оказался ли кусрор над полезной строкой списка, вроде бы даже есть int QListWidgetItem::type () - но с чем его сравнивать? в список добавлялись честные QString, но целочисленного типа я в упор у QString не вижу...  Непонимающий

наверно все алиментарно, просто устал под конец дня
1329  Qt / Общие вопросы / Re: найти все динамические библиотеки... : Июнь 01, 2010, 11:02
не годится ни в коем случае, вот из-за этого: "*.so"

код мультиплатформенный, поэтому загрузка всего каталога, и перебор всех имен на предмет isLibrary
1330  Qt / Общие вопросы / найти все динамические библиотеки... : Июнь 01, 2010, 10:32
надо найти и загрузить все динамические библиотеки в определенном каталоге, при загрузке вызвать в них определенные функции для инициализации

предполагал, что будет достаточно сделать вызов какого-нибудь системно-независмого QtFindFirst, получить первый файл, приложить к его имени QLibrary::isLibrary, если подходит, загрузить, найти нужную точку входа, если не нашлась выгрузить, если нашлась, вызвать ее, и потом каким-нибудь QtFindNext найти следующий файл и т.д....

но пока облом - не вижу готовой пары FindFirst/FindNext, а использовать имеющиеся средства, например, QDir::entryInfoList - как-то громоздко получается... или я не вижу в упор нужных мне методов, или их вообще нет, и можно сделать только с помощью entryInfoList ?
1331  Qt / Qt-инструментарий / Re: как же побороть статическую сборку?... : Июнь 01, 2010, 08:16
какие должны быть в наличии библиотеки для статической сборки? файлы lib*.a в каталоге \Qt\20??.??\qt\lib ? они присутствуют

Проверь, что за профиль Qt у тебя выбран. Скорее всего, у тебя для проекта выбран профиль динамической Qt!!!

где это выбирается? в Проекты, ни в одной закладке профиль динамический/статический не выбирается
может для Release ключ -static нужен?
1332  Qt / Пользовательский интерфейс (GUI) / Re: Помогите плиз QTextBrowser,,,,, : Май 31, 2010, 20:02
мнда... no matching function - это когда у класса есть похожие методы на вызываемый или описываемый, но точно такого же, с такими же параметрами, как производится попытка вызвать - такого нет

в данном случае описан конструктор с параметрами HelpBrowser::HelpBrowser(const QString &path, const QString &page, QWidget *parent, const char *name), но в коде main.cpp такой конструктор нигде не вызван

с таким знанием С++ за написание какого-либо кода не стоит даже думать, чтобы браться... обратно надо идти, к Трупу Страуса...
1333  Qt / Qt-инструментарий / Re: как же побороть статическую сборку?... : Май 31, 2010, 17:30
да и так понятно же, ну показывает эта программа зависимости от тех библиотек, которые тянутся за приложением, от Qt их всего 3 - QtCored4, QtGUId4 и mingwm10, больше никаких зависимостей нет - ничего нового с ее помощью узнать не удается

не понятно, почему приложение собирается вроде бы статически, судя по размеру, но библиотеки за собой тащит
1334  Qt / Qt-инструментарий / Re: как же побороть статическую сборку?... : Май 31, 2010, 08:12
да вот проблема в том, что собирал другой человек, и он уже не помнит что именно делал... причем у него долго не получалось вообще проект собрать, компоновка не выполнялась, он не шибко опытный, похоже нашаманил что-то с библиотеками  Злой

теперь надо постараться это исправить, и пока не ясно как лучше, может имеет смысл заодно перескочить на последнюю версию Qt, но боязно, как бы в проекте что-нибудь не посыпалось, больше 25000 строк уже работает, и еще дофига делать
1335  Qt / Qt-инструментарий / как же побороть статическую сборку?... : Май 28, 2010, 15:12
проект близится к состоянию альфа, собственно, уже практически подошел к ней, надо передавать на тестирование, но до сих пор тянется непонятный косяк со статической сборкой в Win, при помощи QtCreator

с самого начала вроде все было сделано, как сказано в документации, получены статические библиотеки, и даже они по-началу использовались в VisualStudio для статической сборки, которая нормально работала (собирал библиотеки не я, поэтому не знаю точно, что там делали)

потом проект продолжился с QtCreator, в момент начала был 1.2.1, и так он пока и остался, не было желания коней на переправе менять... но с Креатором какой-то непонятный косяк - все вроде настроено на статическую сборку, есть флаг QMAKE_LFLAGS += -static, используется еще дополнительная библиотека с ключом CONFIG += staticlib, Qt библиотеки вроде тоже статические

результат странный - приложение собирается явно статически, его размер более 9 МБайт, но при запуске оно все равно требует наличия библиотек QtGui и mingw  Непонимающий

если собирать динамически, то размер приложения получается несколько сотен килобайт, и также точно достаточно ему положить эти 2 библиотеки, чтобы оно заработало

это при сборке с отладчиком... если же собирать release, то получается тоже несколько сотен килобайт, но тут явно динамически, и разумеется тоже требует

где собака порылась?? просьба помочь разобраться по полочкам, где что надо настроить, и что сделать, чтобы от этих библиотек избавиться (+150 Мбайт тащатся)
Страниц: 1 ... 87 88 [89] 90 91 ... 96

Страница сгенерирована за 0.152 секунд. Запросов: 24.