Qt中QStackedLayout类用法(菜单叶切换界面)
Qt 用法 界面 切换 菜单
2023-09-14 09:07:01 时间
本文主要总结用QStackedLayout类的用法,主要通过新建一个实例,体现QStackedLaout类可以应用在切换菜单上。QStackedLaout类是属于布局管理器中的一个常用类。
下面是一个实例,该实例是顶部两个菜单按钮,分别点击两个按钮,将会切换不同页面。比如点击pageOne按钮,则切换到第一页;点击pageTwo按钮,则切换到第二页。
1.1新建一个widget工程,以及两个类,类名分别为PageOne和PageTwo。然后在如下文件添加代码:
pageone.h
#ifndef PAGEONE_H
#define PAGEONE_H
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
class PageOne : public QWidget
{
Q_OBJECT
public:
explicit PageOne(QWidget *parent = nullptr);
signals:
public slots:
private:
QVBoxLayout *pageOneLayout;
QPushButton *m_pushButton;
};
#endif // PAGEONE_H
pageone.cpp
#include "pageone.h"
PageOne::PageOne(QWidget *parent) : QWidget(parent)
{
pageOneLayout = new QVBoxLayout(this); //注意,this表示在这个widget窗口显示
m_pushButton = new QPushButton;
m_pushButton->setText(tr("成功切换到第一页!"));
pageOneLayout->addWidget(m_pushButton);
}
pagetwo.h
#ifndef PAGETWO_H
#define PAGETWO_H
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
class PageTwo : public QWidget
{
Q_OBJECT
public:
explicit PageTwo(QWidget *parent = nullptr);
signals:
public slots:
private:
QVBoxLayout *pageOneLayout;
QPushButton *m_pushButton;
};
#endif // PAGETWO_H
pagetwo.cpp
#include "pagetwo.h"
PageTwo::PageTwo(QWidget *parent) : QWidget(parent)
{
pageOneLayout = new QVBoxLayout(this); //注意,this表示在这个widget窗口显示
m_pushButton = new QPushButton;
m_pushButton->setText(tr("成功切换到第二页!"));
pageOneLayout->addWidget(m_pushButton);
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QStackedLayout>
#include "pageone.h"
#include "pagetwo.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private slots:
void On_PushButton1Result();
void On_PushButton2Result();
private:
QVBoxLayout *mainLayout;
QHBoxLayout *topLayout;
QStackedLayout *stackLayout;
QPushButton *m_pushButton1,*m_pushButton2;
PageOne *m_pageOne;
PageTwo *m_pageTwo;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//初始化
this->setObjectName("mainWidget");
this->setStyleSheet("#mainWidget{background-color:rgb(10,90,130);}");
mainLayout = new QVBoxLayout;
topLayout = new QHBoxLayout;
stackLayout = new QStackedLayout;
m_pushButton1 = new QPushButton;
m_pushButton1->setText("pageOne");
m_pushButton1->setFixedHeight(50); //设定按钮固定高度
// m_pushButton1->setStyleSheet("color:rgb(255,0,0);border:none"); //设置按钮字体颜色,无边框
// m_pushButton1->setFlat(true); //祛除边框
m_pushButton2 = new QPushButton;
m_pushButton2->setText("pageTwo");
m_pageOne = new PageOne;
m_pageTwo = new PageTwo;
//窗口布局
// topLayout->addWidget(m_pushButton1,0,Qt::AlignLeft | Qt::AlignCenter);
topLayout->setMargin(0); //控件与窗体左右间距
topLayout->setSpacing(0); //Layout内部控件间距
topLayout->addWidget(m_pushButton1);
topLayout->addWidget(m_pushButton2);
stackLayout->addWidget(m_pageOne); //第一页
stackLayout->addWidget(m_pageTwo); //第二页
stackLayout->setCurrentIndex(0); //默认stackLayout显示第0页
mainLayout->addLayout(topLayout); //顶部界面
mainLayout->addLayout(stackLayout); //中间界面
mainLayout->setMargin(0); //控件与窗体左右间距
mainLayout->setSpacing(0); //Layout内部控件间距
mainLayout->setStretchFactor(topLayout,1);
mainLayout->setStretchFactor(stackLayout,10);
setLayout(mainLayout); //设置唯一布局 这句也可以用mainLayout = new QVBoxLayout(this);替代
connect(m_pushButton1,SIGNAL(clicked(bool)),this,SLOT(On_PushButton1Result()));
connect(m_pushButton2,SIGNAL(clicked(bool)),this,SLOT(On_PushButton2Result()));
}
Widget::~Widget()
{
}
void Widget::On_PushButton1Result()
{
//按钮1槽函数
stackLayout->setCurrentIndex(0); //切换到stackLayout第一页
}
void Widget::On_PushButton2Result()
{
//按钮2槽函数
stackLayout->setCurrentIndex(1); //切换到stackLayout第二页
}
main.c
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
相关文章
- qt录制屏幕_iphone录屏转gif
- C++学习(一五九)Qt的场景图Scene Graph
- C/C++ Qt StatusBar 底部状态栏应用
- 解决Ubuntu下使用linuxdeployqt打包Qt程序问题
- 编程在Linux下学习Qt界面编程(linux下qt界面)
- 使用 Qt 连接远程 MySQL 数据库(qt连接远程mysql)
- Qt字符串与数字之间的转换方法详解
- Qt QStringListModel用法详解
- 一个稍微复杂的Qt程序
- Qt 实现 Linux 串口通信编程(qt串口linux)
- Linux下Qt环境下串口编程实践(linuxqt串口编程)
- Linux虚拟机中安装Qt的指南(linux虚拟机安装qt)
- 使用Qt快速连接MySQL数据库(qt连接mysql)
- Qt for Linux:下载与安装指南(qt下载linux)
- Dooble是用Qt4写的另外一款WebKit浏览器,主要在保护用户隐私方面取胜。虽然它和其他浏览器提供的安全性相差不打,但是也有一些特有的属性比如内含的桌面等。Dooble桌面使得用户可以在增加桌面背景的同时添加应用程序启动,除了从软件包管理器安装外,还可以使用Ubuntu 10.10版本0.07安装,此时的Dooble版本为1.14,同时还要有Qt编码工具如qt4-qmake等。
- 轻松实现QT直连Microsoft SQL Server(qt直连mssql)
- Qt技术与SQLServer的完美结合(qt与sqlserver)
- 开发Linux应用程序:使用Qt图形界面(linux qt gui)