Qt学习记录1
2015-05-22 15:10
162 查看
一个实现在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);
绿色的在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,输入输出程序。
源码:
//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,输入输出程序。
相关文章推荐
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- [记录]<<QT学习之路2>>学习第三天
- qt+opencv学习进程记录
- QT学习记录-进度条:
- Qt 数据库学习记录
- Qt的学习记录卡
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- Qt+openGL学习记录(4)`如何实现物体在三维坐标系中的旋转`
- 学习记录-Qt环境的编译
- 学习记录-Qt监听键盘ESC按键
- 学习记录-Qt编写自定义控件
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- 学习记录-Qt按键单击后延迟一段时间触发下一个函数执行
- 学习记录-Qt将调试信息保存到文件
- QT QGraphicsScene QGraphicsView QGraphicsItem学习记录
- Qt学习记录七
- 学习记录-Qt窗口控件的动态添加和删除
- QT学习记录之控件布局
- QT学习记录一
- 学习记录-Qt标准对话框