Стоит задача - нарисовать по вертикали много кнопок, как в вертикал лэйауте, но те кнопки, к-ые не влезают по высоте, должны вылезать за край виджета; скролл не нужен. Типа стека кнопок - при нажатии верхней она исчезает и кнопки подвигаются вверх на одну. Щаз реализовано через скролларею с лэйаутом, но тк кнопок архи много, все безбожно тормозит.
Хотелось бы отрисовать эти кнопки руками в пейнт эвенте. Но вот незадача - я не могу нарисовать 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();
}