http://www.chengxuyuans.com/Linux/63568.html
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构造函数中加入:
<pre name="code" style="margin-top: 10px; margin-bottom: 10px; padding: 10px 5px; border: 1px dotted rgb(119, 136, 85); white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background: rgb(245, 245, 245);">QObject::connect(this,&test::<span id="2_nwp" style="width: auto; height: auto; float: none;"><a target=_blank id="2_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Echengxuyuans%2Ecom%2FLinux%2F63568%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3_hc&q=72008038_cpr&k=open&k0=open&k1=%B4%E6%B4%A2&k2=%C3%FC%C3%FB&k3=%C9%F9%C3%F7&k4=%D6%D0%B7%A2&k5=%BB%E6%CD%BC&sid=7eb4ad242000934f&ch=0&tu=u1843687&jk=cb6d4fc946cffce6&cf=29&fv=15&stid=9&urlid=0&luki=5&seller_id=1&di=128" target="_blank" mpid="2" style="text-decoration: none; color: rgb(26, 100, 162);"><span style="color: rgb(0, 0, 255); width: auto; height: auto;">open</span></a></span>FileNow,ui->paint,&waveform::startpaint);
参数1:发送者,参数2:发送的信号,参数3:接收者,参数4:接收的槽
由此完成在QMainWindow中发送信号,由另一个Widget类绘图并显示到QMainWindow的Widget控件中的功能