【问题标题】:Elide text of QPushButton in Qt Symbian C++在 Qt Symbian C++ 中省略 QPushButton 的文本
【发布时间】:2012-05-22 18:40:25
【问题描述】:

如何省略QPushButton 的文本?

【问题讨论】:

  • 省略可以表示,只是截断(截断)或添加省略号(通常是 3 个尾随点...到文本)。是哪一个?

标签: c++ qt symbian


【解决方案1】:
YourPushButton->setText("");

【讨论】:

  • 我想要省略意味着在一定长度后截断文本,以便我的按钮上可以看到大文本
  • 您的要求不明确。是 QPushButton 还是其他小部件?您可以通过设置样式表来设置文本大小。
【解决方案2】:

如果您的意思是添加省略号。下次谷歌更好: ElidedButton Class Reference

【讨论】:

    【解决方案3】:

    基于省略标签的 Qt 示例,我提出了以下解决方案。主要是基于Qt的例子,我只是根据自己的要求进行了简化:

    标题:

    /**
     * Push button with elided text
     * \remark based on http://doc.qt.io/qt-5/qtwidgets-widgets-elidedlabel-example.html
     */
    class CElidedPushButton : public QPushButton
    {
        Q_OBJECT
        Q_PROPERTY(QString text READ text WRITE setText)
        Q_PROPERTY(bool isElided READ isElided)
    
    public:
        //! Constructor
        explicit CElidedPushButton(QWidget *parent = nullptr);
    
        //! Constructor
        explicit CElidedPushButton(const QString &text, QWidget *parent = nullptr);
    
        //! Text
        void setText(const QString &text);
    
        //! Text
        const QString &text() const { return m_content; }
    
        //! Elided?
        bool isElided() const { return m_elided; }
    
    protected:
        //! \copydoc QPushButton::paintEvent
        void paintEvent(QPaintEvent *event) override;
    
    private:
        bool m_elided = false;
        QString m_content;
    };
    

    CPP:

    CElidedPushButton::CElidedPushButton(QWidget *parent) : QPushButton(parent)
    { }
    
    CElidedPushButton::CElidedPushButton(const QString &text, QWidget *parent)
        : QPushButton(parent), m_elided(false), m_content(text)
    {
        this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    }
    
    void CElidedPushButton::setText(const QString &newText)
    {
        m_content = newText;
        this->update();
    }
    
    void CElidedPushButton::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        const QFontMetrics fontMetrics = painter.fontMetrics();
        const int usableWidth = qRound(0.9 * this->width());
    
        const QString elidedText = fontMetrics.elidedText(m_content, Qt::ElideRight, usableWidth);
        m_elided = (elidedText != m_content);
        QPushButton::setText(elidedText);
        QPushButton::paintEvent(event);
    }
    

    【讨论】:

    • setText() 将更改按钮文本。正确的方法是将文本绘制为省略但不更改实际文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多