Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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++ QGraphicsTextItem是否支持垂直中心对齐?_C++_Qt_Qtgui_Qt4.7 - Fatal编程技术网

C++ QGraphicsTextItem是否支持垂直中心对齐?

C++ QGraphicsTextItem是否支持垂直中心对齐?,c++,qt,qtgui,qt4.7,C++,Qt,Qtgui,Qt4.7,基本上,我想知道为什么文本对齐标志和setPageSize的组合不会导致文本在显示中居中 下面的程序几乎完全符合我的要求,除了文本只在水平方向居中 #include <QApplication> #include <QMainWindow> #include <QGraphicsView> #include <QGraphicsScene> #include <QGraphicsTextItem> #include <QTextDocument> int ma

基本上,我想知道为什么文本对齐标志和
setPageSize
的组合不会导致文本在显示中居中

下面的程序几乎完全符合我的要求,除了文本只在水平方向居中

#include <QApplication>
#include <QMainWindow>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
#include <QTextDocument>
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QMainWindow *mainWindow = new QMainWindow(0, Qt::FramelessWindowHint);
   QGraphicsView view;
   view.setAlignment(Qt::AlignLeft | Qt::AlignBottom);
   view.setFrameStyle(0);
   view.setBackgroundBrush(QBrush(QColor(Qt::black)));
   mainWindow->setCentralWidget(&view);

   QGraphicsScene scene(0, 0, 640, 480);
   QGraphicsTextItem textItem;
   textItem.setTextWidth(640);
   textItem.document()->setPageSize(QSizeF(640, 480));
   textItem.document()->setDocumentMargin(0);
   textItem.document()->setDefaultTextOption(QTextOption(Qt::AlignCenter | Qt::AlignVCenter));
   textItem.setDefaultTextColor(QColor(Qt::white));
   textItem.setFont(QFont("monospace", 18, 63));
   textItem.setHtml("Center me!");
   scene.addItem(&textItem);
   textItem.setVisible(true);

   view.setScene(&scene);
   mainWindow->show();

   return a.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QMainWindow*mainWindow=新的QMainWindow(0,Qt::FramelessWindowHint);
QGraphicsView视图;
view.setAlignment(Qt::AlignLeft | Qt::AlignBottom);
view.setFrameStyle(0);
视图.setBackgroundBrush(QBrush(QColor(Qt::黑色));
主窗口->设置中心Widget(&view);
Qgraphicscene场景(0,060480);
QGraphicsTextItem文本项;
textItem.setTextWidth(640);
textItem.document()->setPageSize(QSizeF(640480));
textItem.document()->setDocumentMargin(0);
textItem.document()->setDefaultTextOption(QTExoption(Qt::AlignCenter | Qt::AlignVCenter));
setDefaultTextColor(QColor(Qt::白色));
setFont(QFont(“monospace”,18,63));
setHtml(“居中我!”);
scene.addItem(&textItem);
textItem.setVisible(true);
视图。设置场景(和场景);
主窗口->显示();
返回a.exec();
}
我还应该注意到,该项目仅限于Qt4.7.1

如何使用
qgraphicstext项目在
QGraphicsView
的中心水平和垂直对齐文本?我对基于样式表的解决方案也很满意。

不,它不是

指示
QTextDocument
(底层文本呈现对象)特别不尝试垂直对齐。环顾四周后,大多数变通方法分为两类。对于简单(即单行纯文本)应用程序,实现一个代理项,该代理项在其重载的
paint
方法中呈现文本,如下所示:

class MyProxyGraphicsItem: public QGraphicsItem {
public:
    explicit MyProxyGraphicsItem(QString text, QRectF geometry, QGraphicsItem *parent=0) :
        QGraphicsItem(parent), text(text), geometry(geometry)
        {}
    virtual ~MyProxyGraphicsItem() {}
    QRectF boundingRect() const { return geometry; }
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    {
         painter->drawText(geometry, text, Qt::AlignCenter | Qt::AlignVCenter);
    }
private:
    QRectF geometry;
    QString text;
}
对于多行纯文本或富文本(HTML),请使用
QLabel
,如下所示:

#include <QApplication>
#include <QMainWindow>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsTextItem>
#include <QLabel>
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QMainWindow *mainWindow = new QMainWindow(0, Qt::FramelessWindowHint);
   QGraphicsView view;
   view.setAlignment(Qt::AlignLeft | Qt::AlignBottom);
   view.setFrameStyle(0);
   view.setBackgroundBrush(QBrush(QColor(Qt::black)));
   mainWindow->setCentralWidget(&view);

   QGraphicsScene scene(0, 0, 640, 480);
   QLabel label("<div style=\"color:white;\">Center me!</div>");
   label.setWordWrap(true);
   label.setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
   label.setFont(QFont("monospace", 18, 63));
   scene.addWidget(&label)->setGeometry(QRectF(0,0,480,640));

   view.setScene(&scene);
   mainWindow->show();

   return a.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QMainWindow*mainWindow=新的QMainWindow(0,Qt::FramelessWindowHint);
QGraphicsView视图;
view.setAlignment(Qt::AlignLeft | Qt::AlignBottom);
view.setFrameStyle(0);
视图.setBackgroundBrush(QBrush(QColor(Qt::黑色));
主窗口->设置中心Widget(&view);
Qgraphicscene场景(0,060480);
QLabel标签(“我的中心!”);
label.setWordWrap(true);
label.setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
label.setFont(QFont(“monospace”,18,63));
scene.addWidget(&label)->setGeometry(QRectF(0,0480640));
视图。设置场景(和场景);
主窗口->显示();
返回a.exec();
}