• 5694阅读
  • 15回复

[提问]关于qt多窗体通信的问题,大神们帮帮忙吧?新手跪谢了! [复制链接]

上一主题 下一主题
离线sunnyll
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-07
回复本帖可获得10RMB金钱奖励!
每人最多可获奖1次,奖池剩余20RMB金钱 (中奖几率10%)
我现在做一个QT工程,一个对话框display上有3个按钮,点击这几个按钮中的一个都会弹出search对话框。点击不同的按钮时,就会弹出B对话框并在上边的tablewidget上显示不同的内容,基本内容已写好,我用信号与槽关联这两个窗口,可是点击按钮,弹出对话框什么都不显示。具体是这样做的:
display窗口的按钮中发射信号,在弹出的search窗口中接收。
1、可能我的信号与槽机制没有掌握好,求教大神们帮帮忙?
2、这种想法不对?大神们可否赐教?
代码如下:
//////////////display.h//////////

#ifndef DISPLAY_H
#define DISPLAY_H
#include"search.h"
#include <QWidget>


namespace Ui {
class display;
}

class display : public QWidget
{
    Q_OBJECT
signals:
   void send_signal_0(int);
   void send_signal_1(int);
   void send_signal_2(int);


public:
    explicit display(QWidget *parent = 0);
    ~display();

private:
    Ui::display *ui;
    Search *searchServer;      




private slots:
    void on_pushButton_0_clicked();

    void on_pushButton_1_clicked();

    void on_pushButton_2_clicked();

};

#endif // DISPLAY_H
///////////////////end////////////////////////////




////////////////display.cpp///////////////////

#include "display.h"
#include "ui_display.h"



display::display(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::display)
{
    ui->setupUi(this);
    //主程序退出,子窗口同时关闭,Qt::WA_QuitOnClose属性是使窗口如果是最后一个关闭的时候触发事件lastWindowClosed(),默认true
    this->setAttribute(Qt::WA_QuitOnClose,false);


}

display::~display()
{
    delete ui;
}

void display::on_searchServer_0_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page0"));
    int value=0;
    emit send_signal_0(value);

}

void display::on_searchServer_1_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page1"));
    int value=1;
    emit send_signal_1(value);

}

void display::on_searchServer_2_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page2"));
    int value=2;
    emit send_signal_2(value);
}
//////////////////////end/////////////////



///////////////////search.h//////////

#ifndef SEARCH_H
#define SEARCH_H
#include <QWidget>
#include "QTableWidget"
#include "QTableWidgetItem"


namespace Ui {
class Search;
}

class Search : public QWidget
{
    Q_OBJECT

public:
    explicit Search(QWidget *parent = 0);
    ~Search();

    int get_num;


public slots:

private slots:
    void receive_signal_value(int value);


private:
    Ui::Search *ui;

};

#endif // SEARCH_H
///////////end///////////////////


///////////////search.cpp/////////////////

#include "search.h"
#include "ui_search.h"
#include<QHeaderView>
#include<QTableWidget>
#include <stdio.h>
////////////////////////
#include "display.h"
//#include "ui_display.h"



Search::Search(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Search)
{
    ui->setupUi(this);
    this->setAttribute(Qt::WA_QuitOnClose,false);//主窗口退出,子窗口退出
    this->setWindowFlags(Qt::Window&Qt::WindowMaximizeButtonHint&Qt::WindowMinimizeButtonHint);
    ui->search_tableWidget->setColumnWidth(0,130);



    display *dlg=new display;
    connect(dlg,SIGNAL(send_signal_0(int)),this,SLOT(receive_signal_value(int)));
    connect(dlg,SIGNAL(send_signal_1(int)),this,SLOT(receive_signal_value(int)));
    connect(dlg,SIGNAL(send_signal_2(int)),this,SLOT(receive_signal_value(int)));
}

Search::~Search()
{
    delete ui;

}



void Search::receive_signal_value(int value)
{
    get_num=value;
    if (get_num==0)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第一"));

    }
    if (get_num==1)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第二"));

    }
    if (get_num==2)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第三"));

    }

}

////////////end//////////////











离线sunnyll

只看该作者 1楼 发表于: 2014-07-07
急啊
离线bingyifeng

