Qt常用控件介绍(二)

显示窗口部件

Qt Designer 显示窗口部件提供的面板中,提供了 10 种显示小部件。
在这里插入图片描述
(1) Label:标签
(2) Text Browser:文本浏览器
(3) Graphics View:图形视图
(4) Calendar Widget:日历
(5) LCD Number:液晶数字
(6) Progress Bar:进度条
(7) Horizontal Line:水平线
(8) Vertial Line:垂直线
(9) OpenGL Widget:开放式图形库工具
(10) QQuick Widget:嵌入式 QML 工具
这十种按钮部件作用简介如下:
QLabel提供了一种用于文本或图像显示的小部件。
QCalendarWidget 继承 QWidget。 QCalendarWidget 类提供了一个基于月的日历小部件,允许用户选择日期。 CalendarWidget 小部件是用当前月份和年份初始化的, QCalendarWidget 还提
供了几个公共插槽来更改显示的年份和月份。
QLCDNumber 继承 QFrame。 QLCDNumber 小部件显示一个类似于 lcd 的数字。 QLCDNumber 小部件可以显示任意大小的数字。它可以显示十进制、十六进制、八进制或二进制数字。使用 display()插槽很容易连接到数据源,该插槽被重载以接受五种参数类型中的任何一种。
QProgressBar 继承 QWidget。 QProgressBar 小部件提供了一个水平或垂直的进度条。进度条用于向用户显示操作的进度,并向他们确认应用程序仍在运行。
QFrame 继承 QWidget。 QFrame 类是有框架的窗口部件的基类,它绘制框架并且调用一个虚函数 drawContents()来填充这个框架。这个函数是被子类重新实现的。这里至少还有两个有用
的函数: drawFrame()和 frameChanged()。
QTextBrowser 继承 QTextEdit, QTextBrowser 类提供了一个具有超文本导航的文本浏览器。
该类扩展了 QTextEdit(在只读模式下),添加了一些导航功能,以便用户可以跟踪超文本文档中的链接。
QGraphicsView 继承 QAbstractScrollArea。 QGraphicsView 是图形视图框架的一部分,它提供了基于图元的模型/视图编程。QGraphicsView 在可滚动视图中可视化 QGraphicsScene 的内容。
要创建带有几何项的场景,请参阅 QGraphicsScene 的文档。
要可视化场景,首先构造一个 QGraphicsView 对象,将要可视化的场景的地址传递给 QGraphicsView 的构造函数。或者,可以调用 setScene()在稍后设置场景。

QLabel

QLabel 提供了一种用于文本或图像显示的小部件,在上节中,只用了它显示文本,其实它还可以用于显示图像。

/* 引入 QCheckBox */
#include <QLabel>

private:
    /* 用一个QLabel对象用于显示字符串 */
    QLabel *labelString;

    /* 用一个QLabel对象用于显示图像 */
    QLabel *labelImage;
void checkBoxStateChanged(int);
/****************mainwindow.cpp 编程添加代码***********/
/* 设置大小与位置 */
    this->setGeometry(0, 0, 800, 480);

    /* 使用资源里的文件时格式是  :+前缀+文件路径  */
    QPixmap pixmap(":images/openedv.png");

    labelImage = new QLabel(this);

    /* 标签大小为452×132,根据图像的大小来设置 */
    labelImage->setGeometry(180, 150, 452, 132);
    /* 设置图像 */
    labelImage->setPixmap(pixmap);
    /* 开启允许缩放填充 */
    labelImage->setScaledContents(true);

    labelString = new QLabel(this);
    labelString->setText("标签演示文本");
    labelString->setGeometry(300, 300, 100, 20);

运行效果如下:
在这里插入图片描述

QCalendarWidget

QCalendarWidget 继承 QWidget。 QCalendarWidget 类提供了一个基于月的日历小部件,允许用户选择日期。 CalendarWidget 小部件是用当前月份和年份初始化的, QCalendarWidget 还提供了几个公共插槽来更改显示的年份和月份。

