• 9983阅读
  • 15回复

[提问]drawText怎么实现文字纵向输出呢 [复制链接]

上一主题 下一主题
离线friendbaby
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-21
我想QPainter::drwaText的时候文字纵向输出,从右到左,就像古代书信那样,请问怎么实现呢
Smiling is best language , can express everything , also can conceal everything.
离线jorneyr

只看该作者 1楼 发表于: 2011-10-21
一个一个文字拆开,再使用QFontMetrics计算每个字的大小,计算每个字的坐标,一个字一个字的使用drawText画出来
离线wxj120bw

只看该作者 2楼 发表于: 2011-10-22
回 楼主(friendbaby) 的帖子
参考void QPainter::drawText ( int x, int y, int width, int height, int flags, const QString & text, QRect * boundingRect = 0 )函数中的flags参数(Qt::TextSingleLine | Qt::TextWordWrap),还有width参数设置字体的宽度
PS:上面的建议对中文有效,对英文无效
离线friendbaby

只看该作者 3楼 发表于: 2011-10-22
回 2楼(wxj120bw) 的帖子
我测试了一下 不行啊  还是横向输出的啊
Smiling is best language , can express everything , also can conceal everything.
离线wxj120bw

只看该作者 4楼 发表于: 2011-10-22
回 3楼(friendbaby) 的帖子
需要的是下面这种效果吗
离线friendbaby

只看该作者 5楼 发表于: 2011-10-22
回 4楼(wxj120bw) 的帖子
是的啊
Smiling is best language , can express everything , also can conceal everything.
离线wxj120bw

只看该作者 6楼 发表于: 2011-10-22
回 5楼(friendbaby) 的帖子
直接贴个例子先 如果要实现你想要的效果 还要继续改
  1. void MainWindow::paintEvent(QPaintEvent *e)
  2. {
  3.     QPainter painter(this);
  4.     painter.setPen(Qt::blue);
  5.     painter.setFont(QFont("Arial", 30));
  6.     painter.drawText(this->rect().x(), this->rect().y(), 40, this->rect().height(), Qt::AlignCenter | Qt::TextSingleLine | Qt::TextWordWrap, QString("%1").arg(tr("我测试了一下")));
  7. }
离线friendbaby

只看该作者 7楼 发表于: 2011-10-22
回 6楼(wxj120bw) 的帖子
传个完整的rar吧
Smiling is best language , can express everything , also can conceal everything.
离线wxj120bw

只看该作者 8楼 发表于: 2011-10-23
回 7楼(friendbaby) 的帖子
上面差不多已经是全部代码 运行效果不对吗
离线friendbaby

只看该作者 9楼 发表于: 2011-10-23
回 8楼(wxj120bw) 的帖子
是的  在我这依然是横向输出
Smiling is best language , can express everything , also can conceal everything.
离线friendbaby

只看该作者 10楼 发表于: 2011-10-23
回 9楼(friendbaby) 的帖子
貌似这种方法只能中文纵向输出?如果是英文呢?
Smiling is best language , can express everything , also can conceal everything.
离线wxj120bw

只看该作者 11楼 发表于: 2011-10-23
回 10楼(friendbaby) 的帖子
如果是英文这种方法就不奏效了 不过英文好像没有竖着写得吧

paint.rar (4 K) 下载次数:2




离线friendbaby

只看该作者 12楼 发表于: 2011-10-23
回 11楼(wxj120bw) 的帖子
嗯,我已经明白你这种写法的意思了
我是要在QGraphicsItem里输出,所以这种方法不行了
Smiling is best language , can express everything , also can conceal everything.
离线wxj120bw

只看该作者 13楼 发表于: 2011-10-23
回 12楼(friendbaby) 的帖子
参考QGraphicsTextItem的setTextWidth()函数 设置跟字体一样宽度 估计就可以
PS:还是对中文
离线friendbaby

只看该作者 14楼 发表于: 2011-10-23
回 13楼(wxj120bw) 的帖子
我采用了1楼的方法
Smiling is best language , can express everything , also can conceal everything.
离线jdwx

只看该作者 15楼 发表于: 2011-10-24
回 楼主(friendbaby) 的帖子
QPainter::drawText,识别"\n"换行,只要把字分成一个一个的中间加"\n"就可以竖排!
p.drawText(rect(),Qt::AlignCenter,"A\nB\nC\nD\nE");
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个