Qt如何实现按钮控制文本框显示按钮上的字符

[复制链接]
查看11 | 回复6 | 2021-1-27 06:47:41 | 显示全部楼层 |阅读模式
我刚接触Qt,用Qt来写一个计算器,如何实现使PushButton上的数字在LineEdit上显示
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
我估计你想问的是信号和槽的传参问题,或者多个信号对应一个槽的问题。
希望你能描述出,你做了什么尝试,遇到什么困难。
回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
---Calculate_Dialog.h
#ifndefCALCULATE1_DIALOG_H
#defineCALCULATE1_DIALOG_H

#include
#include
#include
#include
#include
#include
#include
namespaceUi{
classCalculate1_Dialog;
}
classCalculate1_Dialog:publicQDialog
{
Q_OBJECT
public:
explicitCalculate1_Dialog(QWidget*parent=0);
~Calculate1_Dialog();
private:
Ui::Calculate1_Dialog*ui;
QLineEdit*lineEdit;
QLabel*label;
QVBoxLayout*vBoxLayout;
QHBoxLayout*hBOXLayout;
QGridLayout*gridLayout;
QPushButton*btn0;
QPushButton*btn1;
QPushButton*btn2;
QPushButton*btn3;
QPushButton*btn4;
QPushButton*btn5;
QPushButton*btn6;
QPushButton*btn7;
QPushButton*btn8;
QPushButton*btn9;
QPushButton*btn_Point;
QPushButton*btn_Sub;
QPushButton*btn_Add;
QPushButton*btn_Mul;
QPushButton*btn_Div;
QPushButton*btn_Equal;
};
#endif//CALCULATE1_DIALOG_H
---Calculate_Dialog.cpp
#include"calculate1_dialog.h"
#include"ui_calculate1_dialog.h"
#include"test.h"
Calculate1_Dialog::Calculate1_Dialog(QWidget*parent):
QDialog(parent),
ui(newUi::Calculate1_Dialog)
{
ui->setupUi(this);
label=newQLabel(tr("输出结果"));
lineEdit=newQLineEdit;
hBOXLayout=newQHBoxLayout;
hBOXLayout->addWidget(label);
hBOXLayout->addWidget(lineEdit);
btn7=newQPushButton(tr("7"));
btn8=newQPushButton(tr("8"));
btn9=newQPushButton(tr("9"));
btn_Add=newQPushButton(tr("+"));
btn4=newQPushButton(tr("4"));
btn5=newQPushButton(tr("5"));
btn6=newQPushButton(tr("6"));
btn_Sub=newQPushButton(tr("-"));
btn1=newQPushButton(tr("1"));
btn2=newQPushButton(tr("2"));
btn3=newQPushButton(tr("3"));
btn_Mul=newQPushButton(tr("x"));
btn0=newQPushButton(tr("0"));
btn_Point=newQPushButton(".");
btn_Div=newQPushButton(tr("="));
btn_Equal=newQPushButton(tr("/"));

vBoxLayout=newQVBoxLayout;
gridLayout=newQGridLayout;
gridLayout->addWidget(btn7,0,0,1,1);
gridLayout->addWidget(btn8,0,1,1,1);
gridLayout->addWidget(btn9,0,2,1,1);
gridLayout->addWidget(btn_Add,0,3,1,1);
gridLayout->addWidget(btn4,1,0,1,1);
gridLayout->addWidget(btn5,1,1,1,1);
gridLayout->addWidget(btn6,1,2,1,1);
gridLayout->addWidget(btn_Sub,1,3,1,1);
gridLayout->addWidget(btn1,2,0,1,1);
gridLayout->addWidget(btn2,2,1,1,1);
gridLayout->addWidget(btn3,2,2,1,1);
gridLayout->addWidget(btn_Mul,2,3,1,1);
gridLayout->addWidget(btn0,3,0,1,1);
gridLayout->addWidget(btn_Point,3,1,1,1);
gridLayout->addWidget(btn_Equal,3,2,1,1);
gridLayout->addWidget(btn_Div,3,3,1,1);
vBoxLayout->addLayout(hBOXLayout);
vBoxLayout->addLayout(gridLayout);
setLayout(vBoxLayout);
setWindowTitle(tr("计算器"));
connect(btn9,SIGNAL(isClickedButton(QString)),lineEdit,SLOT(setText(QString)));
}
Calculate1_Dialog::~Calculate1_Dialog()
{
deleteui;
}
----test.h
#ifndefTEST_H
#defineTEST_H
#include
classTest:publicQPushButton
{
Q_OBJECT
public:
//explicitTest(QObject*parent=0);
Test(constQString&text,QWidget*parent);
private:
signals:
voidisClickedButton(constQString&text);
publicslots:
voidsendButtonText();
};
#endif//TEST_H
----test.cpp
#include"test.h"
#include
#include

Test::Test(constQString&text,QWidget*widget):
QPushButton(text,widget)
{
connect(this,SIGNAL(clicked()),this,SLOT(sendButtonText()));
}
voidTest::sendButtonText()
{
emitisClickedButton(this->text());
}


回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
这是我写的代码,可是实现不了PushButton上的数字在lineEdit中显示
回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
--Calculate_Dialog.h
#ifndefCALCULATE1_DIALOG_H
#defineCALCULATE1_DIALOG_H

