10741
|
Qt / Общие вопросы / Re: Доступ в стороннее QT приложение
|
: Декабрь 23, 2009, 17:53
|
Поскольку я новичёк, имею право играть блондинку - почему нельзя получить структур данных? Насколько я понял по публикациям идею, QT приложение крутит свою очередь событий, принимая всё родительским окном. Но может алгоритм распределения запросов открытый (все ж кроссплатформенная идея ) и притворяясь "папой" можно попросить отдать содержимое чайлд контрола? Ну допустим (хотя я не вижу как) можем как-то управлять контролом, и что с того? Откуда мы знаем в каком окне какой контрол, что он делает и.т.п.? Пробежать по всем QTextEdit и вставить в каждый неприличное слово - вот максимум после долгих усилий. Стоит ли тратить время на примитивные пакости?
|
|
|
10742
|
Qt / Общие вопросы / Re: обработка нажатий клавишь клавиатуры
|
: Декабрь 23, 2009, 17:41
|
Я хотел сказать, что программа перестала реагировать на нажатия кнопок клавиатуры, после того как я удалил в MainWindow.cpp функцию keyPressEvent()
Значит потеряли фокус, ищите. Попробуйте кликнуть на wgOpeGL поможет ли это с клавиатурой?
|
|
|
10743
|
Qt / Пользовательский интерфейс (GUI) / Re: Зависает интерфейс программы нужна помощь....
|
: Декабрь 23, 2009, 17:35
|
прикрипил все исходники, с ними будет более понятно. После запуска нитки выполняется QString Run::apply(const QString &str)), я знаю что он бесконечен в цикле, мне это не важно, я так сделал специально, мне нужно понять каким образом я могу передать из QString Run::apply(const QString &str)) сигнал в статус бар формы во время каждой итерации бесконечного цикла и каким образом этот сигнал принять в форме ЗЫ: из void TransactionThread::run() сигнал в статус бар формы приходит нормально, я не знаю как его послать именно из QString Run::apply(const QString &str))
Это легко сделать "технически" (см. attachment). Но это идет вразрез с логикой примера, с именами переменных и.т.п. Подразумевается что "transaction" (класс Run) - это неделимая единица вычислений, которая не должна ничего знать об UI, не должна посылать сигналов и.т.п. Всем этим занимается класс TransactionThread. Поэтому посмотрите как но не используйте, уберите бесконечность в Run но оставьте ее в TransactionThread
|
|
|
10744
|
Qt / Общие вопросы / Re: Запись в бинарный фаил
|
: Декабрь 23, 2009, 15:50
|
Прошу прощения за глупость) EOF только для текстового файла. Обрезание бинарного файла можно реализовать только изменением значения длины файла на уровне файловой системы =)
И текстового тоже. Символ "конец файла" (насколько я помню 0x1A) это просто дополнительная возможность которую текстовые редакторы используют (если хотят). Так что нет смысла с ним возиться, проще действовать через QFile::resize
|
|
|
10745
|
Qt / Пользовательский интерфейс (GUI) / Re: Зависает интерфейс программы нужна помощь....
|
: Декабрь 23, 2009, 15:42
|
я понимаю что цикл бесконечный это не важно, у меня не получается послать сигнал на форму из (QString Run::apply(const QString &str)), как это можно сделать..... сейчас программа посылает сигнал только из потока (void TransactionThread::run() ), но мне необходимо посылать на форму значения ну к примеру I
В нитке у Вас 2 цикла и оба бесконечные. Поэтому строка во внешнем цикле emit allTransactionDone();
не получит управления никогда т.к. она стоит после вложенного цикла а он никогда не кончится
|
|
|
10746
|
Qt / Общие вопросы / Re: Доступ в стороннее QT приложение
|
: Декабрь 22, 2009, 19:46
|
Понятно то, что до Кьютового контрола, в отличии от стандартного виндового, нельзя достучаться через винапи.
Ну до окон-то можно, да толку все равно немного. Структур данных не получить
|
|
|
10748
|
Qt / Общие вопросы / Re: Доступ в стороннее QT приложение
|
: Декабрь 22, 2009, 17:54
|
Qt все контролы в окне сама отрисовывает. Думаю, дальше все понятно.
Хммм... а что собственно понятно? По-моему дело такое - есть 2 процесса, стало быть у них разные адресные пространства. И непонятно как данные из одного могут быть переданы в другое. Для этого нужно или работать через дескрипторы или shared memory - словом нужна какая-то специальная поддержка, а ее не видно. А вообще мне нравится вопрос любознательного молодого человека
|
|
|
10749
|
Qt / Пользовательский интерфейс (GUI) / Re: Зависает интерфейс программы нужна помощь....
|
: Декабрь 22, 2009, 17:44
|
QString Run::apply(const QString &str){ QString str2; //непосредственно расчеты int i=1; int a = 10; while (a !=i){ a=a/i; i++; str2 = QString::number(i,10); } return (str2); } Смотрим: a = 10, i = 1 a = 10, i = 2 a = 5, i = 3 a = 1, i = 4 a = 0, i = 5 a = 0, i = 6 Бесконечный цикл поскольку (a !=i) всегда. Поэтому что имеем то и имеем - да, интерфейс не виснет, я могу двигать и сайзить главное окно. Но вычисления (и нитка) никогда не кончатся Примечание: не беда если много исходников но пожалуйста в следующий раз прикрепляйте их zip файлом компилябельного примера (выдирать через copy/paste никому не хочется )
|
|
|
10751
|
Qt / Пользовательский интерфейс (GUI) / Re: Drag and Drop: удаление QDrag
|
: Декабрь 22, 2009, 16:56
|
Спасибо, почитал про этот сигнал. Если я верно понял мысль, то мне надо вешаться на QDrag::destroyed, так? Увы, сделать не получится вот почему: обвязка для драга вынесена, как я писал в отдельный класс, который не наследует QObject и не декларирует Q_OBJECT, т.е. про сигналы-слоты он не знает ничего, но зато умеет создавать QDrag, запоминать точку начала перетаскивания и принимать или не принимать dragEnter. ... Привеситься на QDrag::destroyed с привязкой его к widgetSelf я не могу за отсутствием общего предка у удаляемых виджетов.
Не проходят сигналы - не беда, никто не мешает Вам послать postEvent в деструкторе.
|
|
|
10753
|
Qt / Пользовательский интерфейс (GUI) / Re: Drag and Drop: удаление QDrag
|
: Декабрь 21, 2009, 21:30
|
Сам не решал но делал бы так: в деструкторе перекрытого QDrag испустил бы сигнал созданный с QueuedConnection (т.е. через очередь) а в слоте для этого сигнала уже спокойно удалял источник или что надо
Edit: и перекрывать не надо, есть удобный готовый сигнал destroyed
|
|
|
10754
|
Программирование / С/C++ / Re: Открыть проассоциированный файл - пусто в *argv[]
|
: Декабрь 21, 2009, 21:15
|
Ну так я понимаю что так не получится) А как же правильно-то сделать?)
Сделать ЧТО? Если Вы запускаете программу из другой - нет проблем, давайте командную строку как обычно, это работает. Если же надо пользователю дать возможность открыть файл с помощью этой программы - тогда хужее. На Mac Вам надо 1) отредактировать файл info.plist (вставить туда "Document Types" которые должны пониматься). Этот файл Qt создает там же где и проект. Проще всего взять info.plist у др. программы и скопировать по образцу. После этого Вы сможете "бросать" файлы данного типа на иконку Вашего application. 2) К сожалению дропнутые файлы в командой строке не придут - вместо этого задача получит kHighLevelEvent и Вам надо пробираться садами-огородами через AppleEvent. Вот ссылочка http://doc.trolltech.com/qq/qq12-mac-events.html
|
|
|
|
|