zoukankan      html  css  js  c++  java
  • 信号槽操作案例

    场景:在应用主界面,点击"按钮",弹出用户登陆对话框,用户输入用户名点击登陆,在主界面显示用户输入的用户名.

    1:新建Qt Widgets Application,名称:signal-t02

    2:在主应用界面(mainwindow.ui)增加一个Label与PushButton,objectName分别为:unameLabel与showLoginDialogBtn.

    3:  增加一个Qt设计师界面类->Dialog without Buttons (类名ShowLoginDialog)

    在对话框中增加:LineEdit(unameEdit)与PushButton(loginBtn)

    4:mainwindow.ui

    右键"Show Login Dialog Button",转到槽选择clicked,
    mainwindow.cpp代码如下:
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "showlogindialog.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    //Show Login Dialog
    void MainWindow::on_showLoginDialogBtn_clicked()
    {
        ShowLoginDialog * dlg = new ShowLoginDialog(this);
        
        dlg->show();
    }
    
    //Show username
    void MainWindow::showUsername(QVariant str)
    {
        ui->unameLabel->setText(str.toString());
    }

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QVariant>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_showLoginDialogBtn_clicked();
        void showUsername(QVariant str);    //show username
        
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    此时运行程序,点击"Show Login Dialog Button"将弹出登陆信息输入对话框.

    5:

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QVariant>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        void on_showLoginDialogBtn_clicked();
        void showUsername(QVariant str);    //show username
    
    private:
        Ui::MainWindow *ui;
    };
    
    #endif // MAINWINDOW_H
    mainwindow.cpp
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "showlogindialog.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    //Show Login Dialog
    void MainWindow::on_showLoginDialogBtn_clicked()
    {
        ShowLoginDialog * dlg = new ShowLoginDialog(this);
    
        connect(dlg,&ShowLoginDialog::unameEditChanged,this,&MainWindow::showUsername);
    
        dlg->show();
    }
    
    //Show username
    void MainWindow::showUsername(QVariant str)
    {
        ui->unameLabel->setText(str.toString());
    }
    showlogindialog.h

    #ifndef SHOWLOGINDIALOG_H
    #define SHOWLOGINDIALOG_H
    
    #include <QDialog>
    
    namespace Ui {
    class ShowLoginDialog;
    }
    
    class ShowLoginDialog : public QDialog
    {
        Q_OBJECT
    
    public:
        explicit ShowLoginDialog(QWidget *parent = 0);
        ~ShowLoginDialog();
    
    private slots:
        void on_loginBtn_clicked();
    
        //定义信号
        signals:
            void unameEditChanged(QString str);
    
    private:
        Ui::ShowLoginDialog *ui;
    };
    
    #endif // SHOWLOGINDIALOG_H
    showlogindialog.cpp
    #include "showlogindialog.h"
    #include "ui_showlogindialog.h"
    
    ShowLoginDialog::ShowLoginDialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::ShowLoginDialog)
    {
        ui->setupUi(this);
    }
    
    ShowLoginDialog::~ShowLoginDialog()
    {
        delete ui;
    }
    
    //show login dialog
    void ShowLoginDialog::on_loginBtn_clicked()
    {
        QString str = ui->unameEdit->text();
    
        emit unameEditChanged(str);
    
        accept();
    }
    
    
    
  • 相关阅读:
    【java 自动化测试】TestNg 介绍
    【java 自动化测试】第14章:持续集成
    【java 自动化】15章节:课程总结
    【性能测试】看了一个博客,总结一下
    【Dubbo】Dubbo 接口是什么? 与http 接口有什么区别?
    【jmeter】性能测试报告分析
    Netty 相关目录
    Netty 源码学习——EventLoop
    Netty 源码分析——ChannelPipeline
    Netty 源码学习——服务端流程分析
  • 原文地址:https://www.cnblogs.com/yshyee/p/4750505.html
Copyright © 2011-2022 走看看