Друзья, выручайте!
Проект нужен "ещё вчера", но никак не клеится
Активно и продуктивно помогшим
кину денежек на телефон..
В общем есть структура виджетов:
1) Основное окно создаваемого виджета (фиксированный размер, VLayuot)
а) В нём хидер с картинкой,
б) Окно содержимого (виджет)
в) Футер (панель инструментов)
2) В окне содержимого:
Слева должно быть окно фиксированного размера (содержимое по центру) с двумя кнопками прокрутки вверх и вниз, между ними ScrollArea с виджетами из нескольких виджетов с картинками и текстом в различных местах виджета (менеджеры компоновки не катят - там сложно всё :-/ ). Виджеты в ScroolArea тоже должны быть фиксированного размера Вывод их у меня делается в QVBoxLayout.
Справа от этого виджета с кнопками и прокруткой д.б. виджет с текстом на оставшийся размер внутренней части, часть которого меняется в процессе работы с этим всем окном и располагается в указанном месте этого окна.
CartForm::CartForm(QDesktopWidget* pwgt /*= 0*/): QWidget(pwgt)
{
//Base visual elements
setObjectName("CartForm");
QRect desktopRect = pwgt->screenGeometry();
QSize size = desktopRect.size(); //* qreal(0.99)
move(0,0);
resize(size.width(),size.height());
vLayout = new QVBoxLayout (this);
this->setLayout(vLayout);
QLabel *banner= new QLabel(this);
vLayout->setContentsMargins(0, 0, 0, 0);
banner->setContentsMargins(0,0,0,0);
vLayout->setAlignment(Qt::AlignTop);
QImage image(":/images/logo_small_cat.jpg");
... /*Баннер поскипан, он выводится нормально*/
vLayout->addWidget(banner);
order_text = new QLabel(this);
..
order_text->setText(QString::fromUtf8("ЗАКАЗАТЬ"));
vLayout->setAlignment(Qt::AlignHCenter);
vLayout->addWidget(order_text);
/*Содержимое*/
body = new QWidget(this);
body->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
/*Компоновка для виджета скроллинга и текстовой области*/
bodyLayout = new QHBoxLayout();
//bodyLayout->setAlignment()
body->setLayout(bodyLayout);
vLayout->addWidget(body);
/*Футер*/
tbform *toolbar = new tbform(this);
toolbar->setFixedSize(this->width(),90);
vLayout->addWidget(toolbar);
int allHeight = 0;
int h1 = vLayout->totalSizeHint().height();
allHeight += h1;
row_count = (int)((size.height() - allHeight - 80) / 113);
int col_count = 0;
/*Меняем размер виджета для содержимого с учётом оставшейся высоты*/
body->resize(size.width(),size.height()-allHeight);
body->setFixedSize(size.width(),size.height()-allHeight);
/*Добавляем виджет области скроллинга с кнопками*/
scrollWidget = new QWidget(this);
bodyLayout->addWidget(scrollWidget);
/*Задаём ему фиксированную ширину*/
scrollWidget->setFixedSize(340,size.height() - allHeight);
scrollWidget->resize(340,size.height() - allHeight);
/*Компоновка в нём по вертикали*/
scrollLayout = new QVBoxLayout();
/*Нужно, чтобы кнопки и скроллареа располагались по его центру
^
-------
| |
| |
-------
`' (кнопка прокрутки вниз)
Сейчас эта байда прижимается к левому краю, а сам виджет отстоит от левого края точек на 200-300, хотя у следующего виджета за ним тоже задана ширина :(
*/
scrollLayout->setAlignment(Qt::AlignHCenter);
scrollWidget->setLayout(scrollLayout);
/*Добавил верхнюю кнопку прокрутки*/
upScroll = new QPushButton(this); //this);
upScroll->setFixedSize(73,37);
upScroll->setIcon(QIcon(":/images/arrowUp.png"));
upScroll->setIconSize(QSize(73,37));
upScroll->setFlat(true);
scrollLayout->addWidget(upScroll);
/*Добавил скролларию*/
sa = new QScrollArea(this);
scrollAreaLayout = new QVBoxLayout(this);
sa->setLayout(scrollAreaLayout);
scrollLayout->addWidget(sa);
sa->setFrameStyle(QFrame::NoFrame);
sa->setFixedSize(340,body->height()-74);
/*Выполнение запроса*/
while (order_query.next())
{
QString prod_id = order_query.value(0).toString();
QString prod_name = order_query.value(2).toString();
QString quantity = order_query.value(1).toString();
order_products.append(new order_product(0,prod_id,prod_name,quantity));
/*Это виджет, описанный ниже*/
scrollAreaLayout->addWidget(order_products.last());
}
/*Добавляем нижнюю кнопку*/
downScroll = new QPushButton(this);
downScroll->setFixedSize(73,37);
downScroll->setIcon(QIcon(":/images/arrowDown.png"));
downScroll->setIconSize(QSize(73,37));
downScroll->setFlat(true);
scrollLayout->addWidget(downScroll);
order_info_body = new QWidget(this);
order_info_body->setObjectName("order_info_body");
/*Размер области для текста*/
order_info_body->resize(body->width()-340,size.height() - allHeight);
/*Добавление виджета в горизонтальную компоновку*/
bodyLayout->addWidget(order_info_body);
QLabel *lbl1 = new QLabel(order_info_body);
lbl1->setStyleSheet("font-size: 27px; color: #000;");
lbl1->move(120,50);
lbl1->setText(QString::fromUtf8("На сумму: "));
QLabel *lbl2 = new QLabel(order_info_body);
lbl2->setStyleSheet("font-size: 27px; color: #f00; font-weight: bold;");
lbl2->move(200,50);
lbl2->setText(QString::fromUtf8("1250 р"));
/*Эти метки не выводились :( */
-------------------------------------------------------------------------------------------
Код виджета с картинками и текстом (который должен выводится в ScrollArea) - у него не выводится фон :-/ Фон выводится только на метки внутри него :-/
order_product::order_product(QWidget *parent, QString product_id, QString product_name, QString quantity_str) :
QWidget(parent)
{
QLabel *img_label;
QImage img;
QImage img2;
QLabel *prod_name;
QLabel *quantity_label;
QLabel *price_label;
this->adjustSize();
this->resize(331,113);
this->setFixedSize(331,113);
this->setMinimumSize(331,113);
img.load("./images/noimage.png","PNG");
img2 = img.scaledToWidth(75,Qt::SmoothTransformation);
img_label = new QLabel(this);
img_label->setPixmap(QPixmap::fromImage(img2));
img_label->move(9,6);
quantity = quantity_str;
quantity_label = new QLabel(this);
quantity_label->setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.508, y1:0, x2:0.503, y2:1, stop:0 rgba(231, 231, 231, 255), stop:1 rgba(226, 226, 226, 255));");
quantity_label->setText(quantity_str);
quantity_label->move(254,0);
prod_name = new QLabel(this);
prod_name->setText(product_name);
prod_name->setFont(QFont ("Arial", 13, QFont::Normal));
prod_name->move(103,38);
price_label = new QLabel(this);
price_label->setText("1250.70");
price_label->setFont(QFont ("Arial", 13, QFont::Bold,true));
price_label->setStyleSheet("color: #bd1f33; font-size: 13px; font-style: italic; font-weight: bold;");
price_label->move(103,73);
/*Этот фон не выводится для всего виджета:*/
this->setStyleSheet(QString::fromUtf8("background-color: qlineargradient(spread:pad, x1:0.508, y1:0, x2:0.503, y2:1, stop:0 rgba(0, 0, 0, 255), stop:0.0108108 rgba(119, 119, 119, 255), stop:1 rgba(255, 255, 255, 255)); border-radius: 7px;"));
this->setEnabled(true);
this->setVisible(true);
}
У меня Qt 4.7.0 Заранее очень благодарен за помощь!