如何使QGraphicsTextItem单行

How to make QGraphicsTextItem single line?

本文关键字:单行 QGraphicsTextItem 何使      更新时间:2023-10-16

我有一个QGraphicsTextItem行为作为lineedit,使用

setTextInteractionFlags(Qt::TextEditorInteraction);

但是,如果用户按回车键,它将显示多行。我想让它忽略换行,怎么做?

AFAIK QGraphicsTextItem不实现该功能。您可以通过子类化QGraphicsTextItem并过滤键盘事件来实现此技巧:

class MyGraphicsTextItem : public QGraphicsTextItem
{
// ...
protected:
    virtual void keyPressEvent(QKeyEvent* e) override
    {
        if (e->key() != Qt::Key_Return)
        {
            // let parent implementation handle the event
            QGraphicsTextItem::keyPressEvent(e);
        }
        else
        {
            // ignore the event and stop its propagation
            e->accept();
        }
    }
};

我最终使用了以下代码。与@wasthishelpful相同。

class GraphicsLineEditItem : public QGraphicsTextItem {
    Q_OBJECT
public:
    explicit GraphicsLineEditItem(QGraphicsItem *parent = 0) : QGraphicsTextItem(parent)
    { setTextInteractionFlags(Qt::TextEditorInteraction); }
signals:
    void returnPressed();
protected:
    void keyPressEvent(QKeyEvent *event) {
        switch (event->key()) {
        case Qt::Key_Return:
        case Qt::Key_Enter:
            emit returnPressed();
            break;
        default:
            QGraphicsTextItem::keyPressEvent(event);
        }
    }
};