初学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 ...
随机推荐
- b+树的原理
Java 内存区域<ignore_js_op>Heap线程公有存放实例对象是GC主要管理区域,因此可以更细致的划分为:新生代.老年代再细致一点划分:Eden区.From Survivor区 ...
- xcode7 上传APPStore错误ERROR ITMS-90474: iPad Multitasking support requires these orientations
在使用Xcode7 上传AppStore时候发现ERROR ITMS-90474错误.报错描述如下: ERROR ITMS-90474: “Invalid Bundle. iPad Multitask ...
- [Algo] 281. Remove Spaces
Given a string, remove all leading/trailing/duplicated empty spaces. Assumptions: The given string i ...
- Gson、jackson 序列化,反序列化(单个、集合)
实体类: package com.nf.redisDemo1.entity; public class News { private long id; private String title; pr ...
- C++ 类中使用dllimport和dllexport
在Windows平台下: 您可以使用dllimport或dllexport属性声明C ++类.这些形式意味着导入或导出整个类.以这种方式导出的类称为可导出类. 以下示例定义可导出的类.导出其所有成员函 ...
- Normal Probability Plots|outlier
6.4 Assessing Normality; Normal Probability Plots The normal probability plot is a graphical techniq ...
- Mock测试,何去何从
2016-10-24 出处:Qtest之道 作/译者:闫耀珍 上面的情景是不是似曾相识呢?现今的业务系统已经很少是孤立存在的了,尤其对于一个大公司而言,各个部门之间的配合非常密切,我们或多或 ...
- Socket设置超时时间
主要有以下两种方式,我们来看一下方式1: Socket s=new Socket(); s.connect(new InetSocketAddress(host,port),10000); 方式2: ...
- Selenium处理alert/confirm/prompt提示框
About 回到顶部 重新认识alert首先,不是所有的alert都能叫做alert框.JavaScript中,关于消息提示框的方法有三个(虽然都跟alert差不多): alert(message)方 ...
- [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 ...