您当前的位置: 首页 > 

龚建波

暂无认证

  • 3浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《QDebug 2020年10月》

龚建波 发布时间:2020-10-07 15:50:35 ,浏览量:3

一、Qt Widgets 问题交流 1.QDateTime/QDate/QTime在QtConcurrent/std::thread用toString()/currentTime()等接口报错(待解决)

版本:Qt5.15.1 MSVC 32/64-bit

代码如下:

        QtConcurrent::run([=]{
            QTime time;
            time.setHMS(1,2,4);
            qDebug()setAxisX(axisX, series);

运行后中文就成了问号:

根据文档的提示,设置下 locale(默认为 printf 格式化,设置 locale number 后用 QString::asprintf 格式化):

	QChart *m_chart = new QChart();
	m_chart->setLocale(QLocale(QLocale::Chinese,QLocale::China));
	m_chart->setLocalizeNumbers(true);

这时候更坑的来了,直接刻度都没有了。

在 Qt Bug Tracker 找到个类似的情况:https://bugreports.qt.io/browse/QTBUG-81981?jql=text%20~%20%22chart%20locale%22

但是并没有看到解决方法。 

在源码中(E:\Qt\qt-everywhere-src-5.15.0\qtcharts\src\charts\axis\chartaxiselement.cpp),可以从 createValueLabels 函数开始看。

3.QBoxLayout 设置对齐

可以设置该 LayoutItem 中元素整体的对齐,如果是 AlignCenter ,那么就缩在中间一团了:

void setAlignment(Qt::Alignment alignment)

也可以设置包含的 LayoutItem 对齐方式,比如想要 QVBoxLayout 中的某个组件左右居中,就可以设置这个:

bool setAlignment(QWidget *w, Qt::Alignment alignment)
bool setAlignment(QLayout *l, Qt::Alignment alignment)

此外,如果只是设置对齐方式,如 QVBoxLayout 左对齐或者右对齐,可以设置 direction :

void setDirection(QBoxLayout::Direction direction)

如果想让某个  QVBoxLayout 中的所有组件都左右居中,可以参照 setAlignment 的实现自己遍历来设置:

//源码
bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)
{
    int i = 0;
    QLayoutItem *item = itemAt(i);
    while (item) {
        if (item->widget() == w) {
            item->setAlignment(alignment);
            invalidate();
            return true;
        }
        ++i;
        item = itemAt(i);
    }
    return false;
}

//自己遍历
{
    for(int i=0;iverticalLayout->count();i++)
        ui->verticalLayout->itemAt(i)->setAlignment(Qt::AlignCenter);
    ui->verticalLayout->invalidate();
}
二、Qt Quick 问题交流 1. 三、其他 1.
关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.2280s