qt各控件总结

qt控件又称组件或者部件,指用户看到的所有可视化界面以及界面中的各个元素,比如按钮,文本框,输入框等。

1.QMainWindow类生成的窗口自带菜单栏,工具栏和状态栏,中央区域还可添加多个控件,常用来作为应用程序的主窗口;
2.QDialog类生成的窗口非常简单,没有菜单栏,工具栏和状态栏,但可以添加多个控件,常用来制作对话框。
3.QWidget类,用法非常灵活,即可用来制作窗口,还可作为某个窗口上的控件。
实际开发中,制作应用程序的主窗口可以用QMainWindow或者QWidget;制作提示信息的对话框用QDialog或QWidget;如果暂时无法决定,后续可能作为窗口,也可能作为控件,就选择QWidget。

实例:

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //添加窗口
    QWidget widget;
    //定义一个按钮,它位于 widget 窗口中
    QPushButton But("按钮控件",&widget);
    //设置按钮的位置和尺寸
    But.setGeometry(10,10,100,50);
    //信号与槽,实现当用户点击按钮时,widget 窗口关闭
    QObject::connect(&But,&QPushButton::clicked,&widget,&QWidget::close);
    //让 widget 窗口显示
    widget.show();
    return a.exec();
}

整个程序的运行过程如下:

1.先创建了一个 QWidget 窗口,在窗口上添加一个 QPushButton 按钮;
2.当用户点击按钮时,Qt 会将此事件分派给 QPushButton 类的 mousePressEvent() 事件处理函数;mousePressEvent()函数内部会改变按钮的属性,提示用户成功按下了按钮,还会调用 clicked() 函数发出“用户点击按钮”的信号。对于发出的信号,程序中调用 connect() 函数指定 QWidget 类的 close() 函数接收 clicked() 信号,close() 函数会关闭 widget 窗口。
信号和槽:
是Qt特有的消息传输机制,它能将相互独立的控件关联起来。
每个信号都可以用函数表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。
信号函数和槽函数通常位于某个类中,和普通成员函数比,特别之处:
1.信号函数用signal关键字修饰,槽函数用public slots protected slots 或者 private slots 修饰
2.信号函数只需要声明,不需要定义(实现),槽函数需要定义(实现)
实际开发中:可以使用qt提供的信号函数和槽函数,也可以根据需要自定义信号函数和槽函数。
qt QLabel文本框的使用:
1.QLabel是qt帮我们写好的一个控件类,间接继承与QWidget类,继承关系:
QLabel->QFrame->QWidget
基础功能:显示一串文本。如:显示一个普通的文本框,还可以放置图片,超链接,动画等内容。

实例:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个文本框
    QLabel lab;
    //设置文本框内容居中显示
    lab.setAlignment(Qt::AlignCenter);
    //设置文本框的坐标和尺寸
    lab.setGeometry(100,100,400,400);
    //设置文本框的外观,包括字体的大小和颜色、按钮的背景色
    lab.setStyleSheet("QLabel{font:30px;color:red;background-color:rgb(f9,f9,f9);}");
    //设置文本框要显示超链接内容
    lab.setText("<a href=\"http://c.biancheng.net\">C语言中文网");
    //当用户鼠标位于文本框上时,显示提示内容
    lab.setToolTip("点击超链接显示URL");
    //提示内容显示 1 秒
    lab.setToolTipDuration(1000);
    //为文本框设置信号和槽,当用户点击超链接时,将文本框内容改为超链接的 URL
    QObject::connect(&lab,&QLabel::linkActivated,&lab,&QLabel::setText);
    //程序运行后,文本框显示
    lab.show();

    return a.exec();
}

执行结果如下图所示,用户最先看到的是图 3a),当用户鼠标移动到文本框区域内时,会提示“点击超链接显示URL”,提示时间为 1 秒。当用户点击“C语言中文网”时会触发 linkActivated() 信号函数,该函数会调用 setText() 函数,将文本框中显示的“C语言中文网”改为“http://c.biancheng.net”,字体颜色为红色,如图 3b) 所示。
在这里插入图片描述

