Qt 多窗口的调用

本文介绍三种Qt中实现父窗口与子窗口间切换的方法,包括直接使用show和hide方法、利用connect进行信号槽连接以及通过子窗口直接指向父窗口对象的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:(用于一个父窗口和多个子窗口的处理,不知道怎么用于处理子窗口的子窗口的处理)

1、建立一个父窗口,然后建立一个QDialog类型的窗口作为子窗口

2、在父类窗口建立子窗口的对象

	void 父类名::on_pushButton_clicked()
	{
    		this->hide();
    		子类对象->show();    
   		子类对象->exec();                      //当子类对象窗口关闭或隐藏时,执行下面语句
    		this->show();                            
	}

方法二:(使用connect,可用于父窗口与子窗口还有子窗口的子窗口间的调用,但用于一个父窗口和多个子窗口时,会使代码质量大大降低,复杂化)

建立一个父窗口,然后建立一个QDialog类型的窗口作为子窗口      

父窗口.h文件
	   children_win *cwin = new children_win();
           private slots:
                           void on_pushButton_clicked();           
                            void re_show_pwin();     
父窗口.cpp文件 
			parent_win::parent_win(QWidget *parent) :
   			 	QMainWindow(parent),
   			 	ui(new Ui::parent_win)
			{
   				 ui->setupUi(this);
    				connect(cwin,SIGNAL(send_cwin()),this,SLOT(re_show_pwin()));      //子类对象发送send_cwin()信号给父类,调用re_show_pwin()
			}
			void parent_win::on_pushButton_clicked()
			{
    				this->hide();
    				cwin->show();
			}
			void parent_win::re_show_pwin()
			{
   			 	this->show();
			}
子窗口.h
              signals:
    			void send_cwin();
子窗口.cpp       
			void children_win::on_pushButton_clicked()
			{
    				this->hide();
    				emit send_cwin();
			}

方法三:(比较好用)

建立一个父窗口,然后建立一个QDialog类的子窗口

父窗口.cpp
		#include "zi.h"
 
		void parent_win::on_pushButton_clicked()
		{
    			this->hide();
    			zi *z = new zi(this);          //this一定要加上,否则子窗口对象无法指向父类窗口
    			z->show();
		}
 
子窗口.h  
		#include "fu.h"
                         fu *f;
 
子窗口.cpp
		zi::zi(QWidget *parent) :
    		    QMainWindow(parent),
    		    ui(new Ui::zi)
		{
   			 f = (fu*) parent;               //fu指针指向父类窗口
    			ui->setupUi(this);
		}

Qt中,主窗口调用窗口函数可以通过信号与槽机制来实现。 首先,在窗口类中定义一个需要被主窗口调用的函数。例如,窗口类为ChildWindow,函数为childFunction()。 窗口头文件ChildWindow.h中添加以下代码: ```cpp signals: void callChildFunction(); public slots: void childFunction(); ``` 接下来,在主窗口类中,需要实例化窗口的对象,并连接窗口的信号和主窗口的槽函数。 主窗口头文件MainWindow.h中添加以下代码: ```cpp private slots: void onCallChildFunction(); ``` 主窗口源文件MainWindow.cpp中添加以下代码: ```cpp void MainWindow::onCallChildFunction() { childWindow->childFunction(); } ``` 最后,在主窗口类的构造函数中,进行窗口对象的创建,并连接信号与槽函数。 主窗口源文件MainWindow.cpp中添加以下代码: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { // 其他代码... childWindow = new ChildWindow(this); connect(this, &MainWindow::callChildFunction, childWindow, &ChildWindow::childFunction); } ``` 这样,当主窗口需要调用窗口的函数时,只需要在主窗口的槽函数onCallChildFunction()中发射信号emit callChildFunction()即可。 总结起来,主窗口调用窗口函数的步骤如下: 1. 在窗口类中定义需要被调用的函数。 2. 在主窗口类中创建窗口对象,并连接信号与槽函数。 3. 在主窗口类的槽函数中发射窗口的信号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值