c++ - 将值从主窗口更新到对话框

标签 c++ qt dialog qmainwindow

我有一个主窗口,每秒在“数字”中生成随机整数,我有一个打开新对话框的按钮。在那个对话框中有一个按钮“Get Number”和一个 qlabel。如果我按“获取号码”,我希望将主窗口中当前生成的号码设置为对话框标签文本。我试图在主窗口类中编写一个返回实际值的成员函数,但我无法从对话框中调用它,我认为这是错误的方法。如何将当前生成的 int “数字”放入对话框中?我的纯代码:

主窗口.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

主窗口.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;
}

对话框.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

对话框.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;
}

最佳答案

ma​​inwindow.h上,添加一个信号:

signals:
    void update_number(int);

ma​​inwindow.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;

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 .

关于c++ - 将值从主窗口更新到对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885158/

相关文章:

c++ - cpp 单元设置和拆卸功能

c++ - 调整窗口大小无法正常工作 MFC

c++ - 有哪些方法可以让主线程等待所有工作线程完成?

c++ - 将 QImage 保存到 QBuffer

c++ - 没有语法错误但没有打印结果

qt - Qt Creator 构建和运行设置存储在哪里?

qt - 修复布局的大小

java - 在同一个 Activity 中实现两个 TimePickers

c# - 在 C# 中寻找优雅的 "Dont Show Me This Dialog Again"对话框

mfc - 如何使用 MFC 对对话框进行多行 radio 控制