#include <QCalendarWidget>
#include <QPushButton>
#include <QLabel>
private:
    /* 声明QCalendarWidget,QPushButton,QLabel对象 */
    QCalendarWidget *calendarWidget;
    QPushButton *pushButton;
    QLabel *label;

private slots:
    /* 槽函数 */
    void calendarWidgetSelectionChanged();
    void pushButtonClicked();
/****************mainwindow.cpp 编程添加代码***********/
/* 设置位置与大小,下同 */
    this->setGeometry(0, 0, 800, 480);

    /* 对象实例化设置显示的位置与大小 */
    calendarWidget = new QCalendarWidget(this);
    calendarWidget->setGeometry(200, 20, 400, 300);

    QFont font;
    /* 设置日历里字体的大小为10像素 */
    font.setPixelSize(10);
    calendarWidget->setFont(font);

    /* 对象实例化设置显示的位置与大小 */
    pushButton = new QPushButton("回到当前日期",this);
    pushButton->setGeometry(200, 350, 100, 30);

    /* 对象实例化设置显示的位置与大小 */
    label = new QLabel(this);
    label->setGeometry(400, 350, 400, 30);
    QString str = "当前选择的日期:"
            + calendarWidget->selectedDate().toString();
    label->setText(str);

    /* 信号槽连接 */
    connect(calendarWidget, SIGNAL(selectionChanged()),
            this, SLOT(calendarWidgetSelectionChanged()));
    connect(pushButton, SIGNAL(clicked()),
            this, SLOT(pushButtonClicked()));
void MainWindow::calendarWidgetSelectionChanged()
{
   
    /* 当日历点击改变当前选择的期时,更新Label的显示内容 */
    QString str = "当前选择的日期:"
            + calendarWidget->selectedDate().toString();
    label->setText(str);
}

void MainWindow::pushButtonClicked()
{
   
    /* 设置当前选定的日期为系统的QDate */
    calendarWidget->setSelectedDate(QDate::currentDate());
}

运行效果如下:
在这里插入图片描述

QLCDNumber

QLCDNumber 继承 QFrame。 QLCDNumber 小部件显示一个类似于 lcd 的数字。QLCDNumber 小部件可以显示任意大小的数字。它可以显示十进制、十六进制、八进制或二进制数字。使用 display()插槽很容易连接到数据源,该插槽被重载以接受五种参数类型中的任何一种。

#include <QLCDNumber>
#include <QTimer>
#include <QTime>
private:
    /* 声明QLCDNumber对象 */
    QLCDNumber *lcdNumber;

    /* 声明QTimer对象 */
    QTimer *timer;

private slots:
    /* 槽函数 */
    void timerTimeOut();
/****************mainwindow.cpp 编程添加代码***********/
/* 设置主窗体的大小与位置 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化与设置显示的位置大小*/
    lcdNumber = new QLCDNumber(this);
    lcdNumber->setGeometry(300, 200, 200, 50);

    /* 设置显示的位数8位 */
    lcdNumber->setDigitCount(8);
    /* 设置样式 */
    lcdNumber->setSegmentStyle(QLCDNumber::Flat);

    /* 设置lcd显示为当前系统时间 */
    QTime time = QTime::currentTime();

    /* 设置显示的样式 */
    lcdNumber->display(time.toString("hh:mm:ss"));

    timer = new QTimer(this);
    /* 设置定时器1000毫秒发送一个timeout()信号 */
    timer->start(1000);

    /* 信号槽连接 */
    connect(timer, SIGNAL(timeout()), this,
            SLOT(timerTimeOut()));
void MainWindow::timerTimeOut()
{
   
    /* 当定时器计时1000毫秒后,刷新lcd显示当前系统时间 */
    QTime time = QTime::currentTime();
    /* 设置显示的样式 */
    lcdNumber->display(time.toString("hh:mm:ss"));
}

