#c #qt
#c #qt
Вопрос:
Я пытался решить эту проблему в течение нескольких дней, но я не добился никакого прогресса, я думаю, что я что-то упускаю, пожалуйста, помогите мне ее решить.
В mainwindow я создал область прокрутки и придал ей вертикальное расположение. Я создал класс Qt Designer (myform.h, myform.cpp и myform.ui) и разместите несколько кнопок вертикальное расположение.
Это «myform.ui»: http://oi59.tinypic.com/23sch2r.jpg
Я хочу, чтобы область прокрутки в mainwindow содержала «myform.ui», а элементы в «myform.ui» не изменялись бы, но вместо этого в области прокрутки появлялись полосы прокрутки.
Мой mainwindow.cpp является
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myform.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyForm* myform = new MyForm(this);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(myform);
ui->scrollArea->setWidgetResizable(false);
ui->scrollArea->setLayout(layout);
}
MainWindow::~MainWindow()
{
delete ui;
}
Проблема в том, что полосы прокрутки не отображаются, а размеры элементов изменяются при изменении размера окна.
Изображение: http://oi62.tinypic.com/w83xvp.jpg
Это всего лишь минимальный пример, иллюстрирующий проблему, с которой я столкнулся.
Ответ №1:
Согласно документации для QScrollArea, похоже, вам нужно установить фоновый виджет в область прокрутки. Этот код взят непосредственно из документации QScrollArea
виджета:
QLabel *imageLabel = new QLabel;
QImage image("happyguy.png");
imageLabel->setPixmap(QPixmap::fromImage(image));
scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
Создается метка изображения. В него загружается растровое изображение. Затем виджет области прокрутки определяется setWidget()
командой.
В вашем коде я думаю, что ui->scrollArea->setLayout(layout);
должно быть
ui->scrollArea->setWidget(layout);
вместо этого.
Примечание: я не тестировал этот код, но думаю, что он решит вашу проблему.