将值从主窗口更新到对话框
updating value from mainwindow to dialog
我有一个主窗口,它每秒在 "numbers" 中生成随机整数,我有一个打开新对话框的按钮。在该对话框中有一个按钮 "Get Number" 和一个 qlabel。如果我按 "Get Number",我希望将主窗口中当前生成的数字设置为对话框标签文本。我试图在主窗口 class 中编写一个成员函数 returns 实际值,但我无法从对话框中调用它,我认为这是错误的方法。如何将当前生成的 int "numbers" 放入对话框中?我的明码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void generateNumbers();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(generateNumbers()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
Dialog dialog;
dialog.setModal(true);
dialog.exec();
}
void MainWindow::generateNumbers()
{
int numbers = qrand() % 100;
qDebug() << numbers;
}
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;
}
在mainwindow.h,添加一个信号:
signals:
void update_number(int);
在 mainwindow.cpp,每次生成新数字时都会发出该信号:
void MainWindow::generateNumbers()
{
int numbers = qrand() % 100;
emit update_number(numbers); // signals that a new number has been generated
qDebug() << numbers;
}
你的 on_pushButton_clicked()
应该是这样的:
void MainWindow::on_pushButton_clicked()
{
Dialog dialog(this); // main window as the parent of dialog
dialog.setModal(true);
dialog.exec();
}
在 dialog.h 上,添加名为 number_
的属性并添加以下插槽:
public slots:
void on_update_number(int number); // updates the number_
private:
int number_; // it will be updated with the most recent number
Ui::Dialog *ui;
On dialog.cpp,将信号连接到插槽:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
connect(parent, SIGNAL(update_number(int)), this, SLOT(on_update_number(int)));
}
添加插槽代码:
void Dialog::on_update_number(int number)
{
number_ = number;
}
最后,当用户点击对话框中的按钮"Get Number"时,设置标签文本:
void Dialog::on_pushButton_clicked()
{
ui->label->setText(QString::number(number_));
}
有关信号与槽的更多信息,请转至 here。
我有一个主窗口,它每秒在 "numbers" 中生成随机整数,我有一个打开新对话框的按钮。在该对话框中有一个按钮 "Get Number" 和一个 qlabel。如果我按 "Get Number",我希望将主窗口中当前生成的数字设置为对话框标签文本。我试图在主窗口 class 中编写一个成员函数 returns 实际值,但我无法从对话框中调用它,我认为这是错误的方法。如何将当前生成的 int "numbers" 放入对话框中?我的明码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void generateNumbers();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(generateNumbers()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
Dialog dialog;
dialog.setModal(true);
dialog.exec();
}
void MainWindow::generateNumbers()
{
int numbers = qrand() % 100;
qDebug() << numbers;
}
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;
}
在mainwindow.h,添加一个信号:
signals:
void update_number(int);
在 mainwindow.cpp,每次生成新数字时都会发出该信号:
void MainWindow::generateNumbers()
{
int numbers = qrand() % 100;
emit update_number(numbers); // signals that a new number has been generated
qDebug() << numbers;
}
你的 on_pushButton_clicked()
应该是这样的:
void MainWindow::on_pushButton_clicked()
{
Dialog dialog(this); // main window as the parent of dialog
dialog.setModal(true);
dialog.exec();
}
在 dialog.h 上,添加名为 number_
的属性并添加以下插槽:
public slots:
void on_update_number(int number); // updates the number_
private:
int number_; // it will be updated with the most recent number
Ui::Dialog *ui;
On dialog.cpp,将信号连接到插槽:
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
connect(parent, SIGNAL(update_number(int)), this, SLOT(on_update_number(int)));
}
添加插槽代码:
void Dialog::on_update_number(int number)
{
number_ = number;
}
最后,当用户点击对话框中的按钮"Get Number"时,设置标签文本:
void Dialog::on_pushButton_clicked()
{
ui->label->setText(QString::number(number_));
}
有关信号与槽的更多信息,请转至 here。