MoYyu0.0 2021-05-11 10:13 采纳率: 40%
浏览 92
已采纳

QT5如何实现跨界面输出

在QT5中建立一个Widget1,并在Widget1里加上两个输入数据的lineedit控件和一个“开始”pushbutton控件。

另外添加一个Widget2,在Widget2里放置一个TextBrowser。

想要实现在Widget1中输入数据,点击开始按钮后弹出Widget2并在Widget2中输出前两个数据的加和

在这里我碰到程序异常结束的问题,

  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-05-11 10:46
    关注

    用信号和槽函数即可实现,代码如下,如有帮助,请cain采纳,谢谢。

    widget1的.h中添加如下内容:
    
    signals:
        void sigCaculate(double,double);  //定义信号
    
     
    private slots:
        void on_pushButton_clicked();  //按钮按下
    
    //widget1.cpp中:
    
    void Widget1::on_pushButton_clicked()
    {
        double v1 = ui->lineEdit->text().toDouble();
        double v2 = ui->lineEdit_2->text().toDouble();
        emit sigCaculate(v1,v2);//发送计算信号
    }
    //-----------------------------
    //widget2的.h文件中添加一个public函数:
    
    void SetValue(QString value); //设置计算结果
    //在.cpp中实现ruxi如下:
    
    void Widget2::SetValue(QString value)
    {
        ui->textBrowser->setText(value);//在控件中输入值
    }
    
    
    //在调用widget1和widget2的类中,tian添加如下内容:
    
    //比如mainwindow.h中:
    
    #include <widget1.h>
    #include <widget2.h>
     
    namespace Ui {
    class MainWindow;
    }
    
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void slotCaculate(double v1,double v2);
    
     
    private:
        Ui::MainWindow *ui;
        Widget1* m_widget1;
        Widget2* m_widget2;
    };
    
    //在mainwindow.cpp文件中
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
     
        m_widget1 = new Widget1(this);
        m_widget2 = new Widget2(this);
        //绑定信号
        connect(m_widget1,SIGNAL(sigCaculate(double,double)),this,SLOT(slotCaculate(double,double)));
    
     
    }
    
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    //计算结果,并输出到widget2的控件中
    void MainWindow::slotCaculate(double v1, double v2)
    {
        double v = v1 + v2;
        if(m_widget2)
            m_widget2->SetValue(QString::number(v));
    }
    
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作