Qt 输入组控件(Input Widgets)& 显示组控件(Display Widgets)详解

简介: Qt 输入组控件(Input Widgets)& 显示组控件(Display Widgets)详解

一、Qt 输入组控件(Input Widgets)

Qt Input Widgets是一组用户界面元素,用于输入和显示文字和数字等的数据。这些小部件可以组成各种不同的表单和对话框,用户可以使用这些小部件与程序交互。


以下是Qt Input Widgets的一些常见小部件:


  1. QLineEdit:用于单行文本输入,比如用户名和密码等。
  2. QTextEdit:用于多行文本输入,比如邮件正文等。
  3. QPlainTextEdit:用于纯文本的多行输入,比如代码编辑器等。
  4. QSpinBox:用于数字输入,比如选择年龄等。
  5. QComboBox:用于下拉选择列表,比如选择性别等。
  6. QCheckBox:用于选择复选框,比如选择喜欢的运动等。
  7. QRadioButton:用于选择单选按钮,比如选择语言等。
  8. Qt Input Widgets全部部件如下图:


af0077a770cf11452d75042b00a66377_928d56ac0d4a4efda8c8607ec23feb5b.png


控件名称依次解释如下:


  • 编辑组合框
  • 字体组合框
  • 行编辑框
  • 文本编辑框
  • 多行文本编辑器
  • 整数旋转框
  • 小数旋转框
  • 时间编辑
  • 日期编辑
  • 日期时间编辑
  • 表盘控件
  • 水平和垂直滚动条
  • 水平和垂直滑动条
  • 快捷键输入控件

案例分析:


main.window.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
 
// 1:Combo Box控件
#include <QComboBox>
 
 
// 2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>
 
// 3:Line Edit控件
#include <QLineEdit>
#include <QPushButton>
 
// 4:Plain Text Edit控件
#include <QPlainTextEdit>
#include <QRadioButton>
 
// 5:Spin Box控件
#include <QSpinBox>
 
// 6:时间控件
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>
 
 
// 7: Scroll Bar控件
#include <QScrollBar>
 
// 8: Key Sequence Edit控件
#include <QKeySequenceEdit>
 
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
    // 1:声明一个QComboBox对象
private:
    QComboBox *combobox;
private slots:
    void comboboxIndex(int);
 
    // 2:声明QFontComboBox/QLabel对象
private:
    QFontComboBox *fontcombobox;
    QLabel *qlabels;
private slots:
    void fontcomboboxFunc(QFont);
 
    // 3:声明QLineEdit/QPushButton/QLabel对象
private:
    QLineEdit *lineedit;
    QPushButton *pushbutton;
    QLabel *qlabely;
private slots:
    void pushbuttonclicked();
 
    // 4:声明QPlainTextEdit/QRadioButton对象
private:
    QPlainTextEdit *plaintedit;
    QRadioButton *radiobutton;
private slots:
    void radioButtonClicked();
 
    // 5:声明QPlainTextEdit/QRadioButton对象
private:
    QSpinBox *spinbox;
private slots:
    void spinboxValueChanged(int);
 
    // 6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
private:
    QDateTimeEdit *dte;
    QTimeEdit *te;
    QDateEdit *de;
 
    // 7:声明QScrollBar对象
private:
    QScrollBar *hscrollbar,*vscrollbar;
 
 
    // 8:声明QKeySequenceEdit对象
private:
    QKeySequenceEdit *kse;
private slots:
    void keyseqeditChanged(const QKeySequence &);
 
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QMessageBox>
#include <QDebug>
 
