【问题标题】:Qt Passing variables between unrelated objectsQt 在不相关的对象之间传递变量
【发布时间】:2012-07-04 18:30:23
【问题描述】:

我目前正在学习 Qt,但我似乎遇到了问题。 在我的实践项目中,我有 2 个类:MainWindow 和 Dialog。

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButtonDialog_clicked();

private:
    Ui::MainWindow *ui;
    Dialog *dialogInstance;

};

#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    dialogInstance = new Dialog(this);
}

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

void MainWindow::on_pushButtonDialog_clicked()
{
    dialogInstance->show();
}

Dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

Dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

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

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

我的目标是使用 Dialog 窗口输入一个值,然后在 MainWindow 上显示该输入的值,我知道如何使用小部件在类中传递变量,但我不确定如何在不相关的对象。

任何意见都会有很大帮助。

【问题讨论】:

  • 您可以将一个类中的小部件中的signals 连接到其他对象/其他对象的小部件中的slots...您实际遇到的问题是什么?
  • Dialog 类是否必须拥有自己的 MainWindow 对象才能使用信号和插槽?
  • 没有。 connect 来自对话框的信号到MainWindow 中的slot
  • @user1502207 您忘记将 SIGNAL(clicked) 从您的按钮连接到相应的插槽 (on_pushButtonDialog_clicked)。所以插槽永远不会被调用。避免使用表单设计器向您的 GUI 添加功能。
  • @sorush-r 嘿,感谢您的回复,我的问题是 Dialog 没有 MainWindow 对象。

标签: c++ qt class variables object


【解决方案1】:

试试这个:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButtonDialog, SIGNAL(clicked()), this, SLOT(on_pushButtonDialog_clicked()));
    dialogInstance = new Dialog(this);
}
// ...

【讨论】:

  • 这不是他的问题。他的问题是如何解析 Dialog 和 MainWindow 之间的变量。
  • 在您的示例中,您根本没有解析变量,您只是将信号连接到插槽。答案是可以使用 f.e. 简单地解析变量。 (最后一行)QDialog* about = new QDialog(0,0); settingsUi.setupUi(about); settingsUi.spinBoxMin-&gt;setValue(absMin);
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 2015-03-24
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
相关资源
最近更新 更多