เปลี่ยนแท็บ QTabWidget & QScrollArea Qt

Aug 25 2020

ฉันกำลังพยายามสร้าง QScrollArea ใน QTabWidget

เวอร์ชัน:

  • จำนวน 5.15.0
  • ผู้สร้าง Qt 4.12.4
  • MSVC2019 64 บิต

ก่อนอื่นฉันได้สร้าง 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 ดังนี้:

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

ฉันไม่สามารถคลิกที่ปุ่มเดียวและฉันไม่สามารถเลื่อนได้ ... และถ้าฉันพยายามบังคับให้เลื่อนแบบนี้มันจะไม่เลื่อน

scrollArea->scroll(0, 50);

สิ่งสุดท้ายไม่มีการวนซ้ำที่ไม่มีที่สิ้นสุดหรือสิ่งที่ล็อคตายเพราะทุกสิ่งรอบ ๆ แท็บที่ถูกสาปนี้วิดเจ็ตและพื้นที่เลื่อนทำงานได้อย่างสมบูรณ์แบบ

ฉันไม่รู้ว่าทำไมวัตถุเหล่านี้ถึง "ไม่ตอบโจทย์" ถ้าสักวันมีการทดลองแบบนี้คุณช่วยฉันหน่อยได้ไหม

ขอบคุณล่วงหน้า.

คำตอบ

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