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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 3 [4] 5 6 ... 69
46  Qt / Вопросы новичков / Re: Диалог на специальные строки в TableView : Сентябрь 05, 2018, 11:46
В чем проблема? Пишите свой собственный делегат и в нем все обрабатываете. В данном случае вам надо обработать события мыши. Возможно еще обработать событие смены состояния ячейки. Читайте делеагеты моделей в Qt.
Знаю, влом, зато как только освоите, почувствуете всю мощь Model-View
47  Qt / Вопросы новичков / Re: Можно ли обратиться к ресурсам из плагина (*.DLL)? : Сентябрь 05, 2018, 11:45
Да, но учтите, что так же будут необходимы драйверы файлов изображений рядом с экзешником в деплое.
48  Qt / Вопросы новичков / Re: Как отобразить процесс сохранения QPixmap изображения в файл? : Сентябрь 05, 2018, 11:43
QProgressDialog вам в помощь
49  Qt / Вопросы новичков / Re: Добавление в tableview выпадающего списка : Сентябрь 05, 2018, 11:40
Вы делегату модель назначили? Судя по всему нет
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, но надо сделать его только для чтения. галочка будет устанавливаться в рантайме через модель, юзер только должен быть информирован о том, что галочка есть или нет. Как это сделать?
54  Qt / Qt Quick / Re: Собственные qml контролы в ресурсах библиотеки dll : Май 18, 2016, 12:40
у меня ругается на него, пишет что используется другая библиотека Qt. Хотя по факту собрано было той же версией. почему то не хочет дебажный плагин подключать.
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 {
 ...
 }
}

Я уже третий день не могу решить эту проблему.
56  Qt / Qt Quick / Re: Установка одинакового значения для свойств всех элементов одного типа : Май 18, 2016, 11:54
Я решил это другим путём. Для названий ламп я набил статические строки, затем зарегистрировал свой image provider, который по названиям ламп выдает нужные картинки. так даже лучше
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();
}
60  Qt / Работа с сетью / Re: Биндинг сокетов на разные сетевые карты и LoopBack.. : Март 31, 2016, 12:05
Ещё вот словил глюк, что каналы, которые не подключены в текущий момент начинают жрать проц, в консоли пишется что попытка чтения в unconnected state.
Страниц: 1 2 3 [4] 5 6 ... 69

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