• [Qt] Смена языка интерфейса "на лету" и QComboBox?

    @danilevskiy
    C++/Qt Developer
    1) Если не хотите очищать весь список, подключите модель и используйте ее возможности
    2) Используйте QComboBox::activated(int index) - возникает когда пользователь выбирает элемент
    Ответ написан
    Комментировать
  • Как в Qt сделать QPushButton кастомной формы?

    @danilevskiy
    C++/Qt Developer
    Есть пара вариантов, но все зависит от задачи.
    1) Использовать готовые изображения для каждого состояния и описать в стилях. Например,
    /*----------------------------------------------------------*/
    QPushButton#buttonMoveUp{
    background-image: url(:/style/images/upfocusnormal.png);
    background-position: center;
    border: none;
    width: 30px;
    height: 30px;
    }
    
    QPushButton#buttonMoveUp::hover {
    background-image:url(:/style/images/upfocuspressed.png);
    }
    
    QPushButton#buttonMoveUp::pressed {
    background-image:url(:/style/images/upfocuspressed.png);
    }
    
    QPushButton#buttonMoveUp::!enabled {
    background-image:url(:/style/images/upnormal.png);
    }
    
    /*----------------------------------------------------------*/


    2) Либо переопределять paintEvent и самому рисовать все что угодно. Состояние кнопки можно получить через QStyleOptionButton.
    //---------------------------------------------------------------
    void Button::paintEvent( QPaintEvent *ev )
    {
    
        QPainter painter(this);
    
        QStyleOptionButton option;
        initStyleOption(&option);
    .....
    }


    //---------------------------------------------------------------
    const QString Button::getIconSource( QStyleOption& option ) const
    {
        //draw icon
        QString iconSource = getIconNormal();
    
        //hover
        if( option.state & QStyle::State_MouseOver)
        {
            iconSource = getIconHover();
        }
    
        //pressed
        if( option.state & QStyle::State_Sunken )
        {
            iconSource = getIconPressed();
        }
    
        //checked
        if( option.state & QStyle::State_On )
        {
            iconSource = getIconChecked();
        }
    
        //disabled
        if( !(option.state & QStyle::State_Enabled) )
        {
            if( !getIconDisabled().isEmpty() )
            {
                iconSource = getIconDisabled();
            }
        }
    
        return iconSource;
    }


    Вот ссылка на кастомную кнопку: https://yadi.sk/d/fWC_VeDyeMu4o
    Ответ написан
    Комментировать
  • Как избавиться от мерцания при анимации в Qt?

    @danilevskiy
    C++/Qt Developer
    Делайте двойную буферизацию. Ваш виджет будет каждый раз перерисовываться при перемещении. Можете это проверить: добавьте вызов функции qDebug()<<__FUNCTION__ в onPaint и посмотрите в отладчик.
    www.informit.com/articles/article.aspx?p=1405227&s...
    Ответ написан
    Комментировать
  • Qt не видит сигнал, как исправить?

    @danilevskiy
    C++/Qt Developer
    Вместо:
    QObject::connect(UIManager::GetInstance()->GetProjectTree(),
                         SIGNAL(ProjectTree::AddedSolutionByUser(QString&)),
                         SolutionManager::GetInstance(),
                         SLOT(SolutionManager::AddNewSolutionByUser(QString&)));


    Напишите:
    <QObject::connect(UIManager::GetInstance()->GetProjectTree(),
                         SIGNAL(AddedSolutionByUser(QString&)),
                         SolutionManager::GetInstance(),
                         SLOT(AddNewSolutionByUser(QString&)));
    Ответ написан
    1 комментарий