Abstract:
1,“动态创建”
2,封装qwt的Plot类
3,拖拽
4,Plot类型转换
一、功能描述
假设有一个信号分析的软件工程,在它的主窗口mainwindow上,左侧是一个测试项列表(QListWidget),右侧是四个图形窗口(Plot or QTableWidget)用于观察测试项的图形结果。现在要实现的功能是:通过拖拽右侧测试项列表中任一项到右侧的任一窗口,即可在该窗口观察对应的测试项图形结果,且这个图形结果有多种形式,如曲线图(PlotCurve)、光栅图(PlotRaster)和表格(
QTableWidget
)等,具体是哪种形式由具体的测试项决定。
二、功能分解实现
1,UI布局
通过Qt Designer,在左侧布一个
QListWidget,右侧布一个QFrame。然后将
QListWidget提升为CustomListWidget,使它支持拖拽功能(参考《C++ GUI Qt4》第9章“拖拽”的第一个例子),主要是重写函数
mousePressEvent
()和
mouseMoveEvent()。再然后
将右侧
QFrame提升为QuadSplitter(参考我的博文:
QuadSplitter
)
。最后就是用四个QWidget填充QuadSplitter。具体如下:
在mianwindow.h中定义:
static const int s_iWidgetsNumber = 4; // 右侧显示区的图表数量
QWidget * m_pShowWidgets[2][2]; // 右侧显示区的四幅图或表
实现:
void MainWindow::CreateCharts()
{
for (int i = 0; i <<span style=" color:#c0c0c0;"> s_iWidgetsNumber; i++)
{
// 创图表
m_pShowWidgets[i/2][i%2] = new Plot;
ui->frameDisplay->addWidget(