2.QPushButton:实际开发中最常用的一种按钮,间接继承自QWidget,继承关系如下:
QPushButton->QAbstractButton->QWidget(其中QAbstractButton是所有按钮类的基类)
QPushButton类专门用来创建可按压的按钮;
功能:放置一串文本,文本左侧可以放置图标,必要时还可以在按钮上放置图片。

实例:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget widget;
    //设置 widget 窗口的标题
    widget.setWindowTitle("QWidget窗口");
    //创建一个按钮,并内嵌到 widget 窗口中
    QPushButton but("QPushButton按钮",&widget);
    //按钮的位置位于距 widget 窗口左上角 (100,100) 的位置
    but.move(100,100);
    //设置按钮上文字的大小。
    but.setStyleSheet("QPushButton{font:20px;}");
    //调整按钮的尺寸
    but.resize(200,200);
    //建立信息和槽,当用户点击并释放按钮后,该按钮隐藏。
    QObject::connect(&but,&QPushButton::clicked,&but,&QPushButton::hide);

    widget.show();
    return a.exec();
}

运行结果:点击图中按钮,按钮隐藏
在这里插入图片描述

3.QLineEdit是Qt提供的控件类,直接继承QWidget类,专门用来创建单行输入框。
实际开发中,经常用到QLineEdit输入框,如:接受用户输入的个人信息,账户信息,角色名称等。

实例:

#include <QApplication>
#include <QWidget>
#include <QLineEdit>

using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框的父窗口
    QWidget widget;
    //设置窗口的标题
    widget.setWindowTitle("QWidget窗口");
   
    //接下来,分别创建两个输入框,用于让用户分别输入账号和密码
    //创建账号输入框
    QLineEdit lineEdit(&widget);
    //指定输入框位于父窗口中的位置
    lineEdit.move(100,100);
    //设置提示信息
    lineEdit.setPlaceholderText("请输入账号...");
    //让输入框显示“一键清除”按钮
    lineEdit.setClearButtonEnabled(true);
   
    //创建密码输入框
    QLineEdit lineEditPass(&widget);
    lineEditPass.setPlaceholderText("请输入密码...");
    lineEditPass.move(100,150);
    //指定文本显示方式,保护用户账号安全
    lineEditPass.setEchoMode(QLineEdit::Password);
   
    //指定窗口的尺寸和显示文字的大小
    widget.resize(500,300);
    widget.setFont(QFont("宋体",16));

    widget.show();
    return a.exec();
}

运行结果为:
在这里插入图片描述

4.QListWidget列表框,可以很轻松地创建一个列表。继承关系:
QListWidget -> QListView -> QAbstractItemView -> QAbstractScrollArea -> QFrame -> QWidget
QListWidget 只能创建结构简单的列表,如果要制作复杂的列表,应优先考虑 QListView,因为它的功能更强大,很多 QListWidget 难以实现的功能,QListView 都能实现。

实例:

//main.cpp
#include <QApplication>
#include <QWidget>
#include <QListWidget>
#include <QLabel>
#include <QListWidgetItem>
using namespace std;

class QMyLabel:public QLabel{
    Q_OBJECT
public slots:
    void rsetText(QListWidgetItem *item);
};

void QMyLabel::rsetText(QListWidgetItem *item){
    this->setText(item->text());
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框的父窗口
    QWidget widget;

    //设置窗口的标题
    widget.setWindowTitle("QWidget窗口");
    widget.resize(500,500);

    QListWidget listWidget(&widget);
    listWidget.resize(500,400);
    listWidget.setFont(QFont("宋体",14));
    listWidget.addItem("C语言中文网");
    listWidget.addItem("http://c.biancheng.net");
    listWidget.addItem(new QListWidgetItem("Qt教程"));

    QMyLabel print;
    print.setText("选中内容");
    print.setParent(&widget);
    print.resize(500,100);
    print.move(0,400);
    print.setAlignment(Qt::AlignCenter);

    QObject::connect(&listWidget,&QListWidget::itemClicked,&print,&QMyLabel::rsetText);

    widget.show();
    return a.exec();
}
//QMyLabel类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include "当前源文件名.moc" 语句,否则无法通过编译。
#include "main.moc"

