在旧的Qt PieMenu中添加新的行和空格

时间:2018-08-14 08:37:23

标签: c++ qt menu

我需要使用旧的Qt pieMenu,我知道它已经过时了,但是我找到了源代码here和安装说明here(它们也位于zip文件中)

我已经成功编译并运行了示例,但是我的问题是我需要在饼图菜单的文本中添加空格并操纵字体

例如在editor.cpp示例中,这些行以第一个参数作为显示的文本将项目插入到饼状菜单中:

    markMenu->insertItem("Cut", this, SLOT(cut()));
    markMenu->insertItem("Del", this, SLOT(del()));
    markMenu->insertItem("Copy", this, SLOT(copy()));

我尝试将这样的行设置为测试:

    markMenu->insertItem("item cut", this, SLOT(cut()));
    markMenu->insertItem(tr("Del item"), this, SLOT(del()));
    markMenu->insertItem("test on item", this, SLOT(copy()));

,结果类似于照片(不显示空格字符后的所有内容) enter image description here

然后我使用'\ t'而不是直接使用空格,它是一个空格而不是制表符。

    markMenu->insertItem("test\ton\titem", this, SLOT(copy()));

,但是当尝试在文本中添加新行时,一切都无法正常进行。 我尝试使用'\ n',但对我不起作用。

另一个问题,我试图更改菜单的字体设置,我尝试了:

    markMenu->setFont(QFont("Arial", 9, 5, true)); // size 9, weight 5, italic

但这不会影响字体,我也尝试过styleSheets,但没有成功。

任何想法如何显示新的留置权并调整文本字体?

1 个答案:

答案 0 :(得分:1)

在OP提供的link中,滚动到底部,可以找到源代码:

        painter.drawText(center.x() + x
                         - metrics.width(itemText(i)) / 2,
                         center.y() + y, itemText(i));

现在,看看Qt文档。 QPainter::drawText()的说明:

  

此功能无法处理换行符(\ n),因为它无法将文本分成多行,也无法显示换行符。如果您想用换行符绘制多行文本,或者希望包装文本,请使用带矩形的QPainter::drawText()重载。

...以及可能的修复方法。 (由我强调)。

由于源代码可用,因此可以解决此问题。

要正确地计算边界矩形,可以使用QFontMetrics

How to automatically increase/decrease text size in label in Qt的答案显示了使用QFontMetrics确定文本边界的示例,该示例甚至考虑了自动换行。