下面是一个使用 Qt 实现的点击按钮弹出小键盘的示例:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>
class KeyBoard : public QWidget {
public:
KeyBoard(QWidget *parent = 0)
: QWidget(parent) {
// 创建按钮
QPushButton *button1 = new QPushButton("1");
QPushButton *button2 = new QPushButton("2");
QPushButton *button3 = new QPushButton("3");
QPushButton *button4 = new QPushButton("4");
QPushButton *button5 = new QPushButton("5");
QPushButton *button6 = new QPushButton("6");
QPushButton *button7 = new QPushButton("7");
QPushButton *button8 = new QPushButton("8");
QPushButton *button9 = new QPushButton("9");
QPushButton *button0 = new QPushButton("0");
QPushButton *buttonDot = new QPushButton(".");
QPushButton *buttonClear = new QPushButton("清空");
// 创建文本框
QLineEdit *lineEdit = new QLineEdit;
// 设置布局
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(button1, 0, 0);
gridLayout->addWidget(button2, 0, 1);
gridLayout->addWidget(button3, 0, 2);
gridLayout->addWidget(button4, 1, 0);
gridLayout->addWidget(button5, 1, 1);
gridLayout->addWidget(button6, 1, 2);
gridLayout->addWidget(button7, 2, 0);
gridLayout->addWidget(button8, 2, 1);
gridLayout->addWidget(button9, 2, 2);
gridLayout->addWidget(button0, 3, 0);
gridLayout->addWidget(buttonDot, 3, 1);
gridLayout->addWidget(buttonClear, 3, 2);
gridLayout->addWidget(lineEdit, 4, 0, 1, 3);
setLayout(gridLayout);
// 连接信号和槽
connect(button1, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button2, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button3, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button4, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button5, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button6, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button7, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button8, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button9, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(button0, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(buttonDot, SIGNAL(clicked()), this, SLOT(buttonClicked()));
connect(buttonClear, SIGNAL(clicked()), lineEdit, SLOT(clear()));
}
public slots:
void buttonClicked() {
QPushButton *button = qobject_cast<QPushButton *>(sender());
if (button) {
QLineEdit *lineEdit = qobject_cast<QLineEdit *>(focusWidget());
if (lineEdit) {
lineEdit->insert(button->text());
}
}
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建主窗口
QWidget *mainWindow = new QWidget;
// 添加按钮到主窗口
QPushButton *button = new QPushButton("显示小键盘");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button);
mainWindow->setLayout(layout);
// 连接信号和槽,当按钮被点击时弹出小键盘
KeyBoard *keyBoard = new KeyBoard;
QObject::connect(button, &QPushButton::clicked, [&keyBoard]() {
keyBoard->show();
});
// 显示主窗口
mainWindow->show();
return app.exec();
}
该示例中创建了一个 KeyBoard
类作为小键盘的窗口,包含了数字、小数点和清空按钮以及一个文本框。当任意一个按钮被点击时,会将相应的文本插入到当前拥有焦点的文本框中。
在主窗口中添加了一个按钮,在按钮被点击时显示小键盘。这里使用了 C++11 中的 Lambda 表达式来简化信号和槽的连接过程。