【QT】输入输出控件 按钮控件 布局管理器简单使用


前言

本文记录QT中输入输出控件,按钮控件和布局管理器的简单使用。
使用前提:在创建基础的Qwidget工程上进行,并且不使用控件拖动的方式
在这里插入图片描述

一、输入输出控件

常见的输入控件:QLineEdit(行输入/只显示一行)、QTextEdit(文本输入/可以显示更多)、QComboBox(下拉列表框)、QTimeEdit(显示从Qtime中读取的时间)、QDial(仪表盘)、QSlider(滑动条)、QScrollBar(滚动条)
常见的输出控件:QLabel(标签) 、QLCDNumber(数码管)、QProcessBar(进度条)

代码示例

1、声明指针,所以在widget.h中添加:

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
//常见的输入控件
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QTimeEdit>
#include <QDial>
#include <QSlider>
#include <QScrollBar>
//常见的输出控件
#include <QLabel>
#include <QLCDNumber>
#include <QProgressBar>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    //input
    Ui::Widget *ui;
    QLineEdit *le;
    QTextEdit *td;
    QComboBox *cb;
    QTimeEdit *timee;
    QDial *dl;
    QSlider *sd;
    QScrollBar *sb;
    //output
    QLabel *lb1;
    QLabel *lb2;
    QLCDNumber *lcd;
    QProgressBar *pgb;
};
#endif // WIDGET_H
#include:包含QT封装好的类
private后面的声明:在基类中声明一个组装对象的指针,方便内存的回收

2、在构造函数中把QLineEdit等实现,所以在widget.c的构造函数中添加:

  //input
     le = new QLineEdit(this) ;
     td = new QTextEdit;
     cb = new QComboBox;
     timee = new QTimeEdit;
     dl = new QDial;
     sd = new QSlider;
     sb = new QScrollBar;
    //output
     lb1 = new QLabel;
     lb2 = new QLabel;
     lcd = new QLCDNumber;
     pgb = new QProgressBar;

运行代码发现布局很乱。
在这里插入图片描述


二、布局管理器

添加水平布局QVBoxLayout和垂直布局QHBoxLayou,当然常用的还有网状布局。

#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //input
     le = new QLineEdit(this) ;
     td = new QTextEdit(this);
     cb = new QComboBox;
     cb->addItem("傻子1");
     cb->addItem("傻子2");

     timee = new QTimeEdit;

     dl = new QDial;
     sd = new QSlider(this);
     sd->setOrientation(Qt::Horizontal);
     sb = new QScrollBar(this);
     sb->setOrientation(Qt::Horizontal);
     QVBoxLayout *vbox=new QVBoxLayout;
     vbox->addWidget(le);
     vbox->addWidget(td);
     vbox->addWidget(cb);
     vbox->addWidget(timee);
     vbox->addWidget(dl);
     vbox->addWidget(sd);
    //output
     lb1 = new QLabel("hellow word!");
     lb2 = new QLabel;
     QPixmap pix("1.png");
     lb2->setFixedSize(100,100);
     lb2->setScaledContents(true);
     lb2->setPixmap(pix);
     vbox->addWidget(sb);
     lcd = new QLCDNumber;
     pgb = new QProgressBar;
     QVBoxLayout *vbox1=new QVBoxLayout;
     vbox1->addWidget(lb1);
     vbox1->addWidget(lb2);
     vbox1->addWidget(lcd);
     vbox1->addWidget(pgb);
      QHBoxLayout *hbox=new QHBoxLayout;
     hbox->addLayout(vbox);    //用布局组织布局
     hbox->addLayout(vbox1);

     this->setLayout(hbox);   //交给垂直布局管理器
    //pb= new  QPushButton(this);
     connect(dl,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));//自动提示不好用!!!
}

Widget::~Widget()
{
    delete ui;
}

注意用法:        cb->addItem("傻子1");   //可以添加下拉框内容
				 hbox->addLayout(vbox);    //用布局组织布局
				 
				 lb2 = new QLabel;
				 QPixmap pix("1.png");   //插入PNG图片
				 lb2->setFixedSize(100,100);    //设置大小
				 lb2->setScaledContents(true);   //自适应缩放
				 lb2->setPixmap(pix);    //设置这个图片
				 //这里的用法就是将标签变成图片,而不是单单写文本。

png图片在引子目录插入插入:
在这里插入图片描述在这里插入图片描述
看效果:
在这里插入图片描述

三、按钮控件

