Registerkarte "Problemänderung" QTabWidget & QScrollArea Qt

Aug 25 2020

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

RameshChoudhary Aug 26 2020 at 21:00

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()
{
}