zoukankan      html  css  js  c++  java
  • 控件信号Qt 在控件中绘图

    首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

        任务:建立了一个基于QMainWindow的项目,在其中加入Widget 控件,并在控件上绘图

        1、新建项目 - 基类选择QMainWindow(类命名为test)

        2、新建Qt设计师界面类 - 界面模板选择Widget - 类命名为waveform - 生成waveform.h waveform.cpp

        3、改写Widget类(waveform.h waveform.cpp),重载绘图函数 void paintEvent(QPaintEvent*); 一个绘制wav波形的例子可见另一篇文章 http://blog.csdn.net/maverick1990/article/details/8996608

        4、在主窗口设计界面test.ui中绘制Widget控件,命名为paint

        5、右键刚才画的paint控件 - 晋升为... - 基类选择QWidget - 晋升的类名称填写waveform(头文件waveform.h)- 添加 - 晋升

        此方法便将test.ui中的paint控件和waveform类相关联,waveform的绘图就会表现到paint中

        每日一道理
    共和国迎来了她五十诞辰。五十年像一条长河,有急流也有缓流;五十年像一幅长卷,有冷色也有暖色;五十年像一首乐曲,有低音也有高音;五十年像一部史诗,有痛苦也有欢乐。长河永远奔流,画卷刚刚展开,乐曲渐趋高潮,史诗还在续写。我们的共和国正迈着坚定的步伐,跨入新时代。

        接下来实现waveform接收test中的信号,向waveform传递参数(本例中为wav文件的路径),并绘制响应图形(本例为wav波形图),并表现到test的paint中

        6、在test.h的基类中声明一个信号(信号不需定义,只要声明便可):

    signals:
    
        void openFileNow(const QString&);

        传递的参数为wav的路径

        7、在指定的发送信号函数中(比如我的是openlist的doubleclick信号)发出刚才声明的信号:

    emit openFileNow(path);

        8、在waveform中定义接受信号的槽:

        (1)在waveform.h中声明槽,参数需和刚才声明的信号参数一致:

    public slots:
        void startpaint(const QString&);

        
    (2)在waveform.cpp中定义槽,重绘waveform:

    void waveform::startpaint(const QString& path)
    {
        m_Filename = path;
        this->repaint();
    }

        
    m_Filename为waveform的成员变量,存储wav路径

        9、关联信号和槽:

        在test.cpp构造函数中加入:

    QObject::connect(this,&test::openFileNow,ui->paint,&waveform::startpaint);

        参数1:发送者,参数2:发送的信号,参数3:接收者,参数4:接收的槽

        由此实现在QMainWindow中发送信号,由另一个Widget类绘图并表现到QMainWindow的Widget控件中的功能

    文章结束给大家分享下程序员的一些笑话语录: 神灯新篇
    一个程序员在海滩上发现了一盏神灯。他在灯上擦了几下,一个妖怪就从灯里跳出来说:“我是世界上法术最强的妖怪。我可以实现你的任何梦想,但现在,我只能满足你一个愿望。”程序员摊开了一幅中东地图说:“我想让中东得到永久的和平。”妖怪答道:“哦,我没办法。自打创世纪以来,那里的战火就没有停息过。这世上几乎没有我办不到的事,但这件事除外。”程序员于是说:“好吧,我是一个程序员,为许多用户编写过程序。你能让他们把需求表述得更清楚些,并且让我们的软件项目有那么一两次按进度按成本完成吗?”妖怪说:“唔,我们还是来看中东地图吧。”

    --------------------------------- 原创文章 By
    控件和信号
    ---------------------------------

  • 相关阅读:
    Codeforces 754A Lesha and array splitting (搜索)
    浅入分析Linux
    MakeFile基本使用
    Mac 安装YCM
    Homebrew 配置
    虚拟机复制操作CentOS6导致eth0转为eth0以至于网络服务启动失败的解决方案
    Kickstart安装
    Linux编译安装MySQL
    Python源码读后小结
    编译原理小结
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3111219.html
Copyright © 2011-2022 走看看