2 vikilogic vikilogic 于 2016.03.11 11:43 提问

一个QT中特殊输入控件的实现问题

我需要制作出一个QT输入控件,用户能在其中正常输入
数字字符,但需要实现的效果为:
每输入4个字符后自动空一格,即每自个字符为一组
每输入10组字符后自动换下一行
每输入达到5行后自动空一段,继续输入另起一段,效果见截图:图片说明

打算用QTextEdit来实现,请教比较合适的实现方法,不限制最终用什么输入控件,
谢谢!

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.11 14:55
已采纳

用QTextEdit实现了一下,应该能满足LZ的要求
main.cpp:

 #include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h:

 #ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    int count_char;
    int count_row;
    int count_line;

public slots:
    void ProcessText();
};

#endif // MAINWINDOW_H

mainwindow.cpp:

 #include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    count_char = 0;
    count_row = 0;
    count_line = 0;
    connect(ui->textEdit, SIGNAL(textChanged()), this, SLOT(ProcessText()));
}

void MainWindow::ProcessText()
{
    if(++count_char == 4)
    {
        if(++count_row == 10)
        {
            if(++count_line == 5)
            {
                ui->textEdit->insertPlainText("\n");
                count_line = 0;
            }
            ui->textEdit->insertPlainText("\n");
            count_row = 0;
        }
        else
            ui->textEdit->insertPlainText(" ");
        count_char = 0;
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行结果:
图片说明

vikilogic
vikilogic 回复小灸舞: 就是不知道我这种想法如何实现。如果重刷整个TEXTEDIT的话,担心在后续已输内容很多时会卡。
2 年多之前 回复
qq423399099
qq423399099 回复龙初越: lz想法不错啊,其实不把空格和回车存进去应该很简单啊,感觉增删以后,直接重刷一遍textedit
2 年多之前 回复
vikilogic
vikilogic 回复小灸舞: 还是有些问题,字符的后续处理起来比较头疼。不成熟地问一下,有没有可能实现出这样一种情况:因为我需要的输入框里的字符在后续都是需要提取出来处理的,每组间的空格和几组间的换行纯粹是为了好看整洁而没有其他意义(但是要求是必须如此),且后续字符提取时还不能包括这些空格和换行,因此我认为比较简单的是,能否在textedit里嵌入一种图片之类的,这个图片只不过是一种透明的表格形状,且透明表格的线还比较粗,这样在textedit里输入的时候,输入碰到图片处(实际是透明的)就自动跳到图片后面继续输入,这样看起来就像是自动空格了一样,但是整个输入仍是一个输入而不是表格里不同的单元格,这样在段落中删、增、改时以及后续提取时都比较方便。有点天马星空,不知我这种思路有实现的可能否?感谢!
2 年多之前 回复
vikilogic
vikilogic 还没来得及试验,先感谢一下!
2 年多之前 回复
qq423399099
qq423399099 回复龙初越: 创建一个BOOL a = false;用来标识是否删除了某个字符 感觉LZ可以用textEdit的cursorPositionChanged这个信号记录光标变化的位置,如果前一次位置-后一次位置=1并且a为true表示用户真的删除了 处理完记得把a再置为false 用void QWidget::keyPressEvent(QKeyEvent *event)捕获键盘信号,如果捕获到backspace就将a=true; 之前的每个字符都存起来就好了,位置找到了并且知道点了backspace,所有字符向前移一格就好
2 年多之前 回复
vikilogic
vikilogic 试验了一下,基本可以满足,在删除时会出现一些问题,我再分析一下。另外还有一些问题,怪我需求没有提完善,还有需求如下:在输入完一堆字符后,随意把光标点在之前某一个字符上,按删除键删除字符后要求后面整个所有字符跟着前移一位但仍旧保持4位一组的状态,这点我还没有想好有啥好办法,如能指教,感谢。
2 年多之前 回复
qq423399099
qq423399099 LZ记得ui里面拖一下textEdit
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Qt实现IP输入框
Qt作为界面框架,已经非常完善了。但是,也不是尽善尽美,IP输入框作为开发中使用很频繁的一个控件,Qt竟然没有实现,也是醉了。不过,我们自己也可以实现,并不是很复杂。 先来看下最终实现的效果: 使用起来还算顺手,实现了以下一些方便的操作: 1.连续输入; 2.连续删除; 3.任意位置插入; 4.自适应大小变化。 5.正则匹配,每个值不大于255。设置IP值时,有正则进行验证是
用QT实现的用于显示输入IP的LineEdit控件
    QT下没有可以直接用于输入IP这种字符串的控件,自己写了一个。    可以实现根据用户设置的控件大小画出正确的外观,验证输入数字在正确范围内,提供了简单的代码设置获取IP的接口。尚缺少连续输入和删除功能。    废话少说,贴代码优先,详见注释~//.h file#ifndef IPLINEEDIT_H#define IPLINEEDIT_H#include class COneIPLine
Qt实现的IP地址输入控件
// MyIpPartLineEdit.h #pragma once #include class QWidget; class QFocusEvent; class QKeyEvent; class MyIpPartLineEdit : public QLineEdit { Q_OBJECT public: MyIpPartLineEdit(QWidge
QT(5.6) 实现IP地址输入控件
因为一个项目需要用IP地址输入控件,QT下又没有可以直接用于输入IP这种字符串的控件,网上也找了很久,大多数都是3个QlineEdit拼出来,不合我意,所以 只能自已琢磨一个出来了.功能: 验证输入数字在正确范围内 , 连续输入和删除, 拷贝.
[Qt] IP地址输入框实现
封装了一个ip地址的输入框。网络上下载了份代码,找不到哪里的了。经过修改之后,尽力让它的行为和windows的IP地址输入框的行为看起来像些。代码如下://ipaddredit.h#ifndef IPADDREDIT_H #define IPADDREDIT_H#include <QWidget>class QLineEdit; class QLabel; class CIpPartLineEdit
qt小白入门基础中按钮与文本输入框
刚刚使用qt的时候基本上很多都不会,我们就从简单的如何创建一个工程,和按钮与输入框的实验开始吧。一. 新建工程步骤如下:点击New Project然后第二步下图:一般情况下默认第一个 然后下一步:在这一步里面名字和路径最好不用中文,因为可能后面编译会报错,接下来几步默认就可以:如新建好的一个工程如上图。那下面我们点击forms里面的ui界面开始界面布局:我们将用到三个控件:PushButton(按...
qt IP控件的实现
qt中没有IP控件,但是存在lineEdit控件,我们只需要对着个控件稍加修改,就会得到IP控件 QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");  //IP的正则表达式 ui->lineEdit_host->s
Qt 控件 实现 QComboBox输入自动提示功能(仿Google搜索提示)
Qt 控件 实现 QComboBox输入自动提示功能(仿Google搜索提示)
QT:IP地址输入框的实现
输入IP地址是一个很常用的功能,但QT并没有相对应的控件,我只好自己写一个了(类似于MFC的CIPAddressCtrl)。 主要思路: 1:建立4个QSpinBox输入框和3个QLabel,并排列好。 2:将4个输入框的输入范围设为0~255 3:去掉QSpinBox的上下按钮,将文字设为居中显示。 4:如果某个输入框得到了输入焦点,则将它们设为全选状态;如果输入框内的字符为0
QT自定义控件,以绘画板为列
本博客是博主原创,请转载时加上,转载地址和,转载名称