首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt窗口传值有些疑问

2013-07-04 
Qt窗口传值有点疑问传值在这样一个场景下:一个主窗口有个一个菜单项,点击这个菜单项弹出一个对话框。想在这

Qt窗口传值有点疑问
传值在这样一个场景下:一个主窗口有个一个菜单项,点击这个菜单项弹出一个对话框。想在这个对话框中显示主窗口类的一个字符串。先不管头文件的包含问题,现在的疑问是,主窗口类的字符串成员设置为private也能够被对话框访问,这是为什么?我用的是Qt5.0, Qt creator2.6。
我的主窗口类和对话框如下编写:


namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_actionPopup_triggered();
private:
    Ui::MainWindow *ui;
    QString name;
};

下面是对应的cpp文件:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    name = "YES";
}

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

void MainWindow::on_actionPopup_triggered()
{
    Dialog myDlg(this);
    myDlg.exec();
}

对话框的代码:

namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void on_pushButton_test_clicked();
private:
    Ui::Dialog *ui;
};

对应的cpp文件:

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

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

void Dialog::on_pushButton_test_clicked()
{
    MainWindow* ptr = (MainWindow*)parentWidget();
    ui->label->setText(ptr->name);
}

编译一切正常,运行毫无压力。求解释?
[解决办法]
MainWindow* ptr = (MainWindow*)parentWidget();不是在外面定义的新对象指针。
使用(MainWindow*)parentWidget()将dialog的父类转换成MainWidndow类型,而其父类指针恰好是
MainWindow的this指针,所以你用ptr访问name和用MainWindow的this访问等同。
[解决办法]
引用:
Quote: 引用:

你这个也太耦合了吧。。

兄台有什么好的建议吗?

1.在Dialog中定义一个设置label的内容的接口如:setLabelText
2.当点击按钮时发射一个设置text的信号
3.在mainwindow中定义一个调用dialog的setLabelText接口
4.连接dialog的信号和mainwindow的槽

热点排行