Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kanbodows от Января 24, 2014, 12:20



Название: Не появляется скролл QScrollArea помогите срочно!
Отправлено: kanbodows от Января 24, 2014, 12:20
 
Я групп боксы по каждой категории блюд в layoutMain
и в каждом групп боксе на каждое соответствующие блюда по кнопке
Мне надо одинаковые по размеры групп боксы
при слишком большом количестве блюд появлялся скрол в групп боксе этой категории блюда
(надеюсь все понятно написано )))
Код:
QGridLayout *layoutMain = new QGridLayout(ui->scrollArea); // в нем будут создаваться QSrcrollArea
    if(query->isValid())// если есть записи
    {
        int butRow=0; // для расположения элементов в 2 колонки в основном скроле
        bool alter = true; // переменная чтобы знать что нужно переключиться на след строку в сроле

        int size = query->size();
        for (int row = 0; row < size; row++) // проход по всем записям
        {
            QString id_typeOfFood = query->value(0).toString(); // получаем айди категории
            QString typeOfFood = query->value(1).toString(); // получаем название категории
            QGroupBox *configGroup = new QGroupBox(this); // в Лайоте гроуп бокс
            connect(configGroup,SIGNAL(clicked()),SLOT(on_configGroup_clicked()));
            QGridLayout *gridLayoutUp = new QGridLayout(configGroup); // в груп боксе лайот в котором будут кнопки
            configGroup->setLayout(gridLayoutUp);
            configGroup->setTitle(typeOfFood);
            QScrollArea* scrollArea = new QScrollArea;
            QGridLayout *gridLayout = new QGridLayout(scrollArea);// а для этого сперва нужно создать Лайот
            scrollArea->setLayout(gridLayout);
            // получение блюд по категориям из склада по текущей точке
            salesModel = dal_sales->getFoodFromStock(id_typeOfFood);
            int count =  salesModel->rowCount();
            int butRowDown=0;
            bool alterDown = true;
            for (int var = 0; var < count; var++)
            {
                // создание экземпляра кнопки и назначение свойств
                cashButton *foodButton = new cashButton;//(scrollArea);
                // присваивание текста
                foodButton->setText(salesModel->record(var).field(2).value().toString() +" " +// имя блюда
                                    salesModel->record(var).field(3).value().toString()); // + порция
                foodButton->setObjectName("btn_" + salesModel->record(var).field(7).value().toString());
                foodButton->setDescription(salesModel->record(var).field(4).value().toString()+" сом Кол-во: " + QString::number(quantityStock.value(salesModel->record(var).field(7).value().toInt())));
                foodButton->food_id = salesModel->record(var).field(7).value().toInt();
                foodButton->food_name = salesModel->record(var).field(2).value().toInt();
                foodButton->typeofportion_id = salesModel->record(var).field(6).value().toInt();
                foodButton->typeofportion = salesModel->record(var).field(3).value().toString();
                foodButton->price = salesModel->record(var).field(4).value().toDouble();
                foodButton->value = salesModel->record(var).field(8).value().toDouble();
                foodButton->setMaximumHeight(60);
                foodButton->setMinimumHeight(0);
                foodButton->setStyleSheet(css->cashierBtnsStyle);
                connect(foodButton,SIGNAL(clicked()),SLOT(on_food_clicked()));    // привязка к слоту при нажатии на какое либо блюдо
                if(alterDown)  // вывод по колонкам
                    gridLayout->addWidget(foodButton,butRowDown,0);
                else
                {
                    gridLayout->addWidget(foodButton,butRowDown,1);
                    butRowDown++;
                }
                alterDown = !alterDown;
            }
            gridLayoutUp->addWidget(scrollArea);// грид с кнопками и скролом добавить
//            scrollArea->setWidgetResizable(true);
            scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
//            scrollArea->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
            scrollArea->setStyleSheet("background-color: rgb(200, 200, 200); border: none;");
            configGroup->setStyleSheet("background-color: rgb(200, 200, 200); border:2px dotted white; font-size:20px;color: green;font-style:bold; border-radius:15px;");
            QGraphicsDropShadowEffect * ef =  new QGraphicsDropShadowEffect;
            ef->setBlurRadius(20);
            configGroup->setGraphicsEffect(ef);
            if(alter)
                layoutMain->addWidget(configGroup, butRow,0);
            else
            {
                layoutMain->addWidget(configGroup, butRow,1);
                butRow++;
            }
            alter = !alter;
            scrollArea->setWidgetResizable(true);
            gridLayoutUp->setContentsMargins(5,20,5,5);// отступы
            gridLayout->setContentsMargins(2,3,2,2);
            query->next(); // переход к следующей записи
        }
    }

Помогите чем можете?


Название: Re: Не появляется скролл QScrollArea помогите срочно!
Отправлено: GreatSnake от Января 24, 2014, 12:23
(надеюсь все понятно написано )))
А ты сам попробуй внимательно прочитать что сам написал )))

Обычно показывают на картинке что получается не так и что в итоге хочется.