初学Qt——菜单栏QAction+ QstackedWidget堆栈窗体实现切换分页
QstackedWidget 堆栈窗体,具体不作详述,stackedWidget 主要实现效果类似与界面分页效果,主要常与QListWidget QtreeWidget QTableWidget等结合使用,这里主要讲使用菜单栏QAction,上面三种网上都有很多例子。
使用QstackedWidget连接信号槽代码段如下
QObject::connect(MainWindow,SIGNAL(tt(int)),stackedWidget,SLOT(setCurrentIndex(int)));
//MainWindow为主窗体,stackedWidget为定义的堆栈窗体
因为调用页面切换使用的槽是SLOT(setCurrentIndex(int)),需要带一个整型参数,而菜单栏选项QAction的触发信号是SIGNAL(triggered())。
由于槽信号对应的参数必须一致,所以导致以下用法是不正确的
QObject::connect(Action,SIGNAL(triggered()),stackedWidget,SLOT(setCurrentIndex(int)));
//这里是不正确的 信号与槽的参数不一致
因此我们采用通过获取菜单栏触发选项的值来确定那个QAction被触发了,然后通过自定义信号发送一个对应的页面Index给SLOT(setCurrentIndex(int))。
代码段如下
先在头文件定义自定义信号和槽:
private:
signals:
void tt(int index);//自定义信号
private slots:
void dothis(QAction *action);
信号槽的连接代码:
QObject::connect(menubar,SIGNAL(triggered(QAction *)),MainWindow,SLOT(dothis(QAction *)));
//menubar是定义的菜单栏,MainWindow是主界面
QObject::connect(MainWindow,SIGNAL(tt(int)),stackedWidget,SLOT(setCurrentIndex(int)));
//stackedWidget是堆栈窗体,tt(int)是自定义信号
.cpp页面代码段:
void MainWindow::dothis(QAction *action)
{
if(action==ui.UserInfoAction)//UserInfoAction是定义的QAction,这里判断触发的QAction是否为UserInfoAction,是则发送信号
{
emit tt(1);//发射信号,这里需要使用emit关键字
}
}
菜单栏QAction+ QstackedWidget堆栈窗体实现切换分页就是这样了,通过这个以此类推,我们也可以实现按钮button切换分页,不过通过点击按钮切换分页,这里有个小提示,点击按钮的信号为SIGNAL(clicked()),它是无法带参的,这里我们可以使用 QSignalMapper类给不同的信号带上不同的参数,下面是官方的例子代码
signalMapper = new QSignalMapper(this);
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i) {
QPushButton *button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i / 3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)),
this, SIGNAL(clicked(QString)));
QSignalMapper类的官网说明链接:http://doc.qt.io/qt-5/qsignalmapper.html
初学Qt——菜单栏QAction+ QstackedWidget堆栈窗体实现切换分页的更多相关文章
- 【转载】 Pyqt QStackedWidget堆栈窗体
转载地址: http://blog.csdn.net/a649518776/article/details/6636578 下面用代码实现上面窗口的设计 # -*- coding: utf-8 -*- ...
- Qt5布局管理(三)——QStackedWidget堆栈窗口类
转载:LeeHDsniper 实例效果如下图: 如上图,堆栈窗口左半部分是一个QListWidget对象,右半部分是分别是三个标签.通过点击左边不同的项目,可以使得右边的Lable进行切换. 具体的结 ...
- C#用panel实现子窗体的切换
今天编程的时候,遇到一个问题:在同一个窗体区域加载两个不同的窗体,每次只显示一个子窗体并能够对这两个子窗体做切换. 对于这个问题用panel控件是非常简单的,只要每次清空panel控件上的子窗体,然后 ...
- QT 主窗口和子窗口相互切换示例
QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...
- 初学Qt——vs2012开发环境下的窗体跳转
最近接了份外快,要求使用vs+qt开发一个简单的数据管理系统.qt开发使用的语言是c++,然而c++只是大一第二学期有教过而已,基本也差不多忘光了,废话不多说,讲下今天遇到的问题吧 如标题所说,窗体跳 ...
- 初学qt——提示窗体
带选择的窗体 QMessageBox::StandardButton rb = QMessageBox::critical(NULL, QString::fromLocal8Bit("提示& ...
- Qt使用QGraphicsView实现滑动窗体效果
QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容.QGraphicsScene提供了QGraphicsItem的容器功能.通常与QGraphicsView一起使用来描 ...
- Qt——菜单栏、工具栏、状态栏
1.菜单栏 菜单栏的意义是将可点击触发最终事件的集中在一起,所以菜单栏中是QAction 添加菜单栏是QMainWindow的行为 QMenubar *menubar = this->addMe ...
- QT +菜单栏和工具栏
#include "mainwindow.h" #include <QMenuBar>//菜单栏需要的头文件 #include <QMenu>//菜单 #i ...
随机推荐
- Pickle的简单使用
单词Pickle的中文意思是“泡菜.腌菜.菜酱”的意思,Pickle是Python的一个包,主要功能是对数据进行序列化和反序列化.那么什么叫序列化和反序列化呢? 其序列化过程就是把数据转化成二进制数据 ...
- nginx简单安装
虚拟机首先要求ping www.baidu.com 下载: 解压: 创建用户: [root@nginx ~]# useradd -M -s /sbin/nologin nginx-M 不创建加目录 ...
- Hibernate一级缓存Session和对象的状态
建议看原文:https://blog.csdn.net/qq_42402854/article/details/81461496 一.session简介 首先,SessionFactor ...
- druid+mybaits简单集成
在前面的文章中,我们对springboot开发中一些常用的框架进行了集成,但是发现还是存在一些问题,比如druid还需要比较长的固有配置,实际上druid官方是提供了相关的starters包的,内部采 ...
- python编程练习题目
github上面的一个项目,分为level1,level2,level3 三个等级的难度. 题目地址 一部分中文翻译 python教程 剑指offer,python3实现 python进阶 练习题1: ...
- hibernate中lazy的使用
lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效:session关闭后lazy就没效了. lazy策略可以用在: * <class>标签上:可以取值true/fa ...
- C++ List的用法
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. assign() 给list赋值 back() 返回最后一个元素 begin() ...
- VisualStudio2010配置使用Halcon
电脑系统环境变量(path): %HALCONROOT%\bin\x86sse2-win32;%HALCONROOT%\bin\x64-win64;%HALCONROOT%\bin\dotnet20; ...
- yet|women teachers|waters|
Though the sore be healed, a scar may remain on her face, which makes her sad sometimes. 题目解析 考查连词的 ...
- HihoCode-1053-居民迁移
解法: 一开始不会做,看到标签说是贪心加二分忽然就会了,二分是分的是人口最多居住点的人口,检查人口最多的居住点人口为mid是否可行.贪心是如果从左往右循环就尽量把人口往左迁移,如果从右往左循环就尽量把 ...