Ich habe ein Dialogfeld mit einer QScrollArea, um eine beliebige Anzahl von Checkboxen anzuzeigen. Wie kann ich die Breite des Dialogfelds anpassen, sodass die QScrollArea keine horizontale Bildlaufleiste hat (wenn der Inhalt nicht extrem breit ist).Wie kann ich die Fenstergröße eines QDialogs an seinen Inhalt anpassen?
std::vector<std::string> vec_strCheckboxLabel;
vec_strCheckboxLabel.push_back("Checkbox 1");
vec_strCheckboxLabel.push_back("Checkbox 2");
vec_strCheckboxLabel.push_back("Checkbox 3 is really long and causes a horizontal scroll bar to appear");
vec_strCheckboxLabel.push_back("Checkbox 4");
vec_strCheckboxLabel.push_back("Checkbox 5");
m_pWidget = new QDialog;
m_pWidget->setWindowTitle("My Dialog");
m_pWidget->setWindowModality(Qt::ApplicationModal);
m_pWidget->setMinimumWidth(400);
QVBoxLayout * pWidgetLayout = new QVBoxLayout(m_pWidget);
QLabel * pLabel = new QLabel("Hello");
pWidgetLayout->addWidget(pLabel);
QHBoxLayout * pTopButtonsLayout = new QHBoxLayout(m_pWidget);
pWidgetLayout->addLayout(pTopButtonsLayout);
QPushButton * pButton;
pButton = new QPushButton("Select all", m_pWidget);
connect(pButton, SIGNAL(clicked()), this, SLOT(slotSelectAll()));
pTopButtonsLayout->addWidget(pButton);
pButton = new QPushButton("Select none", m_pWidget);
connect(pButton, SIGNAL(clicked()), this, SLOT(slotSelectNone()));
pTopButtonsLayout->addWidget(pButton);
// the checkboxes in a scroll area
{
QFrame * pFrameCheckboxes = new QFrame(m_pWidget);
QVBoxLayout * pCheckboxesLayout = new QVBoxLayout(pFrameCheckboxes);
// this frame takes all available space in the QDialog
pFrameCheckboxes->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
for (unsigned int i = 0, iEnd = vec_strCheckboxLabel.size(); i != iEnd; ++i)
{
QCheckBox * poCheckBox = new QCheckBox(vec_strCheckboxLabel[i].c_str());
pCheckboxesLayout->addWidget(poCheckBox);
}
// put into scroll area
QScrollArea * pScrollAreaTheCheckboxes = new QScrollArea(m_pWidget);
pWidgetLayout->addWidget(pScrollAreaTheCheckboxes);
pScrollAreaTheCheckboxes->setWidget(pFrameCheckboxes);
}
Gute Antwort. Leider muss ich Qt 4.8 benutzen. Da es nur ein Dialog ist, muss ich die Breite nur einmal auf etwas sinnvolles einstellen, wenn es geöffnet wird. Gibt es eine Möglichkeit, den Bildlaufbereich direkt nach der benötigten Breite zu fragen? Vielleicht kann ich die Checkboxen nach ihrer Breite fragen und das Maximum nehmen? – Fabian
@Fabian Siehe meine Bearbeitung. –
Ich habe die Zeile zum obigen Beispiel unter 'pScrollAreaTheCheckboxes-> setWidget (pFrameCheckboxes);' hinzugefügt, aber es ändert nichts. Funktioniert es auf Ihrer Maschine? – Fabian