C++ 问题更改选项卡QTabWidget&;qscrollareaqt
我试图在QTabWidget中创建一个QScrollArea 版本:C++ 问题更改选项卡QTabWidget&;qscrollareaqt,c++,qt,C++,Qt,我试图在QTabWidget中创建一个QScrollArea 版本: Qt 5.15.0 Qt creator 4.12.4 MSVC2019 64位 首先,我创建了QTabWidget: tabWidget=新的QTabWidget(此); tabWidget->setGeometry(10、15、1200、665); tabWidget->setStyleSheet(“字体大小:15px”); tab1Content=新的QWidget(tabWidget);tabWidget->add
- Qt 5.15.0
- Qt creator 4.12.4
- MSVC2019 64位
tabWidget=新的QTabWidget(此);
tabWidget->setGeometry(10、15、1200、665);
tabWidget->setStyleSheet(“字体大小:15px”);
tab1Content=新的QWidget(tabWidget);tabWidget->addTab(tab1Content,“tab1”);
tab2Content=新的QWidget(tabWidget);tabWidget->addTab(tab2Content,“tab2”);
tab3Content=新的QWidget(tabWidget);tabWidget->addTab(tab3Content,“tab3”);
tab4Content=新的QWidget(tabWidget);tabWidget->addTab(tab4Content,“tab4”);
我可以补充一点
tabWidget->setEnable(true);
对于所有选项卡,0 setTabEnabled(i,true);
单击以更改选项卡不起作用:
奇怪的是:颜色看起来像启用了,但我只能用← → 当我点击tabWidget之外的其他东西而失去tabWidget焦点时,我无法重新获得焦点
因此,我创建了临时按钮来更改选项卡,并链接到tabWidget,如下所示:
connect(changeTab,&QPushButton::clicked,[&](){onChangeTab();});
void主窗口::onChangeTab(){
tabWidget->setCurrentIndex(tabWidget->currentIndex()>=tabWidget->count()-1?0:tabWidget->currentIndex()+1);
}
它工作得很好
因此,我开始创建QScrollArea:
首先,它不起作用,所以我试图在互联网上找到一些东西:
我的结果是:
我不能点击一个按钮,也不能滚动。。。
如果我尝试像这样强制滚动,它不会滚动
滚动区域->滚动(0,50);
最后一件事,这里没有无限循环或死锁的东西,因为这个被诅咒的tabWidget和滚动区域周围的所有东西都能完美地工作
我不知道为什么这些物体“不回答”如果有人做了这样的实验你能帮我吗
非常感谢。请尝试此代码
#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()
{
}
#包括“widget.h”
#包括
#包括
#包括
#包括
小部件::小部件(QWidget*父部件)
:QWidget(父项)
{
QTabWidget*tabWidget=新的QTabWidget(此);
tabWidget->setGeometry(10、15、1200、665);
tabWidget->setStyleSheet(“字体大小:15px”);
QWidget*tab1Content=新的QWidget;
//准备表1内容(例如)
QVBoxLayout*垂直布局=新的QVBoxLayout;
//向垂直布局添加项目
对于(inti=0;iaddWidget(新的QLabel(QString::number(i)));
//在tab1content内设置此垂直布局
选项卡1内容->设置布局(垂直布局);
//创建新的滚动区域。。。
QScrollArea*滚动=新QScrollArea;
//…并在滚动区域中添加tab1content
滚动->设置小部件(选项卡1内容);
//最后在tabwidget中添加滚动区域
tabWidget->addTab(滚动“tab1”);
QWidget*tab2Content=newqwidget;tabWidget->addTab(tab2Content,“tab2”);
QWidget*tab3Content=newqwidget;tabWidget->addTab(tab3Content,“tab3”);
QWidget*tab4Content=newqwidget;tabWidget->addTab(tab4Content,“tab4”);
}
小部件::~Widget()
{
}
试试这段代码
#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()
{
}
#包括“widget.h”
#包括
#包括
#包括
#包括
小部件::小部件(QWidget*父部件)
:QWidget(父项)
{
QTabWidget*tabWidget=新的QTabWidget(此);
tabWidget->setGeometry(10、15、1200、665);
tabWidget->setStyleSheet(“字体大小:15px”);
QWidget*tab1Content=新的QWidget;
//准备表1内容(例如)
QVBoxLayout*垂直布局=新的QVBoxLayout;
//向垂直布局添加项目
对于(inti=0;iaddWidget(新的QLabel(QString::number(i)));
//在tab1content内设置此垂直布局
选项卡1内容->设置布局(垂直布局);
//创建新的滚动区域。。。
QScrollArea*滚动=新QScrollArea;
//…并在滚动区域中添加tab1content
滚动->设置小部件(选项卡1内容);
//最后在tabwidget中添加滚动区域
tabWidget->addTab(滚动“tab1”);
QWidget*tab2Content=newqwidget;tabWidget->addTab(tab2Content,“tab2”);
QWidget*tab3Content=newqwidget;tabWidget->addTab(tab3Content,“tab3”);
QWidget*tab4Content=newqwidget;tabWidget->addTab(tab4Content,“tab4”);
}
小部件::~Widget()
{
}