• 7336阅读
  • 20回复

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

上一主题 下一主题
离线sunnyll
 

只看楼主 倒序阅读 楼主  发表于: 2014-07-05
我现在做一个QT工程,一个对话框A上有5个按钮,点击这几个按钮中的一个都会弹出B对话框。点击不同的按钮时,就会弹出B对话框并在上边的tablewidget上显示不同的内容,基本内容已写好,我用信号与槽关联这两个窗口,可是点击按钮,弹出对话框什么都不显示。具体是这样做的:
A窗口的按钮中发射信号,在弹出的B窗口中接收。
1、可能我的信号与槽机制没有掌握好,求教大神们帮帮忙?
2、这种想法不对?大神们可否赐教?
离线ashe0817

只看该作者 1楼 发表于: 2014-07-05
无~~~~码无真相
离线sunnyll

只看该作者 2楼 发表于: 2014-07-05
回 ashe0817 的帖子
ashe0817:无~~~~码无真相 (2014-07-05 16:41) 

代码太长,
离线sunnyll

只看该作者 3楼 发表于: 2014-07-05
求大神回复!
离线zerogex

只看该作者 4楼 发表于: 2014-07-05
打开控制台看看输出,最常见的原因是1、拼写有没有错?2、有没有加Q_OBJECT?

你想请别人帮你解决问题,好歹你得提供可以判断问题的有效信息吧?不然别说大神,就是大大神也没办法啊。
离线spark253649

只看该作者 5楼 发表于: 2014-07-05
传来代码看看
业精于勤荒于嬉!
离线彩阳

只看该作者 6楼 发表于: 2014-07-05
打开对话框的代码要这么写:
TheDialog theDialog;
theDialog.exec( );

或者
TheDialog* pTheDialog = new TheDialog( pParentWidget );
pTheDialog->setAttribute( Qt::WA_DeleteOnClose );
pTheDialog->show( );
上海Qt开发联盟,热忱地欢迎你的加入!
离线sunnyll

只看该作者 7楼 发表于: 2014-07-06
回 zerogex 的帖子
zerogex:打开控制台看看输出,最常见的原因是1、拼写有没有错?2、有没有加Q_OBJECT?
你想请别人帮你解决问题,好歹你得提供可以判断问题的有效信息吧?不然别说大神,就是大大神也没办法啊。 (2014-07-05 17:50) 

嗯,好的 整理一下就上传。
离线sunnyll

只看该作者 8楼 发表于: 2014-07-07
回 spark253649 的帖子
spark253649:传来代码看看 (2014-07-05 21:32)


//////////////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_searchServer_0_clicked();

    void on_searchServer_1_clicked();

    void on_searchServer_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 (fu_num==0)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第一"));

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

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

    }

}

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







离线sunnyll

只看该作者 9楼 发表于: 2014-07-07
回 zerogex 的帖子
zerogex:打开控制台看看输出,最常见的原因是1、拼写有没有错?2、有没有加Q_OBJECT?
你想请别人帮你解决问题,好歹你得提供可以判断问题的有效信息吧?不然别说大神,就是大大神也没办法啊。 (2014-07-05 17:50)


//////////////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_searchServer_0_clicked();

    void on_searchServer_1_clicked();

    void on_searchServer_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 (fu_num==0)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第一"));

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

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

    }

}

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







离线sunnyll

只看该作者 10楼 发表于: 2014-07-07
回 ashe0817 的帖子
ashe0817:无~~~~码无真相 (2014-07-05 16:41)


//////////////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_searchServer_0_clicked();

    void on_searchServer_1_clicked();

    void on_searchServer_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 (fu_num==0)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第一"));

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

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

    }

}

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







离线sunnyll

只看该作者 11楼 发表于: 2014-07-07
代码已上传,求大神现身,帮忙看看。
离线sunnyll

只看该作者 12楼 发表于: 2014-07-07
回 彩阳 的帖子
彩阳:打开对话框的代码要这么写:
TheDialog theDialog;
theDialog.exec( );
或者
....... (2014-07-05 23:18)


//////////////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_searchServer_0_clicked();

    void on_searchServer_1_clicked();

    void on_searchServer_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 (fu_num==0)
    {
        ui->search_tableWidget->setItem(0,0,new QTableWidgetItem("第一"));

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

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

    }

}

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







离线彩阳

只看该作者 13楼 发表于: 2014-07-07
麻烦按照我给你的方法打开display 对话框吧。
上海Qt开发联盟,热忱地欢迎你的加入!
离线sunnyll

只看该作者 14楼 发表于: 2014-07-07
回 彩阳 的帖子
彩阳:麻烦按照我给你的方法打开display 对话框吧。 (2014-07-07 11:49) 

您说的是search吧,我的search是点击按钮弹出的对话框。
离线sunnyll

只看该作者 15楼 发表于: 2014-07-07
回 彩阳 的帖子
彩阳:麻烦按照我给你的方法打开display 对话框吧。 (2014-07-07 11:49) 

我照您说的改了,依然是弹出的对话框中的tablewidget中不显示内容
离线彩阳

只看该作者 16楼 发表于: 2014-07-07
原来你是说tabWidget不显示啊。那么尝试将tabWidget换成其它的widget看看能否显示?
然后你这个是在Designer中布局的吗?可以在Designer中将tabWidget替换成其它的控件试试看能不能显示。然后再模仿Qt的tab dialog example那一个例子进行修改。
上海Qt开发联盟,热忱地欢迎你的加入!
离线sunnyll

只看该作者 17楼 发表于: 2014-07-07
回 彩阳 的帖子
彩阳:原来你是说tabWidget不显示啊。那么尝试将tabWidget换成其它的widget看看能否显示?
然后你这个是在Designer中布局的吗?可以在Designer中将tabWidget替换成其它的控件试试看能不能显示。然后再模仿Qt的tab dialog example那一个例子进行修改。
[图片] (2014-07-07 16:49) 

不是,是我发的那段代码,tablewidget中内容不显示,就是我代码中的“第一”“第二”“第三”
离线彩阳

只看该作者 18楼 发表于: 2014-07-07
回 sunnyll 的帖子
sunnyll:不是,是我发的那段代码,tablewidget中内容不显示,就是我代码中的“第一”“第二”“第三” (2014-07-07 16:56) 

看那个例子,照抄过去就好了。
上海Qt开发联盟,热忱地欢迎你的加入!
离线bingyifeng

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

只看该作者 20楼 发表于: 2014-07-07
谢谢大家了,问题已解决。
快速回复
限100 字节
 
上一个 下一个