Modifica scheda problema QTabWidget e QScrollArea Qt

Aug 25 2020

Sto cercando di creare un QScrollArea in un QTabWidget.

Versioni :

  • Qt 5.15.0
  • Creatore Qt 4.12.4
  • MSVC2019 64 bit

Prima di tutto, ho creato il QTabWidget :

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");

posso aggiungere

tabWidget->setEnable(true);

E per tutte le schede, 0 <= i < tabWidget.count

tabWidget->setTabEnabled(i, true);

Fare clic per cambiare scheda non funziona:https://i.stack.imgur.com/8r1Jg.png

Cosa strana: il colore sembra abilitato ma posso cambiare scheda solo con ← → e quando ho perso il focus del tabWidget facendo clic su un'altra cosa al di fuori del tabWidget, non riesco a riguadagnare il focus.

Quindi ho creato un pulsante temporaneo per cambiare scheda e collegato a tabWidget in questo modo:

connect(changeTab, &QPushButton::clicked, [&]() {onChangeTab();});
void MainWindow::onChangeTab() {
    tabWidget->setCurrentIndex(tabWidget->currentIndex() >= tabWidget->count() - 1 ? 0 : tabWidget->currentIndex() + 1);
}

Funziona bene.

Quindi, ho iniziato a creare QScrollArea: in primo luogo, non funziona, quindi ho provato a trovare sth su Internet: QScrollArea non funziona come previsto con QWidget e QVBoxLayout

Il mio risultato:https://i.stack.imgur.com/jvVol.png

Non riesco a fare clic su un singolo pulsante e non riesco a scorrere ... E se provo a forzare lo scorrimento in questo modo, non scorre

scrollArea->scroll(0, 50);

Ultima cosa, non ci sono loop infiniti o dead lock perché tutte le cose intorno a questa scheda maledetta Widget e Area di scorrimento funzionano perfettamente.

Non so perché questi oggetti "non rispondono" se qualcuno ha fatto questo tipo di esperimento potresti aiutarmi per favore?

Grazie mille in anticipo.

Risposte

RameshChoudhary Aug 26 2020 at 21:00

prova questo codice

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