龙初越
2016-03-11 03:43
采纳率: 66.7%
浏览 2.4k
已采纳

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 小灸舞 2016-03-11 06: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;
    }
    

    运行结果:
    图片说明

    点赞 评论

相关推荐 更多相似问题