#include <QDir>
#include <QTextStream>
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
 
    // 设置主空格的显示位置及大小
    this->setGeometry(300,200,1000,600);
 
    // 1:QComboBox
    combobox=new QComboBox(this); // 实例化对象
    combobox->setGeometry(10,10,200,30);
    combobox->addItem("北京市");
    combobox->addItem("上海市");
    combobox->addItem("天津市");
    combobox->addItem("重庆市");
    combobox->addItem("湖南省");
    combobox->addItem("江西省");
    combobox->addItem("广东省");
    combobox->addItem("香港特别行政区");
    combobox->addItem("澳门特别行政区");
 
    // 信号槽函数连接实现
    connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
 
    // 2:QFontComboBox/QLabel
    fontcombobox=new QFontComboBox(this);
    qlabels=new QLabel(this);
    fontcombobox->setGeometry(10,50,200,30);
    qlabels->setGeometry(10,70,300,50);
 
    // 信号与槽函数连接
    connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
 
    // 3:QLineEdit/QPushButton/QLabel
    lineedit=new QLineEdit(this);
    lineedit->setGeometry(10,150,200,30);
    pushbutton=new QPushButton(this);
    pushbutton->setGeometry(220,150,100,30);
    pushbutton->setText("点击我");
    qlabely=new QLabel(this);
    qlabely->setGeometry(10,200,400,30);
    qlabely->setText("你输入的内容为:");
 
    // 信号与槽函数连接
    connect(pushbutton,SIGNAL(clicked()),this,SLOT(pushbuttonclicked()));
 
    // 4:QPlainTextEdit/QRadioButton
    plaintedit=new QPlainTextEdit(this);
    plaintedit->setGeometry(10,250,400,200);
    radiobutton=new QRadioButton(this);
    radiobutton->setGeometry(300,220,200,30);
    radiobutton->setText("只读模式");
 
    // 设置工作目录为可执行程序的工作目录
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile fe("moc_mainwindow.cpp"); // moc(Meta-Object Compiler,也就是“元对象编译器”)找不到返回上一级
    fe.open((QFile::ReadOnly|QFile::Text));
 
    // 加载到文件流
    QTextStream strin(&fe);
    plaintedit->insertPlainText(strin.readAll());
 
    // 信号与槽函数连接
    connect(radiobutton,SIGNAL(clicked()),this,SLOT(radioButtonClicked()));
 
 
    // 5: 改变窗口背景颜色
    this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%)}");
 
    spinbox=new QSpinBox(this);
    spinbox->setGeometry(440,250,150,30);
 
    spinbox->setRange(0,100);
    spinbox->setSingleStep(10);
    spinbox->setValue(100);
 
    spinbox->setSuffix("%不透明度");
 
    // 信号与槽函数连接
    connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));
 
 
    // 6:QDateTimeEdit/QTimeEdit/QDateEdit
    dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
    dte->setGeometry(440,290,200,30);
    te=new QTimeEdit(QTime::currentTime(),this);
    te->setGeometry(440,330,200,30);
    de=new QDateEdit(QDate::currentDate(),this);
    de->setGeometry(440,370,200,30);
 
 
    // 7: QScrollBar
    hscrollbar=new QScrollBar(Qt::Horizontal,this);
    hscrollbar->setGeometry(0,500,1000,30);
    vscrollbar=new QScrollBar(Qt::Vertical,this);
    vscrollbar->setGeometry(970,0,30,500);
 
    // 8:QKeySequenceEdit
    kse=new QKeySequenceEdit(this);
    kse->setGeometry(400,530,200,30);
    // 信号与槽函数连接
    connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),
             this,SLOT(keyseqeditChanged(const QKeySequence &)));
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
// 1:
void MainWindow::comboboxIndex(int index)
{
    qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<endl;
 
    QMessageBox mybox(QMessageBox::Question,"信息",combobox->itemText(index),QMessageBox::Yes|QMessageBox::No);
    mybox.exec();
}
 
// 2:
void MainWindow::fontcomboboxFunc(QFont font)
{
    qlabels->setFont(font);
    QString qStr="罗小白的干爹";
    qlabels->setText(qStr);
 
}
 
// 3:
void MainWindow::pushbuttonclicked()
{
    QString qStr;
    qStr="你输入的内容为:";
    qStr=qStr+lineedit->text();
 
    qlabely->setText(qStr);
    lineedit->clear();
}
 
// 4:
void MainWindow::radioButtonClicked()
{
    if(radiobutton->isChecked()){
        plaintedit->setReadOnly(true);
    }
    else
        plaintedit->setReadOnly(false);
}
 
// 5:
void MainWindow::spinboxValueChanged(int x)
{
    double dx=(double)x/100;
 
    this->setWindowOpacity(dx);
}
 
// 8:
void MainWindow::keyseqeditChanged(const QKeySequence &key)
{
    if(key==QKeySequence(tr("Ctrl+Q")))
        this->close();
    else
        qDebug()<<key.toString()<<endl;
 
}
 

编译执行结果:

二、Qt 显示组控件(Display Widgets)


Qt Display Widgets 是 Qt 框架中用于显示和展示数据的相关窗口部件。该部件库包含了多种用于显示文本、图像、图表、列表、树形结构等数据的窗口部件,支持用户交互、布局和样式自定义等功能。以下是 Qt Display Widgets 的主要部件:


  1. QLabel:用于显示文本和图像。
  2. QTextEdit:用于显示和编辑富文本。
  3. QPlainTextEdit:用于显示和编辑纯文本。
  4. QListView:用于显示列表数据。
  5. QTreeView:用于显示树形结构数据。
  6. QTableWidget:用于显示二维表格数据。
  7. QChartView:用于显示各种图表,如折线图、柱状图、饼图等。


Qt Display Widgets 全部部件如下图:


ed6bba343f563aed5a5876ad8f262a6c_d396b7ded0bf4e2d8a8f93a7d2dbc428.png


