Tab thay đổi vấn đề QTabWidget & QScrollArea Qt

Aug 25 2020

Tôi đang cố tạo QScrollArea trong QTabWidget.

Các phiên bản:

  • Qt 5,15,0
  • Người tạo Qt 4.12.4
  • MSVC2019 64 bit

Trước hết, tôi đã tạo 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");

tôi có thể thêm

tabWidget->setEnable(true);

Và đối với tất cả các tab, 0 <= i <tabWidget.count

tabWidget->setTabEnabled(i, true);

Tab nhấp để thay đổi không hoạt động: https://i.stack.imgur.com/8r1Jg.png

Điều kỳ lạ: màu sắc trông giống như được bật nhưng tôi chỉ có thể thay đổi các tab bằng ← → và khi tôi bị mất tiêu điểm tabWidget bằng cách nhấp vào một thứ khác bên ngoài tabWidget, tôi không thể lấy lại tiêu điểm.

Vì vậy, tôi đã tạo nút tạm thời để thay đổi các tab và liên kết với tabWidget như vậy:

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

Nó hoạt động tốt.

Vì vậy, tôi đã bắt đầu tạo QScrollArea: Đầu tiên, nó không hoạt động, vì vậy tôi đã cố gắng tìm thấy sth trên internet: QScrollArea không hoạt động như mong đợi với QWidget và QVBoxLayout

Kết quả của tôi: https://i.stack.imgur.com/jvVol.png

Tôi không thể nhấp vào một nút duy nhất và tôi không thể cuộn ... Và nếu tôi cố gắng buộc cuộn như thế này, nó sẽ không cuộn

scrollArea->scroll(0, 50);

Điều cuối cùng, không có vòng lặp vô hạn hoặc những thứ khóa chết vì tất cả những thứ xung quanh tab bị nguyền rủa này là Khu vực cuộn và tiện ích hoạt động hoàn hảo.

Tôi không biết tại sao những đối tượng này "không trả lời" nếu somedoby có loại thử nghiệm này, bạn có thể vui lòng giúp tôi không?

Cảm ơn bạn rất nhiều trước.

Trả lời

RameshChoudhary Aug 26 2020 at 21:00

thử mã này

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