1、先包含行QLineEdit编辑框、QPushButton按钮和QCheckBox类、再声明指针,在WIDGET_H添加代码如下

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QCheckBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    void setpass(bool flag)
    {
     if(!flag)
     {
       le->setEchoMode(QLineEdit::Password);
     }
     else
     {
         le->setEchoMode(QLineEdit::Normal);
     }

    }

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    QLineEdit *le;
    QPushButton *pb;
    QCheckBox *ck;
    Ui::Widget *ui;
};
#endif // WIDGET_H

	public slots:
	    void setpass(bool flag)
	    {
	    
	    } //槽函数,connect可以被槽接。

2、在构造函数中new出来,并增加垂直布局。在widget.cpp中加入以下代码:

#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
     le = new QLineEdit;
     le->setEchoMode(QLineEdit::Password);   //行编辑框里显示成密码的样子
     ck = new QCheckBox("显示密码");
     pb = new QPushButton("清除数据");
     QVBoxLayout *vbox = new QVBoxLayout;
     vbox->addWidget(le);
     vbox->addWidget(ck);
     vbox->addWidget(pb);
     this->setLayout(vbox);   //交给垂直管理器
     connect(pb,SIGNAL(clicked(bool)),le,SLOT(clear()));   //pb按下,清除行编辑框的内容
     connect(ck,SIGNAL(clicked(bool)),this,SLOT(setpass(bool)));

    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


 两个信号与槽的函数,实现按钮按下清楚编辑框内容、checkbox打勾与否是否显示数字
 connect(pb,SIGNAL(clicked(bool)),le,SLOT(clear()));   //pb按下,清除行编辑框的内容
 connect(ck,SIGNAL(clicked(bool)),this,SLOT(setpass(bool)));

看效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结语

当然你用拖动的方式可以更加美观,用代码的方式只是为了学习声明对象、构造函数实现、感受信号与槽机制。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的。 在 Qt使用 QML 的控件,举个例子,例如你可以使用 QML 的 Button 控件,来创建一个简单按钮。例如: ``` import QtQuick 2.0 Rectangle { width: 200 height: 50 Button { text: "Click me" onClicked: { console.log("Button clicked") } } } ``` 这样,你就可以在 QML 中使用 Button 控件了。 ### 回答2: 在QT使用QML控件可以创建一个简单的登录界面,例如: ``` import QtQuick 2.0 import QtQuick.Controls 2.0 ApplicationWindow { visible: true width: 400 height: 300 title: "登录" Rectangle { width: 300 height: 200 color: "lightgray" anchors.centerIn: parent Column { anchors.centerIn: parent spacing: 10 TextField { id: usernameField width: 200 placeholderText: "请输入用户名" } TextField { id: passwordField width: 200 placeholderText: "请输入密码" echoMode: TextInput.Password } Button { width: 100 height: 40 text: "登录" onClicked: { var username = usernameField.text var password = passwordField.text // 验证用户名和密码 if (username === "admin" && password === "123456") { console.log("登录成功") } else { console.log("用户名或密码错误") } } } } } } ``` 上述代码中,使用了`ApplicationWindow`作为窗口,内部嵌套了一个灰色的`Rectangle`作为登录框。在这个登录框内部,使用`Column`布局将用户名输入框、密码输入框和登录按钮垂直排列。 通过`TextField`控件创建了两个输入框,分别用于输入用户名和密码。其中,密码输入框的`echoMode`属性被设置为`TextInput.Password`,以保护输入的密码。 通过`Button`控件创建了一个登录按钮,在点击按钮时,通过`onClicked`信号来验证输入的用户名和密码。如果用户名是"admin"且密码是"123456",则在控制台输出"登录成功",否则输出"用户名或密码错误"。 这个例子展示了如何使用QML控件创建一个简单的登录界面,在实际应用中,我们可以根据需要添加更多的功能和界面元素。 ### 回答3: 在QT使用QML的控件,可以举一个常见的例子是使用QML的Text控件来显示文本内容。 QML的Text控件是一个用于显示文本的基础控件,它可以用来展示静态文本或动态文本,支持设置字体、颜色、大小、对齐方式等属性,以及响应用户的点击事件。 例如,我们可以创建一个QML文件,命名为example.qml,其中包含一个Text控件,用于显示"Hello World!"这个文本。具体代码如下: ```qml import QtQuick 2.0 Text { text: "Hello World!" font.pixelSize: 24 color: "red" anchors.centerIn: parent } ``` 在QT中,我们可以使用QQmlApplicationEngine类来加载这个QML文件,并将其作为界面展示出来。具体代码如下: ```cpp #include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/example.qml"))); return app.exec(); } ``` 通过以上代码,我们可以在QT应用程序中展示一个带有"Hello World!"文本的界面。可以根据需求对Text控件的属性进行修改,例如改变字体大小、颜色,来实现不同的显示效果。 这只是一个简单的例子,QT使用QML的控件还有很多种类,可以根据不同的需求选择适合的控件来实现界面显示和交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁山1号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值