Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qwt:将日期/时间标签文本在底轴上居中对齐_C++_Label_Qwt - Fatal编程技术网

C++ Qwt:将日期/时间标签文本在底轴上居中对齐

C++ Qwt:将日期/时间标签文本在底轴上居中对齐,c++,label,qwt,C++,Label,Qwt,对于Qwt,我希望时间和日期都位于底部轴下刻度的中心,但时间仍然位于左侧,如图所示: 我试着用 QwtDateScaleDraw::setLabelAlignment(Qt::AlignHCenter|Qt::AlignBottom); 但时间仍然在左边 我尝试将QwtScaleDraw分为以下子类: class MyDateScaleDraw:public QwtDateScaleDraw { public: QwtText label(double value) const ov

对于Qwt,我希望时间和日期都位于底部轴下刻度的中心,但时间仍然位于左侧,如图所示:

我试着用

QwtDateScaleDraw::setLabelAlignment(Qt::AlignHCenter|Qt::AlignBottom);
但时间仍然在左边

我尝试将QwtScaleDraw分为以下子类:

class MyDateScaleDraw:public QwtDateScaleDraw
{
public:
    QwtText label(double value) const override
    {
        QwtText txt=QwtDateScaleDraw::label(value);
        txt.setRenderFlags(Qt::AlignHCenter);
        return txt;
    }
};
但时间仍然在左边

有人知道如何集中时间吗

更新:

我在Qwt的源代码中发现:

const QwtText &QwtAbstractScaleDraw::tickLabel(const QFont &font, double value ) const
{
    QMap<double, QwtText>::const_iterator it = d_data->labelCache.find( value );
    if ( it == d_data->labelCache.end() )
    {
        QwtText lbl = label( value );
        lbl.setRenderFlags( 0 );
        lbl.setLayoutAttribute( QwtText::MinimumLayout );

        ( void )lbl.textSize( font ); // initialize the internal cache

        it = d_data->labelCache.insert( value, lbl );
    }

    return ( *it );
}
const QwtText&QwtAbstractScaleDraw::ticklab(const QFont&font,双值)const
{
QMap::const\u迭代器it=d\u data->labelCache.find(值);
if(it==d_data->labelCache.end())
{
QwtText lbl=标签(值);
lbl.setRenderFlags(0);
lbl.setLayoutAttribute(QwtText::MinimumLayout);
(void)lbl.textSize(font);//初始化内部缓存
it=d_data->labelCache.insert(值,lbl);
}
返回(*it);
}
我想,正是这种方法生成了QwtText标签

第8行似乎将渲染标志设置为“0”。也许这就是为什么更改标签的渲染图不会更改勾号下标签的对齐方式

你觉得怎么样

找到了

而不是重写该方法 Qt代码: 切换视图

label(double value)
要复制到剪贴板,请将视图切换到纯文本模式

我必须重写QwtDateScaleDraw的drawLabel方法:

void drawLabel( QPainter *painter, double value ) const override
        {
                QwtText lbl = tickLabel( painter->font(), value );
                if ( lbl.isEmpty() )
                    return;

                lbl.setRenderFlags(Qt::AlignCenter); //<---- add this line 

                QPointF pos = labelPosition( value );

                QSizeF labelSize = lbl.textSize( painter->font() );

                const QTransform transform = labelTransformation( pos, labelSize );

                painter->save();
                painter->setWorldTransform( transform, true );

                lbl.draw ( painter, QRect( QPoint( 0, 0 ), labelSize.toSize() ) );

                painter->restore();

        }
void drawLabel(QPainter*painter,双值)常量覆盖
{
QwtText lbl=勾选标签(画师->字体(),值);
if(lbl.isEmpty())
返回;
setRenderFlags(Qt::AlignCenter);//font());
常量QTTransform transform=标签转换(pos,labelSize);
画师->保存();
画家->设置世界变换(变换,真);
lbl.draw(painter,QRect(QPoint(0,0),labelSize.toSize());
画师->还原();
}
要复制到剪贴板,请将视图切换到纯文本模式

而之后的标签才是真正的中心

setRenderFlags方法无法完成此任务