• 6532阅读
  • 3回复

[提问]qt一个窗体怎样调用另一个窗体的控件 [复制链接]

上一主题 下一主题
离线ji1976
 
只看楼主 正序阅读 楼主  发表于: 2011-08-18
form1里面就一个按钮(pushButton);
form2里面有 label
当点击pushButton后在label现实图像

dialog1.h
#define DIALOG1_H

#include <QDialog>
#include "dialog2.h"


namespace Ui {
    class Dialog1;
}

class Dialog1 : public QDialog{
    Q_OBJECT
public:
    Dialog1(QWidget *parent = 0);
    ~Dialog1();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Dialog1 *uii;


};

#endif // DIALOG1_H

dialog2.h
#define DIALOG2_H

#include <QDialog>
#include "dialog1.h"
#include "ui_dialog1.h"

namespace Ui {
    class Dialog2;

}

class Dialog2 : public QDialog {
    Q_OBJECT
public:
    Dialog2(QWidget *parent = 0);
    ~Dialog2();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::Dialog2 *ui;
    Ui_Dialog1 *w2;

private slots:
    void on_pushButton_clicked();
};

#endif // DIALOG2_H

dialog1.cpp
#include "dialog1.h"
#include "ui_dialog1.h"


Dialog1::Dialog1(QWidget *parent) :
    QDialog(parent),
    uii(new Ui::Dialog1)
{
    uii->setupUi(this);
}

Dialog1::~Dialog1()
{
    delete uii;
}

void Dialog1::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        uii->retranslateUi(this);
        break;
    default:
        break;
    }
}

dialog2.cpp
#include "dialog2.h"
#include "ui_dialog2.h"
#include "ui_dialog1.h"

Dialog2::Dialog2(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog2)
{
    ui->setupUi(this);

}

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

void Dialog2::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void Dialog2::on_pushButton_clicked()
{

    w2->label_2->setText("ss");
}
当点击按钮后,会出现The program has unexpectedly finished.(程序异常结束)
问下应该怎样解决
离线ji1976
只看该作者 3楼 发表于: 2011-08-18
“直接private里面添加一个 Dialog1。
然后按钮槽里面发射一个信号,Dialog1收到信号就改变label就行了”

private:
    Ui::Dialog2 *ui;
    Ui_Dialog1 *w2;

void Dialog2::on_pushButton_clicked()
{

    w2->label_2->setText("ss");
}
我这里都加了呀!可是当点击按钮后,会出现The program has unexpectedly finished.(程序异常结束)
离线ji1976
只看该作者 2楼 发表于: 2011-08-18
回复1楼
因为ui_dialog1.h里包含着控件的信息,我这个是用qt Design直接生成的,不包含它就用不了,w2->label_2->setText("ss");这个



离线sapphirezzz
只看该作者 1楼 发表于: 2011-08-18
说得不清楚。。
以后贴代码最好不同文件之间用一行*号隔开一下。
为什么得用到changeEvent(QEvent *e)。。。

为什么 #include "ui_dialog1.h" ?
直接private里面添加一个 Dialog1。
然后按钮槽里面发射一个信号,Dialog1收到信号就改变label就行了。
快速回复
限100 字节
 
上一个 下一个