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堆栈窗体实现切换分页的更多相关文章

  1. 【转载】 Pyqt QStackedWidget堆栈窗体

    转载地址: http://blog.csdn.net/a649518776/article/details/6636578 下面用代码实现上面窗口的设计 # -*- coding: utf-8 -*- ...

  2. Qt5布局管理(三)——QStackedWidget堆栈窗口类

    转载:LeeHDsniper 实例效果如下图: 如上图,堆栈窗口左半部分是一个QListWidget对象,右半部分是分别是三个标签.通过点击左边不同的项目,可以使得右边的Lable进行切换. 具体的结 ...

  3. C#用panel实现子窗体的切换

    今天编程的时候,遇到一个问题:在同一个窗体区域加载两个不同的窗体,每次只显示一个子窗体并能够对这两个子窗体做切换. 对于这个问题用panel控件是非常简单的,只要每次清空panel控件上的子窗体,然后 ...

  4. QT 主窗口和子窗口相互切换示例

    QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...

  5. 初学Qt——vs2012开发环境下的窗体跳转

    最近接了份外快,要求使用vs+qt开发一个简单的数据管理系统.qt开发使用的语言是c++,然而c++只是大一第二学期有教过而已,基本也差不多忘光了,废话不多说,讲下今天遇到的问题吧 如标题所说,窗体跳 ...

  6. 初学qt——提示窗体

    带选择的窗体 QMessageBox::StandardButton rb = QMessageBox::critical(NULL, QString::fromLocal8Bit("提示& ...

  7. Qt使用QGraphicsView实现滑动窗体效果

    QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容.QGraphicsScene提供了QGraphicsItem的容器功能.通常与QGraphicsView一起使用来描 ...

  8. Qt——菜单栏、工具栏、状态栏

    1.菜单栏 菜单栏的意义是将可点击触发最终事件的集中在一起,所以菜单栏中是QAction 添加菜单栏是QMainWindow的行为 QMenubar *menubar = this->addMe ...

  9. QT +菜单栏和工具栏

    #include "mainwindow.h" #include <QMenuBar>//菜单栏需要的头文件 #include <QMenu>//菜单 #i ...

随机推荐

  1. b+树的原理

    Java 内存区域<ignore_js_op>Heap线程公有存放实例对象是GC主要管理区域,因此可以更细致的划分为:新生代.老年代再细致一点划分:Eden区.From Survivor区 ...

  2. xcode7 上传APPStore错误ERROR ITMS-90474: iPad Multitasking support requires these orientations

    在使用Xcode7 上传AppStore时候发现ERROR ITMS-90474错误.报错描述如下: ERROR ITMS-90474: “Invalid Bundle. iPad Multitask ...

  3. [Algo] 281. Remove Spaces

    Given a string, remove all leading/trailing/duplicated empty spaces. Assumptions: The given string i ...

  4. Gson、jackson 序列化,反序列化(单个、集合)

    实体类: package com.nf.redisDemo1.entity; public class News { private long id; private String title; pr ...

  5. C++ 类中使用dllimport和dllexport

    在Windows平台下: 您可以使用dllimport或dllexport属性声明C ++类.这些形式意味着导入或导出整个类.以这种方式导出的类称为可导出类. 以下示例定义可导出的类.导出其所有成员函 ...

  6. Normal Probability Plots|outlier

    6.4 Assessing Normality; Normal Probability Plots The normal probability plot is a graphical techniq ...

  7. Mock测试,何去何从

    2016-10-24   出处:Qtest之道  作/译者:闫耀珍   上面的情景是不是似曾相识呢?现今的业务系统已经很少是孤立存在的了,尤其对于一个大公司而言,各个部门之间的配合非常密切,我们或多或 ...

  8. Socket设置超时时间

    主要有以下两种方式,我们来看一下方式1: Socket s=new Socket(); s.connect(new InetSocketAddress(host,port),10000); 方式2: ...

  9. Selenium处理alert/confirm/prompt提示框

    About 回到顶部 重新认识alert首先,不是所有的alert都能叫做alert框.JavaScript中,关于消息提示框的方法有三个(虽然都跟alert差不多): alert(message)方 ...

  10. [LC] 114. Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...