初学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 ...
随机推荐
- tensorflow(七)
一.模型托管工具 TensorFlow Serving TensorFlow Serving支持生产级的服务部署,允许用户快速搭建从模型训练到服务发布的工作流水线. 工作流水线主要由三部分构成 (1) ...
- c++17 optional 简介
c++17 的optional 作为返回值,提高异常的处理 对于构造可能失败的对象,似乎在构造函数里抛异常不太合适.所以 首先是使用静态方法来返回对象,在外部申请资源后,再通过传参给构造函数. 这样的 ...
- 893B. Beautiful Divisors#美丽的因子(打表法)
题目出处:http://codeforces.com/problemset/problem/893/B 题目大意:找到一个数在二进制下,最大的以k个连续的1和k-1个连续的0组成的数字作为因子 #in ...
- 如何查看iOS系统版本在iPhone设备上的占有率
我们平时开发的时候有时要考虑到系统的兼容版本,但是怎么知道各个版本的系统占有率,其实这个苹果官方是有提供的.进入如下链接到的页面就可以知道各大系统版本的占有率了,不过说实在的iPhone用户的系统更新 ...
- 如何写JS库,JS库写法
前言: 现在javascript库特别多,其写法各式各样,总结几种我们经常见到的,作为自己知识的积累.而目前版本的 JavaScript 并未提供一种原生的.语言级别的模块化组织模式,而是将模块化的方 ...
- Python程序在docker中运行,未找到自定义模块
错误 Traceback (most recent call last): File "demo.py", line 13, in <module> from test ...
- P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles
冲刺阶段的首篇题解! 题目链接:P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles: 题目概述: 总共N个游戏平台,金额上限V元,给出每个游戏平台的价钱和其上游戏 ...
- TreeMap简介
在Map集合框架中,除了HashMap以外,TreeMap也是常用到的集合对象之一.与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序.其中,可以使用 ...
- Qt platform plugin 'windows' 问题的解决方法
关于Qt 发布程序时遇到qt platform plugin ‘windows’问题的解决方法如下 遇到这个问题,一般应该已经把一部分dll拷贝到了发布的可执行文件同级目录, 我是直接添加C:\Qt ...
- ZooTracer:打破传统追踪软件的束缚
编者按:自今年2月24日起,用户可以免费从官网下载Zootracer试用.这是由来自微软剑桥研究院的Joppa和他的同事研发的桌面工具,可追踪任意画质的视频中任意移动物体行踪,是对对视频画质拍摄要求高 ...