我想在Qt的小工具,将像电子表格单元格的行为。它可以显示文本,然后当用户双击它时,它就变为可编辑的。一旦用户完成编辑并按Enter,文本就会被保存,并且该控件将不再可编辑。如果用户在编辑时按Escape,则控件将返回到其先前的值。
一种可能的解决方案是将QWidget
、QLabel
和QLineEdit
子类化。Qt中还有其他可用的解决方案吗?
发布于 2020-02-28 00:00:34
这个解决方案不那么吸引人,但您可以使用的性能更好的解决方案之一是使用QInputdialog更改QLabel并覆盖mouseDoubleClickEvent以触发输入对话框。我在这里的一些人已经了解到,没有办法从QLabel中拉出编辑过的文本。如果不更改QLabels内部代码,则不会。下面是一个使用QInputDialog作为方法的示例。
//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);
}
}
https://stackoverflow.com/questions/51217294
复制相似问题