控件名称依次解释如下:


  • Label: 标签
  • Text Browser:文本浏览器
  • Graphics View :图形视图框架
  • Calendar Widget : 日历控件
  • LCD Number:液晶字体数字控件
  • Progress Bar: 进度条
  • Horizontal Line/Vertical Line :水平线/垂直线
  • OpenGL Widget : OpenGL 图形染控件
  • QQuickWidget :QML 嵌入控件

案例实现功能:


  • Label: 标签 -> 放图片
  • Text Browser:文本浏览器 -> 存放打开的文件
  • 测试进度条
  • 通过按钮开始或暂停定时


ui绘图:

widget.h

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
// 1:
#include <QMessageBox>
 
// 2:
#include <QFile>
 
// 4:
#include <QTimer>
 
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
 
private slots:
    void on_pushButtonProgressBar_clicked();
 
    void on_pushbtnstart_clicked();
 
    void on_pushbtnpause_clicked();
 
    void on_pushbtnreset_clicked();
 
    // 4:
    // 自定义函数:定时器
    void on_timerout();
private:
    int iValues=0;
    QTimer *timers; // 定时器
    void InitFunc();
 
private:
    Ui::Widget *ui;
 
    // 1:
private:
    void textlabelFunc();
 
    // 2:
private:
    void textbrowserFuncReadTxt();
 
};
#endif // WIDGET_H

main.cpp

#include "widget.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    // 1:调用函数
    textlabelFunc();
 
    // 2:调用函数
    textbrowserFuncReadTxt();
 
    // 3:初始化进程条
    ui->progressBar->setRange(0,1000000);
    ui->progressBar->setValue(0);
 
    // 4:
    InitFunc();
    // 信号与槽函数连接
    connect(timers,&QTimer::timeout,this,&Widget::on_timerout);
 
}
 
Widget::~Widget()
{
    delete ui;
}
 
// 1:
void Widget::textlabelFunc()
{
    QString fName("D:\\刘德华.jpg");
 
    QImage *qimg=new QImage;
 
    if(!(qimg->load(fName))) // 判断加载图片
    {
        QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查?");
        delete  qimg;
 
        return;
    }
 
    ui->label->setPixmap(QPixmap::fromImage(*qimg));
}
 
// 2:
void Widget::textbrowserFuncReadTxt()
{
    QString qStrdData;
    QFile qfile("d:\\THIRD-PARTY-LICENSES.txt");
 
    if(!(qfile.open(QIODevice::ReadOnly|QIODevice::Text)))
    {
        QMessageBox::warning(this,"失败","打开文件失败,请重新检查?");
    }
 
    while (!qfile.atEnd())
    {
        QByteArray ay=qfile.readLine();
        QString strs(ay);
        qStrdData.append(strs);
    }
 
    ui->textBrowser->setText(qStrdData);
}
 
void Widget::on_pushButtonProgressBar_clicked()
{
    for(int i=1;i<=1000000;i++)
    {
        for(int j=0;j<1;j++)
        {
            ui->progressBar->setValue(i);
        }
    }
}
 
void Widget::on_pushbtnstart_clicked()
{
    timers->start(); // 1s触发一次操作
    ui->pushbtnstart->setEnabled(false);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(true);
 
}
 
void Widget::on_pushbtnpause_clicked()
{
    timers->stop(); // 1s触发一次操作
    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(false);
    ui->pushbtnreset->setEnabled(true);
 
}
 
void Widget::on_pushbtnreset_clicked()
{
    timers->stop(); // 1s触发一次操作
    iValues=0;
 
    ui->lcdNumber->display(iValues);
 
    ui->pushbtnstart->setEnabled(true);
    ui->pushbtnpause->setEnabled(true);
    ui->pushbtnreset->setEnabled(false);
 
}
 
void Widget::InitFunc()
{
    timers=new QTimer(this);
    timers->setInterval(1000); // 定时周期为1s
    timers->stop();
 
}
 
void Widget::on_timerout()
{
    iValues++;
    ui->lcdNumber->display(iValues);
}

编译执行结果:

相关文章
|
1月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
81 2
|
1月前
|
算法 API C++
【Qt UI】QT 窗口/控件置顶方法详解
【Qt UI】QT 窗口/控件置顶方法详解
161 0
|
1月前
|
算法 前端开发 C++
【Qt UI相关】Qt设置窗体或控件的背景色透明
【Qt UI相关】Qt设置窗体或控件的背景色透明
94 0
|
2天前
Qt控件(按钮、单选、复选、list、tree、table)
Qt控件(按钮、单选、复选、list、tree、table)
9 2
|
1月前
|
图形学 C++ 容器
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
|
1月前
|
容器 内存技术
Qt中常用容器组控件介绍和实操-1
Qt中常用容器组控件介绍和实操
|
1月前
|
API 容器
Qt中常用容器组控件介绍和实操-2
Qt中常用容器组控件介绍和实操
|
1月前
|
安全
qt.qpa.xcb: could not connect to display 问题解决
【5月更文挑战第16天】qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 问题解决
420 0