問題変更タブQTabWidget&QScrollArea Qt

Aug 25 2020

QTabWidgetでQScrollAreaを作成しようとしています。

バージョン:

  • Qt 5.15.0
  • Qtクリエーター4.12.4
  • MSVC201964ビット

まず、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");

追加できます

tabWidget->setEnable(true);

そして、すべてのタブについて、0 <= i <tabWidget.count

tabWidget->setTabEnabled(i, true);

クリックしてタブを変更しても機能しません: https://i.stack.imgur.com/8r1Jg.png

奇妙なことに:色は有効になっているように見えますが、タブを変更できるのは←→でしかありません。tabWidgetの外側にある他のものをクリックしてtabWidgetのフォーカスを失った場合、フォーカスを取り戻すことができません。

だから私はタブを変更するための一時的なボタンを作成し、そのようにtabWidgetにリンクしました:

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

それはうまくいきます。

したがって、私はQScrollAreaの作成を開始しました:最初に、それは機能しません、それで私はインターネット上でsthを見つけようとしました:QScrollAreaはQWidgetとQVBoxLayoutで期待通りに機能しません

私の結果: https://i.stack.imgur.com/jvVol.png

ボタンを1つクリックできず、スクロールできません...このように強制的にスクロールしようとすると、スクロールしません

scrollArea->scroll(0, 50);

最後に、この呪われたtabWidgetとスクロール領域の周りのすべてのものが完全に機能するため、無限ループやデッドロックはありません。

誰かがこの種の実験をしたのに、なぜこれらのオブジェクトが「答えない」のかわかりません。助けてくれませんか?

事前にどうもありがとうございました。

回答

RameshChoudhary Aug 26 2020 at 21:00

このコードを試してください

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