Qt 窗口间的信号传递

应用场景:

主窗口下创建了一个子窗口为其成员,当点击子窗口内的按钮时,主窗口接收其信号并做处理

示例:

子窗口类:

#ifndef UPDATE_VIEW_H
#define UPDATE_VIEW_H

#include "ui_update_subwindows.h"
#include <QtGui/QMainWindow>

class UpdateView : public QMainWindow{
    Q_OBJECT
private:
    Ui_update::Update_MainWindow ui;

public:
    UpdateView(QWidget* parent = 0,Qt::WFlags flags = 0);
    ~UpdateView();

signals:
    void up_select_update_file(QPushButton *);
private slots:
    void emit_select_button();
};
#endif //
#include "UpdateView.h"

UpdateView::UpdateView(QWidget* parent,Qt::WFlags flags) : QMainWindow(parent,flags)
{
    ui.setupUi(this);

    connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(emit_select_button()));
}

UpdateView :: ~UpdateView()
{
}

void UpdateView::emit_select_button()
{
    emit up_select_update_file(ui.pushButton);
}

主窗口信号槽

void export_da::update_da()
{
    update_view = new UpdateView(this);

    connect(update_view,SIGNAL(up_select_update_file(QPushButton*)),this,SLOT(select_update_file(QPushButton*)));

    update_view->show();
}

这里的update_view 即使我的子窗口,而其发送的信号函数up_select_update_file里的参数是QPushButton* 类型,实现的是,我想将子窗口的按钮传递给主窗口,采用主窗口的内容去set这个按钮。

void export_da::select_update_file(QPushButton* update_file)
{
    update_file_name = QFileDialog::getOpenFileName(this,tr("Save File"),".",tr("TEXT files (.txt)"));
    update_file->setText(update_file_name);
}
时间: 2024-09-12 06:27:21

Qt 窗口间的信号传递的相关文章

Qt窗口及控件-窗口Close()自动释放

在进行一个四窗口项目,当第四个窗口显示结果后,若重新开始则close()结果页面后new第一个窗口 发现不断的重新开始会导致内存占用越来越多 Qt窗口在Close()指令后调用CloseEven(),最后判断是否关闭 若关闭,则Hide()窗口,并不是真正的释放内存.若不关闭则不作任何操作 此时给窗口增加如下设置: setAttribute(Qt::WA_DeleteOnClose); 可实现窗口在Close()后自动释放内存

自定义QT窗口部件外观之QStyle

自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. QStyle 类的使用 1.      准备必要的背景图片.在你想添加自定义风格的工程目录下新建一个文件夹“images”,将背景图片等放入文件夹“images”. 2.      点击Qt Creator的“文件”->“新建文件或工程”->模板选择“Qt”,再选择Qt资源文件->点击“选择”

深度探索QT窗口系统(五篇)

窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打开windows时,桌面就是一个窗口,你打开浏览器时,你也正在访问窗口...好了,回到今天的话题,QT窗口系统,QT是一个跨平台的框架,类似微软的MFC,Borland的OWL,前者只适用于windows,而使用QT你可以开发windows平台应用程序,你也可以开发linux应用程序,当然了你也可以

第16课 Qt对象间的父子关系

1. Qt对象间的关系 (1)Qt对象间可以存在父子关系 ①每一个对象都保存有它所有子对象的指针 ②每一个对象都有一个指向其父对象的指针 (2)当指定Qt对象的父对象时 ①其父对象会在子对象链表中加入该对象的指针 ②该对象会保存指向其父对象的指针 (3)当Qt对象被销毁时 ①将自己从父对象的Children List移除 ②将自己的Children List中的所有对象销毁 ▲使用Qt开发时,不仅要时刻注意内存泄露的问题,还要时刻关注对象是否可能被多次销毁的问题. [编程实验]对象间的父子关系

CentOS下Qt窗口透明效果失效,成黑色背景的问题

一.问题 Linux系统下Qt窗口的透明效果成了黑色,但同样的代码在windows机子上有透明效果,主要是修改系统的配置,仅在centos6.3及其以上版本实验过.其他系统可以相应配置. 二.问题运行图 (1)Qt透明效果,centos下运行都会出现如下图1所示. 三.解决方法 (1)窗口透明,窗口上的控件不透明,其代码设置 [html] view plain copy setAutoFillBackground(false);  //这个不设置的话就背景变黑 setWindowFlags(Qt

Qt窗口定制

qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状态栏,如果自己想加状态栏的话,照着这个模式自己也可以添加,说白了,窗口定制就是把完整的窗口分3部分定制,而每个部分又都是一个qt窗口 定制窗口效果图如下,根据个人喜好,自己也可以定制不同的效果 图1 定制窗口 如图1所示,这个窗口包含两部分,标题栏和窗体,这两部分其实分别是一个没有标题栏的QWidg

Chrome调试本地文件无法使用window.opener对象进行窗口间值传递

今天在百度BAE上建了个应用,svn上传后发现页面间互调有些问题,几经查询发现: (1)IE下正常的window.opener.object1.object2页面间对象访问方法在Chrome下不能使用,修改为window.opener.document.getElementById('object2')解决问题: (2)Chrome调试本地网页文件时无法使用window.opener对象访问父窗口内的对象,也就无法实现窗口间的值传递.

详解 Qt 线程间共享数据(用信号槽方式)

使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据从一个线程传递到另外一个线程. 第一种办法在各个编程语言都使用普遍,而第二种方式倒是QT的特有方式,下面主要学习一

HTML教程-各窗口间相互操作(Frame Target)

由Frames分出来的几个窗口的内容并不是静止不变的,往往一个窗口的内容随着另一个窗口的要求而不断变化,这就提高了Frames的利用价值.为了完成各窗口之间的相互操作,我们必须为每一个窗口起一个名字,这个名字用属性Name来定义. 窗口标识(Frame Name)  <frame src=url name="窗口名"> 例如: <frame src="frame/a.html" name="left"> 定义了窗口名称,还