【Qt编程】Qt学习之窗口间的相互切换
在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口。下面我们来介绍具体的实现方法:
工程建立及功能描述:
首先,我们建立Qt Gui应用,项目名TwoWindowsHandoff(可以随便取),基类选择QMainWindow。然后右击项目,添加Qt设计器界面类,类名取为logindialog。我们在这里假设一个窗口是登录对话框,另一个窗口是主界面;登录对话框有两个按钮,分别更改显示文本为login,exit;主界面也有两个按钮,分别更改显示文本为relogin,quit.。我们最终的实现功能是:程序运行时,出现登录对话框,点击login按钮进入主界面且登录对话框消失;在主界面点击relogin按钮回到登录对话框且主界面消失,点击exit按钮或quit按钮都会退出程序。
编程思想:
我们可以通过Qt Designer来在两个窗口上分别添加上述按钮,这里不在详细描述。我们主要的问题是如何设计信号和槽。我们先设计两个窗口的退出按钮:分别右击exit和quit按钮,转到槽,在槽函数中发射quit()信号,然后将信号与QApplication对象的quit()槽函数关联。这样我们就设计好了两个退出按钮的退出操作。对于login按钮,我们在其槽函数中发射showmainwindow()信号,隐藏对话框,然后在主窗口类中定义对应的槽函数receivelogin(),在该函数中我们应该显示主窗口。同理对于relogin窗口,我们在其槽函数中发射dlgshow()信号,隐藏主窗口,然后在登录对话框类中定义对应的槽函数receivelshow(),在该函数中我们应该显示登录对话框。
具体的程序实现如下:
1.头文件:
mainwindow.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void receivelogin();//与login中发射的信号关联的槽函数
void on_pushButton_clicked();//与relogin的click()关联的槽函数
void on_pushButton_2_clicked();//与quit的click()关联的槽函数
signals:
void dlgshow();//显示登录对话框信号
void quit();//退出信号
};
#endif // MAINWINDOW_H
mydialog.h文件:
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
namespace Ui {
class MyDialog;
}
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();
private slots:
void on_pushButton_clicked();//与login关联的槽函数
void receiveshow();//与relogin中发射的信号关联的槽函数
void on_pushButton_2_clicked();//与exit关联的槽函数
signals:
void showmainwindow();//显示主窗口信号
void quit();//退出信号
private:
Ui::MyDialog *ui;
};
#endif // MYDIALOG_H
2.源文件:
#include <QtGui/QApplication>
#include "mainwindow.h"
#include"mydialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
MyDialog dlg;
dlg.show();
//信号与槽之间进行关联
QObject::connect(&dlg,SIGNAL(showmainwindow()),&w,SLOT(receivelogin()));
QObject::connect(&w,SIGNAL(dlgshow()),&dlg,SLOT(receiveshow()));
QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
QObject::connect(&dlg,SIGNAL(quit()),&a,SLOT(quit()));
return a.exec();
}
mainwindow.cpp文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QHBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);//默认是类名
setWindowTitle(tr("myMainWindow"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::receivelogin()
{
this->show();//显示主窗口
}
void MainWindow::on_pushButton_clicked()
{
this->hide();//隐藏主窗口
emit dlgshow();//发射显示登录对话框信号
}
void MainWindow::on_pushButton_2_clicked()
{
emit quit();//发射退出信号
}
mydialog.cpp文件:
#include "mydialog.h"
#include "ui_mydialog.h"
#include<QHBoxLayout>
#include<mainwindow.h>
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::on_pushButton_clicked()
{
this->hide();//隐藏登录对话框
emit showmainwindow();//显示主窗口
}
void MyDialog::receiveshow()
{
this->show();//显示登录对话框
}
void MyDialog::on_pushButton_2_clicked()
{
emit quit();//发射退出信号
}
3.ui文件(窗口设计)
原文:http://blog.csdn.net/tengweitw/article/details/21275721
作者:nineheadedbird
【Qt编程】Qt学习之窗口间的相互切换的更多相关文章
- Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用
Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用 Ext.ux.IFrame Extjs官方提供的一个组件,可以很方便的使用. 这样就完成了一个简单的IFrame的使用,通过E ...
- Qt编程之实现属性窗口编辑器
类似于这种: 就是右下角这个框,有属性名字和对应的value编辑. 这个Widget是作为一个QDockWidget被添加到QMainWindow中的.QMainWindow必须要有centralWi ...
- C# WPF 通过委托实现多窗口间的传值
在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多窗口间的传值. 在上代码之前呢,先简单介绍一下什么是C#中的委托(如果只想了解如 ...
- Qt编程—去掉标题栏和设置窗口透明用法
学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧. 这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后) 代码实现部分: .h文 ...
- Qt编程学习网站
http://blog.csdn.net/k122769836/article/details/8637677 QT - little_su - 博客频道 - CSDN.NET Qt - 1+1=2 ...
- QT学习之窗口右键菜单
#QT学习之窗口右键菜单 QWidget 及其子类都有右键菜单,主要因为其有两个与右键菜单相关联的函数: Qt::ContextMenuPolicy contextMenuPlicy() const ...
- 学习 Qt 编程的好书精品推荐!
最近一段时间,准备开始搞Qt方面的东西,想找几本书看看.网上介绍QT的书籍也有很多,不想浪费时间,所以想找几本精品的书籍来看.花了半天的时间找了几本非常不错的,这里面整理好之后推荐给大家! 下面介绍的 ...
- 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动
在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...
- Qt学习3---子窗口与父窗口
创建子窗口后,主窗口的头文件需要 #include "子窗口头文件" 子窗口和父窗口之间相互切换 子窗口没有办法处理父窗口,子窗口此时就需要一个信号: * 信号必须有signal ...
随机推荐
- Bootstrap3 栅格系统-简介
Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...
- Programming In Scala笔记-第二、三章
本系列博客以<Programming in Scala 2nd Edition>为主,围绕其中的代码片段进行学习和分析. 本文主要梳理Chapter2和Chapter3中涉及到的主要概念. ...
- Docker学习笔记2: Docker 概述
一.什么是Docker Docker是基于Go语言实现的云开源项目. Docker 的主要目标是:"Bulid,Ship and Run Any App ,AnyWhere" , ...
- [Centos7] bbc tools安装
作者 运维开发群 @军爷,bbc是什么? 请参考 Brendan大爷的博客 Linux 4.9's Efficient BPF-based Profiler 更新到最新 CentOS 7.3 1611 ...
- 微信小程序基础之试图控件View、ScrollView、Swiper
今天写一篇关于微信小程序视图控件的文章,主要是介绍界面的搭建和部分操作js交互功能的介绍,转载请注明出处,谢谢~ 首先显示首页结构.创建三个navigator,用来跳转页面: <!--index ...
- Android下DrawerLayout的使用
Android下DrawerLayout的使用 DrawerLayout见名知意,就是一个具有抽屉效果的布局,看看这个效果图,是不是感觉很炫酷 这么炫的效果其实不一定非要用类似一些SlidingMen ...
- 深入了解UIViewController控制器与对应的View类的详解
ViewController是iOS开发中MVC模式中的C(视图控制器),ViewController是view的controller,ViewController的职责主要包括管理内部各个view的 ...
- Linux Java开发坏境搭建,Ubuntu-jdk+tomcat+eclipse+svn 包安装详细操作
更新时间2015-03-15 更新2015-04-12 svn安装更新 第一步 安装jdk (在linux上使用yum安装JDK http://blog.chinaunix.net/uid-1546 ...
- 那些年我们一起用过的Hybrid App
Hybrid App现状分析 Web App 毫无疑问Web App就是成本最低,最快速地解决方案了.尤其是近两年非常流行的响应式设计,Web App市场提供了非常好的实践场地.最近典型的Web Ap ...
- UNIX网络编程——客户/服务器程序设计示范(一)
下面给出的是客户程序用于测试我们的服务器程序的各个变体. #include "unp.h" #define MAXN 16384 /* max # bytes to request ...