c++ - que - excel barra de desplazamiento
QScrollArea barra de desplazamiento faltante (1)
No desea configurar el diseño en el área de desplazamiento. La respuesta que citas proviene de entender mal esto.
Necesita tener un widget dentro de una scrollarea, y pasar ese widget al área usando
QScrollArea::setWidget
. Si todo lo que tiene dentro del área de desplazamiento es un widget sin elementos secundarios, entonces no necesita diseño adicional.No necesita realizar un seguimiento manual de los widgets que son propiedad de un diseño. Se eliminarán automáticamente una vez que se elimine el widget que tiene el diseño.
El widget
QScrollArea
no se presenta dentro de su widget adjunto.
A continuación se muestra un ejemplo práctico de cómo hacerlo:
// https://github.com/KubaO/stackoverflown/tree/master/questions/scroll-18703286
#include <QScrollArea>
#include <QVBoxLayout>
#include <QSpinBox>
#include <QApplication>
class Window : public QWidget
{
QVBoxLayout m_layout{this};
QScrollArea m_area;
QWidget m_contents;
QVBoxLayout m_contentsLayout{&m_contents};
QSpinBox m_spinBoxes[10];
public:
Window(QWidget *parent = {}) : QWidget(parent) {
m_layout.addWidget(&m_area);
m_area.setWidget(&m_contents);
for (auto & spinbox : m_spinBoxes)
m_contentsLayout.addWidget(&spinbox);
m_contentsLayout.setSizeConstraint(QLayout::SetMinimumSize);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window w;
w.show();
return app.exec();
}
Creo que es el mismo problema que: QScrollArea cambiar el tamaño de QWidget
pero no hay solución así que déjame exponer el problema.
- prueba 2 heredada de QWidget:
- compuesto :
- vector de QSpinBox
- QScrollArea
- QVBoxLayout
- test2 (QWidget) <- QScrollArea <- QVBoxLayout <- Spinbox
- compuesto :
- Problemas :
- No hay barra de desplazamiento
- [FIJO] El interior de la barra de desplazamiento se reduce para adaptarse a tan poco espacio que no se puede leer nada (la ventana puede redimensionarse durante la ejecución, lo que hará que el interior crezca y sea legible, sin embargo, no aparecerá ninguna barra de desplazamiento)
Creo que los problemas provienen de una sola fuente :: Sugerencias y diseños de tamaño ( http://qt-project.org/doc/qt-5.1/qtwidgets/qscrollarea.html#details )
El segundo problema (artilugio contraído) puede resolverse configurando "c-> setSizeConstraint (QLayout :: SetMinimumSize);"
Actualmente estoy buscando una solución para la barra de desplazamiento que falta
aquí hay un código que muestra mi problema:
<c++>
#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QSpinBox>
class test2 : public QWidget
{
Q_OBJECT
public:
test2(QWidget *parent = 0) :QWidget(parent)
{
b = new QScrollArea(this);
c = new QVBoxLayout;
for (int i = 0; i < 10; i++)
{
a.push_back(new QSpinBox());
c->addWidget(a[i]);
}
c->setSizeConstraint(QLayout::SetMinimumSize);
b->setLayout(c);
b->resize(200, 200);
}
~test2()
{
for (int i = 0; i < 10; i++)
delete a[i];
}
protected:
QVector<QSpinBox*> a;
QScrollArea* b;
QVBoxLayout* c;
};
int main(int argc, char *argv[])
{
///*
QApplication app(argc, argv);
test2 a;
a.show();
return app.exec();//*/
}
EDIT :: encontró una Solución aquí: http://qt-project.org/forums/viewthread/295
si no quieres leer una gran cantidad de código inútil aquí lo que ha hecho :: ha deformado el diseño dentro de un widget
Solución :: hereda el objeto de ScrollBar <- Widget <- Layout
en lugar de widget <- ScrollBar <- Layout
pero realmente no es una solución ... voy a probar el ejemplo que di.
funciona. Alguien tiene una solución mejor ??