初学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 ...
随机推荐
- oracle 查询表空间
测试用户连接C:\Users\ZP>sqlplus /nologconn hbcxuser/hbcxpass --查看所有表空间 select * from user_tablespaces-- ...
- Python基础——类new方法与单例模式
介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...
- sockaddr_in 转成string
string strAcceptIp = inet_ntoa(remoteAddr.sin_addr);
- 史上最强maven配置详情
史上最强maven配置详情 优点 对第三方依赖库进行了统一的版本管理 统一了构建过程 统一了项目的目录结构 构建 清理 : mvn clear 编译 : mvn compile 测试 : mvn te ...
- 用冒泡法对5个Date类型的数据进行排序
import java.util.*; public class OrderDate{ public static void main(String[] args){ Date[] days = ne ...
- [LC] 270. Closest Binary Search Tree Value
Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...
- 3)利用Build.php自动创建目录和文件
(1)首先做法参照: thinkphp5的手册的 命令行--->自动生成目录结构 或者看云的资料:https://www.kancloud.cn/manual/thinkphp5/118021 ...
- facebook第三方登陆(使用sharedSDK)无法加载网址:这个URL的域名未包含应用的域名
http://bbs.mob.com/forum.php?mod=viewthread&tid=8134&extra=page%3D1
- android多框架实现短视频应用、3D手势旋转、banner控件、指南针、智能管家等应用源码
Android精选源码 android智能管家app源码 Android高仿拼多多分类列表 Android百度地图实例详解之仿摩拜单车APP RecyclerView的LayoutManager搭建流 ...
- numpy.ravel() 与 numpy.flatten()
两者都可实现将多维数组降位一维的功能 numpy.flatten()返回拷贝,对拷贝所做的修改不会影响原始矩阵 numpy.ravel()返回视图,会影响原始矩阵 1)ravel() In [16]: ...