• 6761阅读
  • 8回复

多窗口之间的信号传递(已解决) [复制链接]

上一主题 下一主题
离线destiny
 
只看楼主 倒序阅读 楼主  发表于: 2010-01-20
多窗口信号传递出问题了
假设A,B两个窗口
在A中定义了一个信号
signals:
    void explains();
    void emit_date(QString str);
当获得A窗口的输入值date以后,用    emit emit_date(date);将该值返回
A中用connect(B, emit_date(QString), this, SLOT(get_date(QString)));连接信号和槽
调试发现B确实发出了一个信号,但是A中缺无法获得,何解?

补充点代码:

class GoToCellDialog : public QDialog
{
    Q_OBJECT

public:
    GoToCellDialog(QWidget *parent = 0);
    QString date;
    Ui::GoToCellDialog ui;

private slots:
    void get_date();
signals:
    void explains();
    void emit_date(QString str);

};
以上是子窗口的.h文件


GoToCellDialog::GoToCellDialog(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);  
    connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
    connect(ui.okButton, SIGNAL(clicked()), this, SLOT(get_date()));
}
这个是子窗口的.cpp

void GoToCellDialog::get_date()
{
    date = ui.date->text();
    ui.check_it->setText(date);
        emit emit_date(date);
}
);
子窗口的槽,获得的date检查木有问题
PS:这个槽调用完了,怎么退出QDialog啊?
是不是的“okButton”连接一个退出的槽?

connect(dialog, SIGNAL(emit_date(QString)), this, SLOT(Get_date(QString)))
父窗口信号连接

void testMainWin::Get_date(QString str)
{
    date = str;
}
父窗口的槽




解决方法:
void testMainWin::Date_input()
{
    GoToCellDialog* dialog;
    dialog = new GoToCellDialog;
    dialog->exec();
    date = dialog->date;
}

直接调用子类的属性,子类执行后竟然没有被析构。
[ 此帖被destiny在2010-01-21 01:10重新编辑 ]
离线yangfanxing
只看该作者 1楼 发表于: 2010-01-20
就两个窗口。。。

你说得好乱,我不怎么懂。。。

A中定义了一个信号<->B确实发出了一个信号.

把问题问清楚了再发帖。。。


A的槽函数get_date(QString);有声明和实现吧???如何判断“无法获得(B发射的信号)”的?
PHPWind好恶心。。。不想看这种界面。。。
离线destiny
只看该作者 2楼 发表于: 2010-01-20
引用第1楼yangfanxing于2010-01-20 16:16发表的  :
就两个窗口。。。
你说得好乱,我不怎么懂。。。

A中定义了一个信号<->B确实发出了一个信号.
.......


A的槽函数get_date(QString)有定义和声明。
我把断点设在get_date(QString),发现程序根本没有执行这个函数。
所以估计是没有获得信号?
离线午小夜

只看该作者 3楼 发表于: 2010-01-20
connect(B,SIGNAL( emit_date(QString)), this, SLOT(get_date(QString)));
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线午小夜

只看该作者 4楼 发表于: 2010-01-20
在B中定義信號,在A中定義槽....
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线destiny
只看该作者 5楼 发表于: 2010-01-20
引用第4楼午小夜于2010-01-20 18:48发表的  :
在B中定義信號,在A中定義槽....


多谢指教,我确实是那么做的,但是就是没有响应我的信号,哎哎。。。
离线yangfanxing
只看该作者 6楼 发表于: 2010-01-20
emit emit_date(date);
检查下这个date的QString值确实是有效的吗?
————————————————————
不然稍微多点儿code也好说啊~
PHPWind好恶心。。。不想看这种界面。。。
离线john123
只看该作者 7楼 发表于: 2010-01-20
3摟的是正確的
connect(B,SIGNAL( emit_date(QString)), this, SLOT(get_date(QString)));

那你有定義slot?如下
private slots:
    void get_date(QString);
离线destiny
只看该作者 8楼 发表于: 2010-01-21
引用第6楼yangfanxing于2010-01-20 21:11发表的  :
emit emit_date(date);
检查下这个date的QString值确实是有效的吗?
————————————————————
不然稍微多点儿code也好说啊~


恩恩,多添加代码了。
快速回复
限100 字节
 
上一个 下一个