QT用代码对界面进行布局时,按常规思路在tabwidget遇到一个很大的问题:就是最大化后有问题,没有实现最大化的效果。
后来通过各种查找最后又找到一种方法对tabwidget添加页:
//.h文件
class Data : public QMainWindow
{
Q_OBJECT
public:
Data(QWidget *parent = Q_NULLPTR);
private:
Ui::DataClass ui;
QTabWidget *m_TabWidget;
void initTabWidget();
};
class BackDataTab : public QWidget
{
Q_OBJECT
public:
explicit BackDataTab(QWidget *parent = 0);
public:
const int m_EditHight;
QLabel *m_LabelFilterWidgetYMax,
*m_LabelFilterWidgetYMin,
*m_LabelFFTWidgetYMax;
QLineEdit *m_LineEditFilterWidgetYMax,
*m_LineEditFilterWidgetYMin,
*m_LineEditFFTWidgetYMax,
*m_LineEditVideoPath;
QCheckBox *m_CheckBoxPass1,
*m_CheckBoxPass2,
*m_CheckBoxPass3,
*m_CheckBoxPass4;
QPushButton *m_PushBtnVideo;
QGroupBox *m_GroupChioceShow,
*m_GroupChoicePass,
*m_GroupFilterAFFTYValue,
*m_GroupVideo;
QRadioButton *m_RadioBtnFilter,
*m_RadioBtnNotch;
QCustomPlot *m_CustomFilter,
*m_CustomFFT;
private slots:
void slotBtnVideo();
void slotCheckPass1();
void slotCheckPass2();
void slotCheckPass3();
void slotCheckPass4();
private:
QVector<int> m_VectCurPass;
void ChoiceCheck();
void initSignalSlot();
};
//.cpp文件
Data::Data(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// 显示部分布局
m_TabWidget = new QTabWidget;
m_TabWidget->addTab(new BackDataTab(), QString::fromLocal8Bit("数据回放"));
setCentralWidget(m_TabWidget);
setWindowState(Qt::WindowMaximized);
}
BackDataTab::BackDataTab(QWidget *parent /* = 0 */)
:QWidget(parent)
, m_EditHight(30)
{
m_GroupVideo = new QGroupBox(QString::fromLocal8Bit("选择要回放的录像"));
m_LineEditVideoPath = new QLineEdit();
m_PushBtnVideo = new QPushButton(tr("..."));
m_PushBtnVideo->setFixedWidth(m_EditHight);
m_PushBtnVideo->setFixedHeight(m_EditHight);
m_LineEditVideoPath->setFixedHeight(m_EditHight);
m_LineEditVideoPath->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
QHBoxLayout *HBLayoutVideo = new QHBoxLayout();
HBLayoutVideo->addWidget(m_LineEditVideoPath);
HBLayoutVideo->addWidget(m_PushBtnVideo);
HBLayoutVideo->addSpacing(0);
m_GroupVideo->setLayout(HBLayoutVideo);
...
QHBoxLayout *HBLayoutTab = new QHBoxLayout();
HBLayoutTab->addLayout(VBLayoutChartView);
HBLayoutTab->addLayout(VBLayoutTab);
HBLayoutTab->setStretchFactor(VBLayoutChartView, 8);
HBLayoutTab->setStretchFactor(VBLayoutTab, 2);
HBLayoutTab->setSpacing(0); // 设置控件中元素间距
setLayout(HBLayoutTab);
}
原来使用的另一种方式是:
QWidget *widgetBackData = new QWidget();
widgetBackData->setLayout(HBLayoutTab2);
m_TabWidget->addTab(widgetBackData, QString::fromLocal8Bit("数据回放"));
setCentralWidget(m_TabWidget);
这种的最大化的时候就会出现问题,问了一些大佬说,这种的是因为最顶层不是layout导致的,不是特别明白要怎么做,有大佬懂得,欢迎指点。