MoYyu0.0
2021-05-11 10:13
采纳率: 66.7%
浏览 49

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));
    }
    
     
    
    已采纳该答案
    1 打赏 评论
  • 有问必答小助手 2021-05-11 14:35

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论
  • 有问必答小助手 2021-05-11 17:02

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    打赏 评论

相关推荐 更多相似问题