Qt学习记录1

一个实现在LineEdit框中输入内容 在textBrowser框输出内容的程序

源码:

//widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTextBrowser>
#include <QPushButton>
#include <QString>


namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

signals:


private slots:
    <span style="color:#ff0000;">void savedata();</span>

private:
    Ui::Widget *ui;
    QLabel *label1;
    QLabel *label2;
    QLineEdit *lineedit;
    QTextBrowser *textbrowser;
    QPushButton *button;
    QPushButton *cancel;
    QString str;

};

#endif // WIDGET_H
原本是按照书中介绍的那样使用前置声明 

class QLabel;
class QLineEdit;
class QTextBrowser;
class QPushButton;
class QString;
但是由于是qt4的书,所以Qt5貌似不支持的样子,所以就直接包含头文件。这个问题以后再关注吧。


自定义了一个槽,savedata();用于保存lineedit输入的数据并在textbrowser中输出。名字起的是不是不好。。。


//widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    //标签与行编辑的定义
    label1 = new QLabel(tr("&Input:"));
    lineedit = new QLineEdit;
    label1->setBuddy(lineedit);

    //标签与现实框的定义
    label2 = new QLabel(tr("&Show:"));
    textbrowser = new QTextBrowser;
    label2->setBuddy(textbrowser);

    //输入按钮的定义
    button = new QPushButton(tr("&OK"));
    cancel = new QPushButton(tr("&CANCEL"));
    cancel->setShortcut(Qt::Key_Escape);

   //设置快捷键
    button->setShortcut(Qt::Key_Enter);//设置快捷键小键盘的enter键
    button->setShortcut(Qt::Key_Return);//设置快捷键字母键盘的enter键
    <span style="color:#ff0000;">//button->setDefault(true);//使该按钮成为默认按钮   即按下enter时默认按下</span>

    //signal_slot
    connect(cancel,SIGNAL(clicked()),
            this,SLOT(close()));
    <span style="color:#3366ff;">connect(button,SIGNAL(clicked()),
            this,SLOT(savedata()));</span>
    connect(button,SIGNAL(clicked()),
            lineedit,SLOT(clear()));//清空lineedit中的数据


    //布局
    QHBoxLayout *toplayout = new QHBoxLayout;
    toplayout->addWidget(label1);
    toplayout->addWidget(lineedit);
    toplayout->addWidget(button);

    QHBoxLayout *middlelayout = new QHBoxLayout;
    middlelayout->addWidget(label2);
    middlelayout->addStretch();//添加一个分隔符(伸展器)
    middlelayout->addWidget(cancel);

    QVBoxLayout *alllayout = new QVBoxLayout;
    alllayout->addLayout(toplayout);
    alllayout->addLayout(middlelayout);
    alllayout->addWidget(textbrowser);

    setLayout(alllayout);//将全布局安装在Widget中

    setWindowTitle(tr("ioput"));

    setFixedHeight(sizeHint().height());//返回一个窗口理想的大小
}

<span style="color:#009900;">void Widget::savedata()</span>
{
    str = lineedit->text();  //把lineedit中的文本赋给str 
    textbrowser->append(str);//在textbrowser中显示str的内容
    lineedit->setFocus();    //设置焦点

}


Widget::~Widget()
{
    delete ui;
}
红色显示的是设置默认按enter键使按下button按钮,但是实际测试中却没起作用,同样是在qt4教程中学到的,可能已经过时了吧。所以改用setShorcut();函数来设置快捷键。


绿色的在widget.h中定义的槽。


    <span style="color:#3366ff;">connect(button,SIGNAL(clicked()),
            this,SLOT(savedata()));</span>
这一句原本是错的,this改成textbrowser了,但是一直没找到问题,最后请教一位高人才解决,在此感谢@独家废物 兄。


signal_slot或signal_signal这样的关联,要求二者拥有相同的参数列表。若SIGNAL参数比SLOT的多,则多的自动忽略。这个我之前就看过,可看过不代表就记得。原本,我用到信号是:

<span style="font-size:18px;"><strong>    connect(button,SIGNAL(clicked()),
            textbrowser,SLOT(setText(str)));</strong></span>
其中信号没参数,而槽中却有一个参数,所以不能完成。而我一直没发现,现在记忆深刻。


最后,我把程序名字起为ioput,意为:i:in,o:out,即in_output,输入输出程序。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值