Qt开发技术:QCharts(一)QCharts基本介绍以及图表框架详解
QT – QChart的几种 坐标轴 的详细介绍及使用代码示例
//setUserData()和userData()
//通过setUserData(),我们可以存储用户数据。
//注意:用户数据需要被定义为QObjectUserData类型。
struct SenderInfo:public QObjectUserData
{
QString strName;
}
QPushButton *pButton = new QPushButton(this);
pButton->setText("Sender1");
// 用户数据
SenderInfo* pInfo = new SenderInfo;
pInfo->strName="Sender1";
pButton->setUserData(Qt::UserRole, pInfo ); // 设置用户数据
// 连接信号槽
connect(pButton, &QPushButton::clicked, this, &MainWindow::onClicked);
槽函数,获取用户数据,执行相应操作。
void onClicked() {
// 获取发送者
QObject *pObject = this->sender();
QPushButton *pButton = qobject_cast<QPushButton *>(pObject);
// 获取用户数据
SenderInfo* pInfo = (SenderInfo*)(pButton->userData(Qt::UserRole));
qDebug() << "sender: " <<pInfo->strtName;
}
通过userData()可以获取QObjectUserData数据,然后转换成我们需要的类型User。
//效率较高的往折线图中插入数据
_pLineSeries = new QLineSeries;
_pLineSeries2 = new QLineSeries;
_pLineSeries3 = new QLineSeries;
_pLineSeries4 = new QLineSeries;
QList<QLineSeries *> listLine;
listLine.append(_pLineSeries);
listLine.append(_pLineSeries2);
listLine.append(_pLineSeries3);
listLine.append(_pLineSeries4);
for(int index = 1; index < 4; index++)
{
QList<QPointF> listPointF;
for(int index = 0; index < 11; index++)
{
listPointF << QPointF(index, qrand()%11);
}
listLine.at(index)->append(listPointF);
listLine.at(index)->setName(QString("通道%1").arg(index+1));
listLine.at(index)->setPen(QPen(QColor(qrand()%256, qrand()%256, qrand()%256), 2));
listLine.at(index)->setUseOpenGL(true);//opengl显示加速,奔奔马上变奔驰
// 通用:将批量数据插入到图表中
_pChart->addSeries(listLine.at(index));
}
Qt 让QLabel自适应text的大小,并且自动换行
在实现了newform的2个页面的功能以后,为了完善产品的人性化,我在第2个页面上增加了一个显示前面已经选择的路径和模板名称的功能。但是这里就遇到了一个问题,如果万一用户选择的路径和名称都太长了,那么下面在显示的时候就会截断,这就很不爽了。
别看这个小问题,这就涉及了2个技巧。
1
让QLabel自适应text的大小,直接用下面的代码:
LabelName->adjustSize();
LabelName->setText(“1234”+"\r\n"+“456789”);//两行显示
LabelName->LabelName->setAlignment(Qt::AlignCenter);//垂直水平居中
让QLabel能够自动判断并换行显示:
LabelName->setGeometry(QRect(328, 240, 329, 27*4)); //四倍行距
LabelName->setWordWrap(true);
LabelName->setAlignment(Qt::AlignTop);
设置QLabel文本的颜色
第一种,使用setPalette()方法如下:
QLabel *label = new QLabel(tr("Hello Qt!"));
QPalette pe;
pe.setColor(QPalette::WindowText,Qt::white);
pe.setColor(QPalette::Background, Q::yellow);
label->setAutoFillBackground(true); //这句很关键,否则背景色被默认windows替代
label->setPalette(pe);
第二种,使用样式表如下:
setStyleSheet("color:red;");
//setStyleSheet("color:#ff6600;");
第三种,使用QStyle,在Qt Demo中有一个很好的讲解QStyle的例子,可以参考学习。
第四种,使用一些简单的HTML格式:
QLabel *label = new QLabel("<h2><i>Hello</i><font color=red>Qt!</font></h2>");
往QChart中显示折线图,需要注意的:
首先是画两条折线(限制线)的代码
其次,是第一种为上面画的两条折线添加并关联坐标轴【一定要注意将上面画的两条折线关联到X/Y轴上,否则画的东西跟坐标轴上显示的数据毫无关联】
第二种为上面画的两条折线,添加显示,这种方法可取,只用设置一次,不用为关联到这上面的所有折线都attachAxis,一劳永逸
推荐使用第二种方法
最后,整个效果如下,完美
**
listLine.at(index)->setUseOpenGL(true);//opengl显示加速,奔奔马上变奔驰
**