运行效果如下:
在这里插入图片描述

QProgressBar

QProgressBar 继承 QWidget。 QProgressBar 小部件提供了一个水平或垂直的进度条。进度条用于向用户显示操作的进度,并向他们确认应用程序仍在运行。

#include <QProgressBar>
#include <QTimer>
private:
    /* 声明对象 */
    QProgressBar *progressBar;
    QTimer *timer;

    /* 用于设置当前QProgressBar的值 */
    int value;

private slots:
    /* 槽函数 */
    void timerTimeOut();
/****************mainwindow.cpp 编程添加代码***********/
/* 设置主窗体位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    progressBar = new QProgressBar(this);
    progressBar->setGeometry(300, 200, 200, 60);

    /*样式表设置,常用使用setStyleSheet来设置样式(实现界面美化的功能),
     * 具体可参考seTyleSheet */
    progressBar->setStyleSheet (
                "QProgressBar{border:8px solid #FFFFFF;"
                "height:30;"
                "border-image:url(:/images/battery.png);" //背景图片
                "text-align:center;"    // 文字居中
                "color:rgb(255,0,255);"
                "font:20px;"      // 字体大小为20px
                "border-radius:10px;}"
                "QProgressBar::chunk{"
                "border-radius:5px;" // 斑马线圆角
                "border:1px solid black;" // 黑边,默认无边
                "background-color:skyblue;"
                "width:10px;margin:1px;}" // 宽度和间距
                );

    /* 设置progressBar的范围值 */
    progressBar->setRange(0, 100);
    /* 初始化value为0 */
    value = 0;
    /* 给progressBar设置当前值 */
    progressBar->setValue(value);
    /* 设置当前文本字符串的显示格式 */
    progressBar->setFormat("充电中%p%");

    /* 定时器实例化设置每100ms发送一个timeout信号 */
    timer = new QTimer(this);
    timer->start(100);

    /* 信号槽连接 */
    connect(timer, SIGNAL(timeout()),
            this, SLOT(timerTimeOut()));
void MainWindow::timerTimeOut()
{
   
    /* 定显示器时间到,value值自加一 */
    value ++;
    progressBar->setValue(value);
    /* 若value值大于100,令value再回到0 */
    if(value>100)
        value = 0;
}

运行效果如下:
在这里插入图片描述

QFrame

QFrame 继承 QWidget。 QFrame 类是有框架的窗口部件的基类,它绘制框架并且调用一个虚函数 drawContents()来填充这个框架。这个函数是被子类重新实现的。这里至少还有两个有用的函数: drawFrame()和 frameChanged()。
QPopupMenu 使用这个来把菜单“升高”,高于周围屏幕。 QProgressBar 有“凹陷”的外观。
QLabel 有平坦的外观。这些有框架的窗口部件可以被改变。
QFrame::Shape 这个枚举类型定义了 QFrame 的框架所使用的外形。当前定义的效果有:

  • NoFrame - QFrame 不画任何东西
  • Box - QFrame 在它的内容周围画一个框
  • Panel - QFrame 画一个平板使内容看起来凸起或者凹陷
  • WinPanel - 像 Panel,但 QFrame 绘制三维效果的方式和 Microsoft Windows 95(及其它)的一样
  • ToolBarPanel - QFrame 调用 QStyle::drawToolBarPanel()
  • MenuBarPanel - QFrame 调用 QStyle::drawMenuBarPanel()
  • HLine - QFrame 绘制一个水平线,但没有框任何东西(作为分隔是有用的)
  • VLine - QFrame 绘制一个竖直线,但没有框任何东西(作为分隔是有用的)
  • StyledPanel - QFrame 调用 QStyle::drawPanel()
  • PopupPanel - QFrame 调用 QStyle::drawPopupPanel()
    阴影风格有:
  • Plain 使用调色板的前景颜色绘制(没有任何三维效果)。
  • Raised 使用当前颜色组的亮和暗颜色绘制三维的凸起线。
  • Sunken 使用当前颜色组的亮和暗颜色绘制三维的凹陷线。