只看该作者 2楼 发表于: 2014-07-07
你工程代码发我下,
我调试下 看看吧。
QQ : 2849946824
<span style="color:blue ">淘宝,绿石斋</span> <a href="http://shop33295817.taobao.com“> <span style="color:blue ">各种水晶饰品,手链,项链 </span></a>
离线sunnyll

只看该作者 3楼 发表于: 2014-07-07
回 bingyifeng 的帖子
bingyifeng:你工程代码发我下,
我调试下 看看吧。
QQ : 2849946824  (2014-07-07 18:15) 

您好!我把代码发到您的qq邮箱了,谢谢!
untitled.zip
离线spark253649

只看该作者 4楼 发表于: 2014-07-07
你那个display里面的那三个槽什么时候起作用了,你的button应该click一下然后触发槽吧
业精于勤荒于嬉!
离线sunnyll

只看该作者 5楼 发表于: 2014-07-07
回 spark253649 的帖子
spark253649:你那个display里面的那三个槽什么时候起作用了,你的button应该click一下然后触发槽吧 (2014-07-07 19:54) 

新手,不懂,您能说的详细一些吗?
离线spark253649

只看该作者 6楼 发表于: 2014-07-07
我是说,你的那三个发射信号的槽是怎么起作用的,至少贴上来的代码里没看见,还是你写在别处了,还是设计师生成了, 一般不是这样嘛,connect( buttonPtr, SIGNAL( clicked() ),  xxxPtr, SLOT( on_searchServer_0_clicked() )  );如果不是这个问题,那就需要给个工程 spark25364964@126.com
业精于勤荒于嬉!
离线sunnyll

只看该作者 7楼 发表于: 2014-07-07
回 spark253649 的帖子
spark253649:我是说,你的那三个发射信号的槽是怎么起作用的,至少贴上来的代码里没看见,还是你写在别处了,还是设计师生成了, 一般不是这样嘛,connect( buttonPtr, SIGNAL( clicked() ),  xxxPtr, SLOT( on_searchServer_0_clicked() )  );如果不是这个问题,那就需要 .. (2014-07-07 20:09) 

您好,代码发了,谢谢了
离线spark253649

只看该作者 8楼 发表于: 2014-07-07
void Dialog::on_pushButton_0_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page0"));

    connect(this,SIGNAL(send_signal_0(int)),searchServer,SLOT(receive_signal_value(int)));

    int value=0;
    emit send_signal_0(value);

}

void Dialog::on_pushButton_1_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page1"));

    connect(this,SIGNAL(send_signal_1(int)),searchServer,SLOT(receive_signal_value(int)));
    int value=1;
    emit send_signal_1(value);

}

void Dialog::on_pushButton_2_clicked()
{
    searchServer=new Search();
    searchServer->show();
    searchServer->setWindowTitle(tr("page2"));

    connect(this,SIGNAL(send_signal_2(int)),searchServer,SLOT(receive_signal_value(int)));
    int value=2;
    emit send_signal_2(value);
}
业精于勤荒于嬉!
离线spark253649

只看该作者 9楼 发表于: 2014-07-07
感觉你这个有点混乱,不过按你的意思照上面改就可以了
1条评分金钱+10
sunnyll 金钱 +10 谢谢! 2014-07-07
业精于勤荒于嬉!
离线spark253649

只看该作者 10楼 发表于: 2014-07-07
你在search里面关联的那个dlg一直没出现过,所以他不起作用

1条评分金钱+10
sunnyll 金钱 +10 解决了问题,赞 2014-07-07
业精于勤荒于嬉!
离线sunnyll

只看该作者 11楼 发表于: 2014-07-07
回 spark253649 的帖子
spark253649:你在search里面关联的那个dlg一直没出现过,所以他不起作用
[图片]
 (2014-07-07 20:33) 

我照着把那三句加了,还是没显示文字,您发的那个工程我看了,怎么您改的可以呢?
离线sunnyll

只看该作者 12楼 发表于: 2014-07-07
回 spark253649 的帖子
spark253649:你在search里面关联的那个dlg一直没出现过,所以他不起作用
[图片]
 (2014-07-07 20:33) 

谢谢,好了。
离线sunnyll

只看该作者 13楼 发表于: 2014-07-07
解决了问题,赞
离线sunnyll

只看该作者 14楼 发表于: 2014-07-07
谢谢大家了,问题已解决。  
离线macran

只看该作者 15楼 发表于: 2015-05-10
xuexi xuexi
快速回复
限100 字节
 
上一个 下一个