第一篇CSDN文章

时间:2022-05-11 20:16:13

2015.7.18

暑假小学期ing

今天进行了Qt的学习,通过网上查阅和自己突然小小的发现,解决了以前的问题,就是不知道为啥必须在Dialog下才能通过QGridLayout的addWidget改变控件的位置

this->setMaximumSize(260,171);
this->setMinimumSize(260,171);
这两个是用来固定对话框大小的

还遇到一个关于算法的问题,就是今天做了一个小型计算器,如图:

第一篇CSDN文章
结果是虽然能成功运行,但是由于函数和QPushButton不能连接成功,所以功能不能实现(最后会贴上我的Dialog类的代码)

=。=老师今天除了讲了一点QLabel(Hello World)以外也没啥实用的了

今天在网上找是否有关于QPushButton的监听之类的方法,结果大失所望,我记得Swift中UI的设计就比较智能,能监听当前按钮的值,下面是我在网上找到的一段话和一段代码:

Qt中的信号-槽机制大大降低了编程的耦合度;
QPushButton是按钮中最常用的一个组件;
但是QPushButton的几个信号中除了缺省参之外都没有带参:

   Q_SIGNALS:  
void pressed();
void released();
void clicked(bool checked = false);

也就是说,若你的槽函数与多个QPushButton的clicked()信号相连,则你的槽函数根本无法区分是哪个QPushButton发出的信号;

这在很多时候用起来也是很不方便;

“软件开发中遇到的所有问题,都可以通过增加一层抽象而得以解决”

详细参见: Qt中槽函数如何获取按钮QPushButton的按钮文本

以下是我的错误代码

需要加上的是button上值的监听。

首先是dialog头文件

#ifndef DIALOG_H
#define DIALOG_H
#include<QLineEdit>
#include <QDialog>
#include<QLabel>
#include<QPushButton>
#include<QGridLayout>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
Q_OBJECT

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

private:
Ui::Dialog *ui;
QPushButton *numberButton[11],*methodButton[4],*resultButton;
QLabel *label;
QGridLayout *layout;
private slots:
void numberButtonShow(int j);
void methodButtonShow();
void resultButtonShow();
};

#endif // DIALOG_H
class Label:public QLabel{
Q_OBJECT

public:

};

然后是dialog的cpp文件

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
this->setMaximumSize(260,171);
this->setMinimumSize(260,171);
ui->setupUi(this);
/*******************声明控件********************/
label = new QLabel(this);
int i;
QString tempStr;
for(i=0;i<10;i++){
numberButton[i] = new QPushButton(this);
numberButton[i]->setText(tempStr.setNum(i+1));
}
numberButton[i]= new QPushButton(this);
numberButton[i]->setText(tr("."));
for(i=0;i<4;i++){
methodButton[i] = new QPushButton(this);
}
methodButton[0]->setText(tr("+"));
methodButton[1]->setText(tr("-"));
methodButton[2]->setText(tr("×"));
methodButton[3]->setText(tr("÷"));
resultButton = new QPushButton(this);
resultButton->setText(tr("="));
layout = new QGridLayout(this);

/******************按钮函数设定*******************/
for(i=0;i<11;i++){
connect(numberButton[i],SIGNAL(clicked()),this,SLOT(numberButtonShow(int j)));
}
for(i=0;i<4;i++){
connect(methodButton[i],SIGNAL(clicked()),this,SLOT(methodButtonShow()));
}
connect(resultButton,SIGNAL(clicked()),this,SLOT(resultButtonShow()));
/******************空间位置设定*******************/
layout->addWidget(label,0,0);
for(i=0;i<9;i++){
layout->addWidget(numberButton[i],i/3+1,i%3);
}
layout->addWidget(numberButton[i],i/3+1,i%3+1);
layout->addWidget(numberButton[10],i/3+1,i%3+2);
for(i=0;i<4;i++){
layout->addWidget(methodButton[i],i+1,3);
}
layout->addWidget(resultButton,4,0);
}

Dialog::~Dialog()
{
delete ui;
}
/****************函数实现*********************/
float number[100];
int seat=0;
QString showStr="";
void Dialog::numberButtonShow(int j){
QString tempNum,tempStr;
showStr += numberButton[j]->text();
label->setText(showStr);
}
void Dialog::methodButtonShow(){
seat++;
}
void Dialog::resultButtonShow(){

}

最后是main的cpp文件

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

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

return a.exec();
}

End