#include <QFrame>
private:
    /* 声明对象 */
    QFrame *hline;
    QFrame *vline;
/****************mainwindow.cpp 编程添加代码***********/
 /* 设置主窗体的显示位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 实例化 */
    hline = new QFrame(this);
    /* 确定起始点,设置长和宽,绘制距形 */
    hline->setGeometry(QRect(200, 100, 400, 40));

    /* 设置框架样式为Hline,水平,可设置为其他样式例如Box,
     * 由于是样式选择HLine,所以只显示一条水平直线
     */
    hline->setFrameShape(QFrame::HLine);
    /* 绘制阴影 */
    hline->setFrameShadow(QFrame::Sunken);

    /* 实例化 */
    vline = new QFrame(this);
    /* 确定起始点,设置长和宽,绘制距形 */
    vline->setGeometry(QRect(300, 100, 2, 200));

    /* 设置框架样式为Vline,垂直,可设置为其他样式例如Box,
     * 由于是样式选择Vline,所以只显示一条垂直直线
     */
    vline->setFrameShape(QFrame::VLine);
    /* 绘制阴影 */
    vline->setFrameShadow(QFrame::Sunken);

运行效果如下:
在这里插入图片描述

显示窗口部件之浏览器

QTextBrowser

QTextBrowser 继承 QTextEdit, QTextBrowser 类提供了一个具有超文本导航的文本浏览器。该类扩展了 QTextEdit(在只读模式下),添加了一些导航功能,以便用户可以跟踪超文本文档中的链接。

#include <QTextBrowser>
private:
   
    /* 声明对象 */
    QTextBrowser *textBrowser;
    QAction *openAction;

private slots:
    /* 槽函数 */
    void openActionTriggered();
/****************mainwindow.cpp 编程添加代码***********/
#include <QFileDialog>
#include <QTextStream>
 /* 设置主窗体位置与大小 */
    this->setGeometry(0, 0, 800, 480);

    /* 将窗口标题设置为文本浏览器 */
    this->setWindowTitle("文本浏览器");

    /* 实例化 */
    textBrowser = new QTextBrowser(this);
    /* 将文本浏览器窗口居中 */
    this->setCentralWidget(textBrowser);

    /* 实例化 */
    openAction = new QAction("打开",this);
    /* ui窗口自带有menubar(菜单栏)、mainToolbar(工具栏)与
     * statusbar(状态栏)
     * menuBar是ui生成工程就有的,所以可以在menubar里添加
     * 我们的QActiont等,如果不需要menubar,可以在ui设计
     * 窗口里,在右则对象里把menubar删除,再自己重新定义自己的
     * 菜单栏
     */
    /* 将动作添加到菜单栏 */
    ui->menubar->addAction(openAction);

    /* 信号槽连接 */
    connect(openAction, SIGNAL(triggered()),
            this, SLOT(openActionTriggered()));
void MainWindow::openActionTriggered()
{
   
    /* 调用系统打开文件窗口,过滤文件名 */
    QString fileName = QFileDialog::getOpenFileName(
                this,tr("打开文件"),"",
                tr("Files(*.txt *.cpp *.h *.html *.htm)")
                );
    QFile myFile(fileName);
    /* 以只读、文本方式打开,若打开失败,则返回 */
    if(!myFile.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    /* 用QTextStream对象接收 */
    QTextStream in (&myFile);

    /* 读取全部数据 */
    QString myText = in.readAll();

    /* 判断打开文件的后缀,如果是html格式的则设置文本浏览器为html格式 */
    if(fileName.endsWith("html") || fileName.endsWith("htm")){
   
        textBrowser->setHtml(myText);
    } else 
  • 21
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

六竹书生__wa

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

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

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

打赏作者

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

抵扣说明:

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

余额充值