#include
#include
#include
#include
#include
#include
#include
namespaceUi{
classCalculate1_Dialog;
}
classCalculate1_Dialog:publicQDialog
{
Q_OBJECT
public:
explicitCalculate1_Dialog(QWidget*parent=0);
~Calculate1_Dialog();
private:
Ui::Calculate1_Dialog*ui;
QLineEdit*lineEdit;
QLabel*label;
QVBoxLayout*vBoxLayout;
QHBoxLayout*hBOXLayout;
QGridLayout*gridLayout;
QPushButton*btn0;
QPushButton*btn1;
QPushButton*btn2;
QPushButton*btn3;
QPushButton*btn4;
QPushButton*btn5;
QPushButton*btn6;
QPushButton*btn7;
QPushButton*btn8;
QPushButton*btn9;
QPushButton*btn_Point;
QPushButton*btn_Sub;
QPushButton*btn_Add;
QPushButton*btn_Mul;
QPushButton*btn_Div;
QPushButton*btn_Equal;
};
#endif//CALCULATE1_DIALOG_H
---Calculate_Dialog.cpp
#include"calculate1_dialog.h"
#include"ui_calculate1_dialog.h"
#include"test.h"
Calculate1_Dialog::Calculate1_Dialog(QWidget*parent):
QDialog(parent),
ui(newUi::Calculate1_Dialog)
{
ui->setupUi(this);
label=newQLabel(tr("输出结果"));
lineEdit=newQLineEdit;
hBOXLayout=newQHBoxLayout;
hBOXLayout->addWidget(label);
hBOXLayout->addWidget(lineEdit);
btn7=newQPushButton(tr("7"));
btn8=newQPushButton(tr("8"));
btn9=newQPushButton(tr("9"));
btn_Add=newQPushButton(tr("+"));
btn4=newQPushButton(tr("4"));
btn5=newQPushButton(tr("5"));
btn6=newQPushButton(tr("6"));
btn_Sub=newQPushButton(tr("-"));
btn1=newQPushButton(tr("1"));
btn2=newQPushButton(tr("2"));
btn3=newQPushButton(tr("3"));
btn_Mul=newQPushButton(tr("x"));
btn0=newQPushButton(tr("0"));
btn_Point=newQPushButton(".");
btn_Div=newQPushButton(tr("="));
btn_Equal=newQPushButton(tr("/"));

vBoxLayout=newQVBoxLayout;
gridLayout=newQGridLayout;
gridLayout->addWidget(btn7,0,0,1,1);
gridLayout->addWidget(btn8,0,1,1,1);
gridLayout->addWidget(btn9,0,2,1,1);
gridLayout->addWidget(btn_Add,0,3,1,1);
gridLayout->addWidget(btn4,1,0,1,1);
gridLayout->addWidget(btn5,1,1,1,1);
gridLayout->addWidget(btn6,1,2,1,1);
gridLayout->addWidget(btn_Sub,1,3,1,1);
gridLayout->addWidget(btn1,2,0,1,1);
gridLayout->addWidget(btn2,2,1,1,1);
gridLayout->addWidget(btn3,2,2,1,1);
gridLayout->addWidget(btn_Mul,2,3,1,1);
gridLayout->addWidget(btn0,3,0,1,1);
gridLayout->addWidget(btn_Point,3,1,1,1);
gridLayout->addWidget(btn_Equal,3,2,1,1);
gridLayout->addWidget(btn_Div,3,3,1,1);
vBoxLayout->addLayout(hBOXLayout);
vBoxLayout->addLayout(gridLayout);
setLayout(vBoxLayout);
setWindowTitle(tr("计算器"));
connect(btn9,SIGNAL(isClickedButton(QString)),lineEdit,SLOT(setText(QString)));
}宝鉴www.abaojian.com
Calculate1_Dialog::~Calculate1_Dialog()
{
deleteui;
}
----test.h
#ifndefTEST_H
#defineTEST_H
#include
classTest:publicQPushButton
{
Q_OBJECT
public:
//explicitTest(QObject*parent=0);
Test(constQString&text,QWidget*parent);
private:
signals:
voidisClickedButton(constQString&text);
publicslots:
voidsendButtonText();
};
#endif//TEST_H
----test.cpp
#include"test.h"
#include
#include

Test::Test(constQString&text,QWidget*widget):
QPushButton(text,widget)
{
connect(this,SIGNAL(clicked()),this,SLOT(sendButtonText()));
}
voidTest::sendButtonText()
{
emitisClickedButton(this->text());
}
这个真的有用
回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
3步操作:
1、新增一个QButtonGroup吧所有按钮都加进来。
2、连接信号槽
connect(btnGroupKey,SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(SltBtnKeyClicked(QAbstractButton*)));
3、接收操作
voidWidgetKeyboard::SltBtnKeyClicked(QAbstractButton*btn)
{
//采用这种方式将按钮上的字输入到输入框中,这样可以叠加
QKeyEventkeyEvent(QEvent::KeyPress,Qt::Key_Any,Qt::NoModifier,btn->text());
QApplication::sendEvent(lineEdit,&keyEvent);
}
回复

使用道具 举报

千问 | 2021-1-27 06:47:41 | 显示全部楼层
谢谢!很有用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行