Просмотр сообщений
|
Страниц: 1 2 3 [4] 5 6 ... 69
|
46
|
Qt / Вопросы новичков / Re: Диалог на специальные строки в TableView
|
: Сентябрь 05, 2018, 11:46
|
В чем проблема? Пишите свой собственный делегат и в нем все обрабатываете. В данном случае вам надо обработать события мыши. Возможно еще обработать событие смены состояния ячейки. Читайте делеагеты моделей в Qt. Знаю, влом, зато как только освоите, почувствуете всю мощь Model-View
|
|
|
50
|
Qt / Qt Script, QtWebKit / Сложные скрипты, с чего начать?
|
: Сентябрь 27, 2017, 11:56
|
Привет. Возникла необходимость расширить свое приложение за счёт пользовательских скриптов. Приложение использует шаблон MVC, в котором модель - это некоторые логические объекты, view - это графические элементы на QGraphicsScene, а контроллеры соответственно - логика. Так вот, сейчас все пишется на с++, но возникают ситуации что конечным заказчикам нужно поставлять логику похожую, но в некоторых деталях отличающуюся. Логика контроллера по сути состоит в том, чтобы по некоторым событиям смотреть на состояние объекта и задавать цвета/текст у графических элементов. Так вот я созрел на то, что бы логику контроллеров вынести в скрипты, и конечным заказчикам поставлять те скрипты, функционал которых подходит, без перекомпиляции всего проекта (довольно большой). Смотрел в сторону питона, но собрать пока не удалось. Функционала JavaScript пока думаю хватит, хотя ООП в питоне более заманчиво. Собственно такой вопрос, как запустить скрипт так, что бы он висел в памяти, и его функции вызывались по определенным событиям?
|
|
|
51
|
Программирование / Python / PythonQt3.2 + MinGW5.3 + Qt5.9.1 Как собрать?
|
: Сентябрь 27, 2017, 10:54
|
Привет. Решил тоже добавить поддержку Python в мое Qt приложение. К сожалению на сайте pythonqt.sourceforge.net нет ни одной инструкции по сборке. В частности Qt 5.9.1, Windows 10 x64, MinGW5.3.0. На форуме нашёл пару тем, но они уже устаревшие, для старых версий ПО. В питоне ноль, но есть желание его интегрировать и писать скрипты логики, дабы не пересобирать свое ПО каждый раз. Может есть где то более подробные статьи или уже собранные пакеты? Заранее спасибо.
|
|
|
52
|
Программирование / Общий / Консольная программа захвата видео рабочего стола под Windows
|
: Октябрь 31, 2016, 17:20
|
Привет. Надеюсь я выбрал правильный раздел. Вопрос: нужно при запуске Qt приложения записывать видео рабочего стола (вместе с запущенным приложением) в файл (формат в принципе не важен, лишь бы читался стандартными плеерами). В качестве параметра командной строки - название файла (я думаю скорее всего будет дата_время.расшиение). Пока в интернете предлагают только GUI приложения. Желательно что бы portable и freeware, что бы уместить в установочный пакет вместе в Qt приложением. Опыта с записью видео нет, может кто то сталкивался с подобной задачей. Приложение для записи не обязательно должно быть Qt, главное что бы оно было консольным, висело в фоне, и закрывалось при закрытии Qt-приложения (ну это уже моя задача, наверное через QProcess). Компонентов и библиотек для Qt которые бы реализовали подобный функционал пока не нашёл.
|
|
|
53
|
Qt / Qt Quick / Как сделать CheckBox только для чтения?
|
: Май 19, 2016, 17:37
|
Мне в модели нужно вывести рядом с названием объекта CheckBox, но надо сделать его только для чтения. галочка будет устанавливаться в рантайме через модель, юзер только должен быть информирован о том, что галочка есть или нет. Как это сделать?
|
|
|
55
|
Qt / Qt Quick / Собственные qml контролы в ресурсах библиотеки dll
|
: Май 18, 2016, 12:12
|
Привет. Мне нужно зашить свои контролы и главную сцену qml в ресурсы библиотеки. Проблема в том, что сцена не находит контролы. Заню, тема уже заезженная до дыр, но ничего не помогает. Да, библиотека не QtPlugin, а обычная. Например, есть контрол MyControl, который расположен в source/qml/controls/MyControl.qml. Есть сцена которая использует этот контрол в делегате, расположена source/qml/main.qml. Файл ресурсов выглядит так <RCC> <qresource prefix="/"> <file alias="SwitchScene">qml/main.qml</file> <file alias="Switcher">qml/controls/MyControl.qml</file> </qresource> </RCC>
нижепреведенный код не работает (который нашёл на других форумах) (main.qml) import QtQuick 2.0 import "qrc:/controls/MyControl" { ... MyControl { ... } }
Я уже третий день не могу решить эту проблему.
|
|
|
57
|
Qt / Qt Quick / Установка одинакового значения для свойств всех элементов одного типа
|
: Май 17, 2016, 12:21
|
Привет. Вопрос такой, можно ли как то задать одно значение для определенного свойства всех элементов одного типа? Что то типа статического свойства, т.е. MyElementType.someProperty = value , а ге указывать их в цикле для каждого? В частности у меня рисуются переключатели, на которых есть рукоятка и три лампочки. Так вот на разных сценах у этих переключателей должны быть разного цвета лампы, а плодить несколько переключателей, которые по сути делают одно и тоже я не вижу смысла.
|
|
|
58
|
Qt / Установка, сборка, отладка, тестирование / Создание и упаковка в инсталлятор собственного QML plugin
|
: Май 10, 2016, 18:29
|
Привет. Решил добавить QML в свое Widget приложение. Версия Qt 5.6. Все хорошо, плагин собирается, но вот куда его копировать? Я использую InnoSetup для сборки инсталлятора. Структура моего приложения выглядит следующим образом D:\packages\soft\start.exe //главный экзешник D:\packages\soft\corelib.dll //библиотека D:\packages\soft\somelib1.dll //библиотека D:\packages\soft\somelibN.dll //библиотека D:\packages\soft\extensions\plugin1.dll // плагины D:\packages\soft\extensions\pluginM.dll // D:\QtLibs //тут все dll которые необходимы для standalone D:\QtLibs\QtCore5.dll,QtNetwork5.dll,QtWidget5.dll,QtGui5.dll,QtDeclarative5.dll ... D:\QtLibs\platforms\*.dll D:\QtLibs\mediaservice\*.dll
Все это пакуется моим скриптом инсталлятора и все отлично устанавливается. Но вот мой плагин QML не находится, ругается в консоли qrc:/scene.qml:2:1: module "ua.mywork.switcher" is not installedПрочитал много форумов, но так толком и не понял куда ложить dll с плагином? Актуально как для винды так и для линукса.
|
|
|
59
|
Qt / Установка, сборка, отладка, тестирование / Re: Разное поведение программы при отладке и запуске в обычном режиме
|
: Март 31, 2016, 12:49
|
Выяснил проблему, но не знаю пока как решить. Привожу код файла main.cpp. Есть глобальный синглтон, доступный с любой точки программы. Проблема в том, что при отладке все успевает освободиться до завершения работы программы. Если запустить без отладки, то ресурсы не успевают освободиться и программа закрывается. Если поставить паузу в пару секунд, то тогда сообщения на консоль доходят. QApplication a(argc, argv);
CGlobalObjectPool::instance(); //инициализация синглтона
MainWindow w; w.startWork(); w.show(); int result = a.exec();
CGlobalObjectPool::release(); //освобождение синглтона и его ресурсов
QThread::sleep(2); //без этого не успевает вывестись в консоль сообщения об успешном освобождении ресурсов
return result;
Самое интрересное, что синглтон живет в основном потоке, и по идее он должен блокировать закрытие программы пока не завершит свою работу в соответствующе функции release. Вот код синглтона class CGlobalObject; class CGlobalObjectFactory;
class RAILCORESHARED_EXPORT CGlobalObjectPool : public QObject { Q_OBJECT
QMap<CInterfaceTag,CGlobalObjectFactory*> p_factoryMap; QMap<CGlobalObjectFactory*,CGlobalObject*> p_objectMap;
explicit CGlobalObjectPool(QObject *parent = 0);
void finalize(); void deleteGlobalObjects();
static QPointer<CGlobalObjectPool> p_instance;
public:
~CGlobalObjectPool();
static CGlobalObjectPool * instance();
void registerGlobalObjectFactory(CGlobalObjectFactory * factory); void unregisterGlobalObjectFactory(CGlobalObjectFactory * factory); QList<CGlobalObjectFactory*> registeredFactories(); QList<CGlobalObject*> globalObjects();
void createGlobalObjects(); void intializeGlobalObjects(); static void release();
public slots:
void cleanup(); };
#include "cglobalobjectfactory.h" #include "cglobalobject.h" #include "cglobalobjectpool.h"
QPointer<CGlobalObjectPool> CGlobalObjectPool::p_instance;
CGlobalObjectPool::CGlobalObjectPool(QObject *parent) : QObject(parent) { qDebug("create CGlobalObjectPool"); }
CGlobalObjectPool *CGlobalObjectPool::instance() { return p_instance.isNull()?p_instance = new CGlobalObjectPool():p_instance; }
CGlobalObjectPool::~CGlobalObjectPool() { qDebug("destroy CGlobalObjectPool"); }
void CGlobalObjectPool::registerGlobalObjectFactory(CGlobalObjectFactory * factory) { if(factory) { CInterfaceTag t(factory->tag()); CGlobalObjectFactory * prevObject = instance()->p_factoryMap.value(t); if(prevObject) { qWarning("Global object with tag '%s' already registered in GO pool, ignoring",qPrintable(t.toString())); return; } //qDebug("Registering global object %s",qPrintable(factory->tag().toString())); p_factoryMap[t] = factory; p_objectMap[factory] = nullptr; } }
void CGlobalObjectPool::unregisterGlobalObjectFactory(CGlobalObjectFactory * factory) { if(factory) { p_factoryMap.remove(factory->tag()); p_objectMap.remove(factory); } }
QList<CGlobalObjectFactory *> CGlobalObjectPool::registeredFactories() { return instance()->p_factoryMap.values(); }
QList<CGlobalObject *> CGlobalObjectPool::globalObjects() { return p_objectMap.values(); }
void CGlobalObjectPool::createGlobalObjects() { for(QMap<CGlobalObjectFactory*,CGlobalObject*>::iterator it=p_objectMap.begin();it!=p_objectMap.end();it++) { if(!it.value()) { qDebug("create global object for %s",qPrintable(it.key()->tag().toString())); it.key()->createGlobalObject(); it.value() = it.key()->globalObject(); //qDebug("ok"); } } }
void CGlobalObjectPool::intializeGlobalObjects() { for(QMap<CGlobalObjectFactory*,CGlobalObject*>::iterator it=p_objectMap.begin();it!=p_objectMap.end();it++) { if(it.value()) { it.value()->commitInitialization(); } } }
void CGlobalObjectPool::finalize() { qDebug("finalizing %d global objects ...", p_objectMap.size());
QMapIterator<CGlobalObjectFactory*,CGlobalObject*> mapIt(p_objectMap); while(mapIt.hasNext()) { mapIt.next();
qDebug("try to finalize %s",qPrintable(mapIt.key()->tag().toString())); if(mapIt.value()) { qDebug("finalize global object for %s",qPrintable(mapIt.key()->tag().toString())); //mapIt.value()->finalize(); qDebug("ok"); } else { qDebug("global object is NULL!!"); } }
qDebug("finalizing done ..."); }
void CGlobalObjectPool::deleteGlobalObjects() { qDebug("destroying ..."); for(QMap<CGlobalObjectFactory*,CGlobalObject*>::iterator it=p_objectMap.begin();it!=p_objectMap.end();it++) { if(it.value()) { qDebug("destroy global object for %s",qPrintable(it.key()->tag().toString())); it.key()->destroyGlobalObject(); it.value() = nullptr; qDebug("ok"); } } qDebug("destroy done ..."); }
void CGlobalObjectPool::release() { if(!p_instance.isNull()) { p_instance->finalize(); p_instance->deleteGlobalObjects(); qDebug("release done"); delete p_instance.data(); } }
void CGlobalObjectPool::cleanup() { release(); }
|
|
|
|
|