Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Авварон от Января 25, 2012, 10:45



Название: Отрисовать много цветных кнопок
Отправлено: Авварон от Января 25, 2012, 10:45
Стоит задача - нарисовать по вертикали много кнопок, как в вертикал лэйауте, но те кнопки, к-ые не влезают по высоте, должны вылезать за край виджета; скролл не нужен. Типа стека кнопок - при нажатии верхней она исчезает и кнопки подвигаются вверх на одну. Щаз реализовано через скролларею с лэйаутом, но тк кнопок архи много, все безбожно тормозит.

Хотелось бы отрисовать эти кнопки руками в пейнт эвенте. Но вот незадача - я не могу нарисовать Flat кнопку с бэкграунд цветом. Код рисования взят один в один из QPushButton. Если у давибатона установить флэт, то он рисует фон с ролью палитры Button. У меня же это не происходит. ЧЯДНТ?
Код:
#include <QWidget>
#include <QPaintEvent>
#include <QStylePainter>
#include <QStyleOptionButton>

class Widget : public QWidget
{
public:
    Widget(QWidget *parent = 0) : QWidget(parent) {}

    void paintEvent(QPaintEvent *e);
};

void Widget::paintEvent(QPaintEvent *e)
{
    QWidget::paintEvent(e);
    QStylePainter p(this);
    QStyleOptionButton *option = new QStyleOptionButton;
    option->initFrom(this);
    option->features = QStyleOptionButton::None;
//    if (d->flat)
        option->features |= QStyleOptionButton::Flat;
    option->text = "d->text";
    p.drawControl(QStyle::CE_PushButton, *option);
    delete option;
}

// установка палитры:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
   
    Widget *widget = new Widget;
    QPalette pal = widget->palette();
    pal.setColor(QPalette::Button, Qt::red);
    widget->setPalette(pal);
    widget->setAutoFillBackground(true);
    widget->show();

    return a.exec();
}


Название: Re: Отрисовать много цветных кнопок
Отправлено: Пантер от Января 25, 2012, 10:50
А если хайдить ненужные?


Название: Re: Отрисовать много цветных кнопок
Отправлено: Авварон от Января 25, 2012, 10:57
Там релайаут тормозит, не поможет.


Название: Re: Отрисовать много цветных кнопок
Отправлено: Пантер от Января 25, 2012, 11:00
А если без лайотов? Делаешь виджет, который и размещает в себе кнопки, хайдя ненужные.


Название: Re: Отрисовать много цветных кнопок
Отправлено: Авварон от Января 25, 2012, 11:20
Это поможет, но все равно туева хуча лишних объектов получается.


Название: Re: Отрисовать много цветных кнопок
Отправлено: Bepec от Января 26, 2012, 06:59
А не проще тебе тогда сделать Model-View с кнопачобуками? Сразу куча вопросов отпадет.


Название: Re: Отрисовать много цветных кнопок
Отправлено: Akon от Января 26, 2012, 09:47
Навскидку, м.б.
pal.setColor(QPalette::Background, Qt::red);  // вместо pal.setColor(QPalette::Button, Qt::red);

Цитировать
тк кнопок архи много, все безбожно тормозит
Возможно, имеет смысл следующее: иметь архи большой список команд и только несколько фиксированных (видимых) кнопок. При продвижении команд просто менять свойства кнопок. Т.е. имеем как бы вьюпорт в списке команд.