首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一个Qt小部件,看起来像一个标签来显示文本,但也可以编辑,如果双击?

是否有一个Qt小部件,看起来像一个标签来显示文本,但也可以编辑,如果双击?
EN

Stack Overflow用户
提问于 2018-07-07 04:37:18
回答 3查看 1.7K关注 0票数 1

我想在Qt的小工具,将像电子表格单元格的行为。它可以显示文本,然后当用户双击它时,它就变为可编辑的。一旦用户完成编辑并按Enter,文本就会被保存,并且该控件将不再可编辑。如果用户在编辑时按Escape,则控件将返回到其先前的值。

一种可能的解决方案是将QWidgetQLabelQLineEdit子类化。Qt中还有其他可用的解决方案吗?

EN

Stack Overflow用户

发布于 2020-02-28 00:00:34

这个解决方案不那么吸引人,但您可以使用的性能更好的解决方案之一是使用QInputdialog更改QLabel并覆盖mouseDoubleClickEvent以触发输入对话框。我在这里的一些人已经了解到,没有办法从QLabel中拉出编辑过的文本。如果不更改QLabels内部代码,则不会。下面是一个使用QInputDialog作为方法的示例。

代码语言:javascript
运行
复制
//intrlbl.h

#ifndef INTRLBL_H
#define INTRLBL_H

#include <QWidget>
#include <QLabel>
#include <QMouseEvent>



class intrLbl: public QLabel
{
    Q_OBJECT
public:
    intrLbl(QWidget *parent);

    void mouseDoubleClickEvent(QMouseEvent *event) override;
    QString text;

};

#endif // INTRLBL_H



//intrlbl.cpp file

#include "intrlbl.h"
#include <QDebug>
#include <QInputDialog>

intrLbl::intrLbl(QWidget *parent)
{
    this->setText("Text Changeable Via Double Click QInput Dialog");
    this->setFocusPolicy(Qt::ClickFocus);
    this->setWordWrap(false);

}

void intrLbl::mouseDoubleClickEvent(QMouseEvent *event)
{
       QString title
               = QInputDialog::getText(this,
                 tr("Enter your Idea Title:"),
                  tr("Title:"), QLineEdit::Normal,
                  tr("enter your title here"));

      if(!title.isEmpty())
      {
            qDebug() << "Title set to:" << title;
            this->setText(title);
       }
      else
      {
          title = "Title";
          this->setText(title);
      }
}
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51217294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档