1.概要
qt 数字输入控件,用于触摸屏的文字输入
2.代码
2.1 弹窗控件和输入框
#include <QLineEdit>
#include <QDialog>
#include <QPushButton>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
class CustomDialog : public QDialog {
Q_OBJECT
public:
CustomDialog(QLineEdit *lineEdit, QWidget *parent = nullptr) : QDialog(parent), lineEdit(lineEdit) {
QGridLayout *gridLayout = new QGridLayout;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 3; ++j) {
if (i == 3 && j == 2) break; // Skip the last cell for OK button
int number = i * 3 + j;
if (number == 9) number = -1; // Use -1 as a sentinel for the backspace button
QPushButton *button = new QPushButton(number == -1 ? "Backspace" : QString::number(number), this);
gridLayout->addWidget(button, i, j);
connect(button, &QPushButton::clicked, this, [this, number]() {
if (number == -1) {
// Backspace functionality
//lineEdit->text();
QString text = this->lineEdit->text();
if (!text.isEmpty()) {
this->lineEdit->setText(text.left(text.length() - 1));
}
} else {
// Append number to the line edit
this->lineEdit->setText(this->lineEdit->text() + QString::number(number));
}
});
}
}
QPushButton *okButton = new QPushButton("OK", this);
gridLayout->addWidget(okButton, 3, 2, 1, 1);
connect(okButton, &QPushButton::clicked, this, &CustomDialog::accept);
setLayout(gridLayout);
}
private:
QLineEdit *lineEdit;
};
class CustomLineEdit : public QLineEdit {
Q_OBJECT
public:
CustomLineEdit(QWidget *parent = nullptr) : QLineEdit(parent) {
connect(this, &CustomLineEdit::mousePressed, this, &CustomLineEdit::onMousePressed);
}
protected:
void mousePressEvent(QMouseEvent *event) override {
QLineEdit::mousePressEvent(event);
emit mousePressed();
}
private slots:
void onMousePressed() {
CustomDialog dialog(this);
dialog.exec();
}
signals:
void mousePressed();
};
2.2 窗口代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "NumberDialog.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
CustomLineEdit* my = new CustomLineEdit(this);
//my->setText("ddddd");
}
MainWindow::~MainWindow()
{
delete ui;
}
2.3 主函数
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
3.运行结果

2044

被折叠的 条评论
为什么被折叠?