程序中,我们自定义了一个 QMyLabel 类,它继承自 QLabel 文本框类,因此 QMyLabel 也是一个文本框类。在 QMyLabel 类中,我们自定义了一个 rsetText() 槽函数。

运行结果:
在这里插入图片描述

5.QTableWidget
是qt的一种表格控件,类似于excel表格,可以以数据的方式展示给用户,如下图:
分为3个区域:
区域1,2都是表头,区域1设置每一行的表头,区域2设置每一列的表头。
区域3为数据区,表格中所有的数据位于此区域,该区域可以存放单元格,也可以存放按钮,文本框等控件。
QTableWidget 继承自 QTableView 类

实例:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStringList>
#include <QDebug>
#include <QPushButton>
using namespace std;

class QMyLabel:public QLabel{
    Q_OBJECT
public slots:
    void rsetText(QTableWidgetItem * item);
};

void QMyLabel::rsetText(QTableWidgetItem * item){
    this->setText(item->text());
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //创建一个窗口,作为输入框和列表框的父窗口
    QWidget widget;

    //设置窗口的标题
    widget.setWindowTitle("QTableWidget控件");
    //自定义窗口的大小
    widget.resize(900,500);
    //在 widget 窗口中添加一个 4 行 3 列的表格
    QTableWidget TableWidget(4,3,&widget);
    //自定义表格的尺寸和字体大小
    TableWidget.resize(900,350);
    TableWidget.setFont(QFont("宋体",20));
    //设置表格中每一行的表头
    TableWidget.setHorizontalHeaderLabels(QStringList() << "教程" << "网址" << "状态");
    //设置表格数据区内的所有单元格都不允许编辑
    TableWidget.setEditTriggers(QAbstractItemView::NoEditTriggers);
    //设置表格中每一行的内容
    TableWidget.setItem(0,0,new QTableWidgetItem("C语言教程"));
    TableWidget.setItem(0,1,new QTableWidgetItem("http://c.biancheng.net/c/"));
    TableWidget.setItem(0,2,new QTableWidgetItem("已更新完毕"));
    TableWidget.setItem(1,0,new QTableWidgetItem("Qt教程"));
    TableWidget.setItem(1,1,new QTableWidgetItem("http://c.biancheng.net/qt/"));
    TableWidget.setItem(1,2,new QTableWidgetItem("正在更新"));
    TableWidget.setItem(2,0,new QTableWidgetItem("C++教程"));
    TableWidget.setItem(2,1,new QTableWidgetItem("http://c.biancheng.net/cplus/"));
    TableWidget.setItem(2,2,new QTableWidgetItem("已更新完毕"));

    //向 widget 窗口中添加一个文本框
    QMyLabel lab;
    lab.setText("选中单元格");
    lab.setParent(&widget);
    //自定义文本框的尺寸和位置
    lab.resize(900,150);
    lab.move(0,350);
    lab.setAlignment(Qt::AlignCenter);
    lab.setFont(QFont("宋体",16));

    widget.show();
    //为表格和文本框之间建立关联,当用户点击表格中某个单元格时,文本框显示单元格内的文本内容。
    QObject::connect(&TableWidget,&QTableWidget::itemClicked,&lab,&QMyLabel::rsetText);
    return a.exec();
}
//QMyLabel类的定义应该放到 .h 文件中,本例中将其写到 main.cpp 中,程序最后需要添加 #include "当前源文件名.moc" 语句,否则无法通过编译。
#include "main.moc"

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值