第一篇优快云文章

2015.7.18

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

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

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

这里写图片描述
结果是虽然能成功运行,但是由于函数和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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值