Registerkarte "Problemänderung" QTabWidget & QScrollArea Qt
Ich versuche, eine QScrollArea in einem QTabWidget zu erstellen.
Versionen:
- Qt 5.15.0
- Qt-Ersteller 4.12.4
- MSVC2019 64 Bit
Zunächst habe ich das QTabWidget erstellt:
tabWidget = new QTabWidget(this);
tabWidget->setGeometry(10, 15, 1200, 665);
tabWidget->setStyleSheet("font-size : 15px");
tab1Content = new QWidget(tabWidget); tabWidget->addTab(tab1Content, "tab1");
tab2Content = new QWidget(tabWidget); tabWidget->addTab(tab2Content, "tab2");
tab3Content = new QWidget(tabWidget); tabWidget->addTab(tab3Content, "tab3");
tab4Content = new QWidget(tabWidget); tabWidget->addTab(tab4Content, "tab4");
ich kann hinzufügen
tabWidget->setEnable(true);
Und für alle Registerkarten 0 <= i <tabWidget.count
tabWidget->setTabEnabled(i, true);
Klicken, um die Registerkarte zu ändern, funktioniert nicht: https://i.stack.imgur.com/8r1Jg.png
Seltsame Sache: Farbe sieht wie aktiviert aus, aber ich kann Tabs nur mit ← → ändern. Wenn ich den Fokus von tabWidget verloren habe, indem ich auf eine andere Sache außerhalb von tabWidget geklickt habe, kann ich den Fokus nicht wiedererlangen.
Also habe ich eine temporäre Schaltfläche zum Ändern von Registerkarten erstellt und wie folgt mit tabWidget verknüpft:
connect(changeTab, &QPushButton::clicked, [&]() {onChangeTab();});
void MainWindow::onChangeTab() {
tabWidget->setCurrentIndex(tabWidget->currentIndex() >= tabWidget->count() - 1 ? 0 : tabWidget->currentIndex() + 1);
}
Es funktioniert gut.
Daher habe ich begonnen, QScrollArea zu erstellen: Erstens funktioniert es nicht, also habe ich versucht, etw im Internet zu finden: QScrollArea funktioniert nicht wie erwartet mit QWidget und QVBoxLayout
Mein Ergebnis: https://i.stack.imgur.com/jvVol.png
Ich kann nicht auf eine einzelne Schaltfläche klicken und nicht scrollen ... Und wenn ich versuche, das Scrollen so zu erzwingen, wird nicht gescrollt
scrollArea->scroll(0, 50);
Als letztes gibt es keine Endlosschleifen- oder Deadlock-Dinge, da alle Dinge um diesen verfluchten TabWidget- und Scroll-Bereich perfekt funktionieren.
Ich weiß nicht, warum diese Objekte "nicht antworten", wenn jemand diese Art von Experiment hätte, könnten Sie mir bitte helfen?
Vielen Dank im Voraus.
Antworten
Versuchen Sie diesen Code
#include "widget.h"
#include<QTabWidget>
#include<QLabel>
#include<QVBoxLayout>
#include<QScrollArea>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QTabWidget *tabWidget = new QTabWidget(this);
tabWidget->setGeometry(10, 15, 1200, 665);
tabWidget->setStyleSheet("font-size : 15px");
QWidget * tab1Content = new QWidget;
//preparing tab1content ( e.g.)
QVBoxLayout * verticalLayout = new QVBoxLayout;
// adding items to vertical layout
for(int i=0;i<100;i++)
verticalLayout->addWidget(new QLabel(QString::number(i)));
// set this vertical layout inside tab1content
tab1Content->setLayout(verticalLayout);
// create new scroll area ...
QScrollArea * scroll = new QScrollArea;
// ... and add tab1content in scroll area
scroll->setWidget(tab1Content);
// and finally add scroll area inside tabwidget
tabWidget->addTab(scroll,"tab1");
QWidget * tab2Content = new QWidget; tabWidget->addTab(tab2Content, "tab2");
QWidget * tab3Content = new QWidget; tabWidget->addTab(tab3Content, "tab3");
QWidget * tab4Content = new QWidget; tabWidget->addTab(tab4Content, "tab4");
}
Widget::~Widget()
{
}