ZBLOG

我不想用其他控件 我只想用qlable 并且qlable 中有有字符串qqqqqqqqqq(111111111111)qqqqqq(ddd)qqq 我想删除括号内字符串并 让qlable 中括号内可以编辑

如果你希望在 QLabel 中显示字符串,并且能够删除括号内的内容,同时又想让括号内的部分可编辑,QLabel 本身是不支持直接编辑的,因为它是一个只读控件。

但是,你可以通过以下方式来实现类似的效果:

  1. 使用 QLabel 来显示文本:初始化时显示去掉括号内内容的字符串。
  2. 添加点击事件:当用户点击标签时,将其更改为一个 QLineEditQTextEdit 进行编辑,允许用户修改括号内的内容。
  3. 保存编辑后的值:当用户完成编辑后,再次将其转换回 QLabel 显示。

以下是这个逻辑的示例代码:

#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QString>

class EditableLabel : public QWidget {
    Q_OBJECT

public:
    EditableLabel(QWidget *parent = nullptr) : QWidget(parent) {
        layout = new QVBoxLayout(this);
        label = new QLabel();
        lineEdit = new QLineEdit();

        // 原始字符串
        QString originalString = "qqqqqqqqqq(111111111111)qqqqqq(ddd)qqq";

        // 删除括号及其内部内容
        modifiedString = originalString;
        modifiedString.remove(QRegExp("\\(.*?\\)"));

        // 设置 QLabel 的初始文本
        label->setText(modifiedString);
        layout->addWidget(label);

        // 设置 QLineEdit 的初始文本(用以编辑)
        lineEdit->setText("   "); // 保留空白以表明这里有内容可填充
       
        connect(label, &QLabel::mousePressEvent, this, &EditableLabel::editContent);        
    }

private slots:
    void editContent() {
        if (lineEdit->isVisible()) {
            // 如果已在编辑状态,隐藏 QLineEdit 并更新 QLabel 文本
            label->setText(modifiedString);
            lineEdit->hide();
            return;
        }

        // 显示 QLineEdit 和隐藏 QLabel
        label->hide();
        
		lineEdit->show();	
		layout->addWidget(lineEdit); 

		// 将光标移动到 QLineEdit 中,方便输入
		lineEdit->setFocus();

		connect(lineEdit, &QLineEdit::editingFinished, [=]() {
			modifiedString += "(" + lineEdit->text() + ")";
			label->setText(modifiedString);
			lineEdit->hide();
			label->show();
		});
    }

private:
    QVBoxLayout *layout;
    QLabel *label;
    QLineEdit *lineEdit;
    QString modifiedString;
};

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    EditableLabel window;
    window.show();

    return a.exec();
}

#include "main.moc"

解释:

  1. 初始化界面:创建一个 EditableLabel 类,该类继承自 QWidget。其中包含一个 QLabel 和一个 QLineEdit 控件。
  2. 处理单击事件:连接了标签的单击事件,在单击时切换到 line edit 状态,以便用户可以输入。
  3. 更新和保存结果:当用户完成输入并结束编辑后,通过信号槽机制将结果回传给标签,并更新相应的信息。

注意事项:

  • 此方法利用了两个控件,但在视觉上提供了无缝体验。只有在需要的时候才会出现可编辑状态,因此给用户一种似乎是在直接操作 QLabel 的感觉。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21488

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?