QT中大部分部件如何使用举例详解

目录
  • 【1】main.cpp
  • 【2】mainwindow.h
  • 【3】mainwindow.cpp
  • 【4】ui界面设计
  • 【5】代码运行效果图
  • 总结

内容繁多,直接上代码

重点请看mainwindow.cpp的中代码和ui如何设计的

【1】main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

【2】mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QPushButton>
#include <QMainWindow>
#include <QTextCodec>//解决字符编码乱码问题
#include<QTextEdit>
#include <QSlider>//滑动杆
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:

private slots:
    void    textbutton_1();
    void on_PBT_clicked();
    void on_PBJ_clicked();
    void on_PBL_clicked();
    void on_pushButton_8_clicked();
    void on_pushButton_9_clicked();
    void on_pushButton_11_clicked();
    void on_pushButton_13_clicked();
    void on_pushButton_12_clicked();
    void on_pushButton_10_clicked();
    void display(int);
    void on_horizontalScrollBar_valueChanged(int value);
    void on_verticalScrollBar_valueChanged(int value);
    void on_horizontalSlider_valueChanged(int value);
    void on_verticalSlider_valueChanged(int value);
    void on_calendarWidget_clicked(const QDate &date);
    void on_pushButton_15_clicked();
    void on_pushButton_14_clicked();
    void on_pushButton_17_clicked();

private:
    Ui::MainWindow *ui;
    QTextCodec *codec;
    QString filename;

    QPushButton* bt_filename;
    QPushButton* bt_getcolor;
    QPushButton* bt_getfont;
    QPushButton* bt_getinput;
    QPushButton* bt_error;
    QPushButton* bt_message;
    QPushButton* bt_progress;
    QTextEdit *te_test;

    QPushButton *p1;
    QScrollBar *sb;

};
#endif // MAINWINDOW_H

【3】mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QString>
#include<QProgressBar>//进度条头文件
#include<QDebug>//控制台输出
//==========================布局管理器
#include<QVBoxLayout>//水平
#include<QHBoxLayout>//垂直
#include<QGridLayout>//网格
//==========================各大对话框类
#include<QColorDialog>
#include<QFileDialog>
#include<QInputDialog>
#include<QErrorMessage>
#include <QProgressDialog>
#include <QFontDialog>
#include<QFileDialog>
#include<QMessageBox>
//文件读写
#include <QFile>
//行编辑
#include<QLineEdit>
//滚动条
#include<QScrollBar>

//标签显示动画
#include<QMovie>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->progressBar->setValue(0);
    codec = QTextCodec::codecForName("gbk");//设置字符编码
    codec->setCodecForLocale(codec);
    setWindowTitle(codec->toUnicode("UI学习笔记"));

    ui->stackedWidget->setCurrentIndex(0);//显示当前索引,第一页
    //文件对话框
    connect(ui->pushButton_2,&QPushButton::clicked,[&]{QString filename =
    QFileDialog::getOpenFileName();ui->textEdit_3->append(filename);});

    //颜色对话框
       connect(ui->pushButton_3, &QPushButton::clicked, [&](){
           QColor color = QColorDialog::getColor();
           ui->textEdit_3->setTextColor(color);
       });

    //字体对话框
       bool ok;
       connect(ui->pushButton_4,&QPushButton::clicked,[&](){QFont font = QFontDialog::getFont(&ok);
           if(ok)
          {
               ui->textEdit_3->setCurrentFont(font);
           }
       });

       //输入对话框
       connect(ui->pushButton_5, &QPushButton::clicked, [&](){
           QString str = QInputDialog::getText(this, "Title", "input");
           ui->textEdit_3->append(str);
       });
        //信息对话框
       connect(ui->pushButton_6,&QPushButton::clicked,[&](){
        int ret = QMessageBox::information(this,"Title","you yyds",QMessageBox::Ok,QMessageBox::Apply,QMessageBox::Close);
        if(ret ==QMessageBox::Ok)
        {
            ui->textEdit_3->append("111111111111111111111111");
        }
       });
    //错误对话框
       connect(ui->pushButton_7, &QPushButton::clicked, [&](){
           QErrorMessage *error= new QErrorMessage;
           error->showMessage("error  error  error");
       });

}

MainWindow::~MainWindow()
{
    delete ui;

}

//浏览按钮
void MainWindow::on_PBL_clicked()
{
    filename = QFileDialog::getOpenFileName();//文件对话框
    ui->lineEdit->setText(filename);
}

//加密按钮
void MainWindow::on_PBJ_clicked()
{
    //读写文件打开
    QFile f(filename);
    if(!f.open(QIODevice::ReadWrite))
        return;
    //读取全部内容
    QByteArray buf = f.readAll();
    ui->textEdit->append(codec->toUnicode(buf));//加密前
    ui->progressBar->setRange(0,buf.length()-1);

    for(int i=0; i<buf.length();i++)
    {
        buf[i]=~buf[i];
        ui->progressBar->setValue(i);//进度条
    }
    ui->textEdit_2->append(codec->toUnicode(buf));//加密后
    //回写
    f.seek(0);
    f.write(buf);
    //关闭
    f.close();
}
//下一页
void MainWindow::on_PBT_clicked()
{
    ui->stackedWidget->setCurrentIndex(1);
}

//上一页:
void MainWindow::on_pushButton_8_clicked()
{
    ui->stackedWidget->setCurrentIndex(0);
}

//下一页
void MainWindow::on_pushButton_9_clicked()
{
    ui->pushButton->setIconSize(QSize(80,80));//设置按钮图标大小
    //ui->pushButton->setFlat(true);//设置无边框
    ui->pushButton->setIcon(QIcon("C:/Users/SuJieYin/Pictures/Saved Pictures/1.png"));
    ui->pushButton->show();

    ui->toolButton->setIconSize(QSize(50,50));
    //ui->toolButton->setIcon(QIcon("C:/Users/SuJieYin/Pictures/Saved Pictures/1.png"));
    ui->toolButton->setToolTip("Tip");//选中按钮时,会有提示文字
    ui->toolButton->setText("toolbutton");
    ui->toolButton->show();
    //绑定快捷键
    ui->toolButton->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_W));
    connect(ui->toolButton,SIGNAL(clicked(bool)),this,SLOT(textbutton_1()));

    //RadioButton_2设置图标
    ui->radioButton_2->setIcon(QIcon("C:/Users/SuJieYin/Pictures/Saved Pictures/1.png"));
    ui->radioButton_2->click();//选中按钮
    ui->radioButton_2->setEnabled(true);//设置使能
    connect(ui->radioButton_2, &QRadioButton::clicked, [&](){//lamda表达式(无名函数)
        qDebug()<<"RadioButton_2";
    });
    //CheckBox按钮
    ui->checkBox_2->setIcon(QIcon("C:/Users/SuJieYin/Pictures/Saved Pictures/1.png"));
    connect(ui->checkBox_2, &QRadioButton::clicked, [&](){//lamda表达式(无名函数)
        qDebug()<<"checkBox_2";
    });

     //行编辑框使用举例
    ui->lineEdit_2->setEchoMode(QLineEdit::Password);//行编辑框输入隐藏
    //选中检查框,显示密码,
    connect(ui->checkBox_3,&QCheckBox::clicked,[&](bool x){
           ui->lineEdit_2->setEchoMode(x?QLineEdit::Normal:QLineEdit::Password);
    } );

    ui->stackedWidget->setCurrentIndex(2);//显示这一页的所有部件
}

//快捷键和单击按钮都可以触发
void MainWindow::textbutton_1()
{
    qDebug()<<"CTRL+w";
}

//下一页:实现输入小部件类组件
void MainWindow::on_pushButton_13_clicked()
{
    //组合k框
    ui->comboBox->addItem("com1");
    ui->comboBox->addItem("com2");
    //点击文本后,显示文本
    connect(ui->comboBox,&QComboBox::currentTextChanged,[&](QString x){
           ui->label_5->setText(x);});

    //字体选择框
    connect(ui->fontComboBox,&QFontComboBox::currentFontChanged,[&](QFont x){
    ui->label_6->setFont(x);
    ui->label_6->setText("OKKO");
    ui->lineEdit_3->setFont(x);
    ui->textEdit_4->setCurrentFont(x);
    ui->plainTextEdit->setToolTip("123");//设置提示
    ui->plainTextEdit->appendPlainText("http://");//显示文本
    });

    //自旋框
    ui->spinBox->setRange(0,10);//设置取值范围
    connect(ui->spinBox,SIGNAL(valueChanged(int)),ui->lcdNumber,SLOT(display(int)));
     ui->stackedWidget->setCurrentIndex(3);

     //旋钮
     connect(ui->dial,SIGNAL(valueChanged(int)),ui->lcdNumber,SLOT(display(int)));

       //滚动条
     //sb= new QScrollBar;//没有指定窗口,会自己弹出一个窗口;
     sb= new QScrollBar(ui->page_4);//只显示在这页【重点】
     sb->setOrientation(Qt::Horizontal);//设置水平方向
     sb->setGeometry(20,500,100,10);
     sb->show();
     connect(sb,SIGNAL(valueChanged(int)),ui->lcdNumber,SLOT(display(int)));

      ui->stackedWidget->setCurrentIndex(3);
}
//上一页
void MainWindow::on_pushButton_12_clicked()
{
  ui->stackedWidget->setCurrentIndex(1);
}

//下一页【第5页】
void MainWindow::on_pushButton_11_clicked()
{

    ui->label_8->setAlignment(Qt::AlignCenter);//水平居中
    ui->label_8->setScaledContents(true);//设置标签自动缩放上面的图片
    ui->label_8->setPixmap(QPixmap("C:/Users/SuJieYin/Pictures/Saved Pictures/2.png"));

     ui->label_9->setAlignment(Qt::AlignCenter);//水平居中
     ui->label_9->setFixedSize(200,120);
     QMovie *m = new QMovie("C:/Users/SuJieYin/Pictures/Saved Pictures/1.gif");
     ui->label_9->setMovie(m);//设置动画
     ui->label_8->setScaledContents(true);//设置标签自动缩放上面的图片
    m->start();//开启动画

    //文本浏览框
    ui->textBrowser->setHtml(codec->toUnicode("<!DOCTYPE html>\
                             <html>\
                             <head>\
                             <meta charset=\"utf-8\">\
                             <title>菜鸟教程(runoob.com)</title>\
                             </head>\
                             <body>\
                                 <h1>我的第一个标题</h1>\
                                 <p>我的第一个段落。</p>\
                             </body>\
                             </html>"));

    //图形视图框架
    //日历
    ui->stackedWidget->setCurrentIndex(4);
}
//上一页【第4页】
void MainWindow::on_pushButton_10_clicked()
{
    ui->stackedWidget->setCurrentIndex(2);
}

//点击SpinBox显示LCDNumber
void MainWindow::display(int i)
{
    ui->lcdNumber->setMinimumHeight(i);//设置最小行高
}

//水平滑动条
void MainWindow::on_horizontalScrollBar_valueChanged(int value)
{
       ui->lcdNumber->display(value);//显示值
}

//垂直滚动条
void MainWindow::on_verticalScrollBar_valueChanged(int value)
{
    ui->verticalScrollBar->setRange(0,100);
    ui->lcdNumber->display(value);//显示值
}

//水平滑动滚动条
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    ui->lcdNumber->display(value);//显示值
}
//垂直滑动滚动条
void MainWindow::on_verticalSlider_valueChanged(int value)
{
     ui->lcdNumber->display(value);//显示值
}
//==================================================

//单击日历时显示
void MainWindow::on_calendarWidget_clicked(const QDate &date)
{
    ui->textBrowser->setText(date.toString());
}

//上一页
void MainWindow::on_pushButton_15_clicked()
{
    qDebug()<<"======================="<<endl;
    ui->stackedWidget->setCurrentIndex(3);
}
//下一页
void MainWindow::on_pushButton_14_clicked()
{

    //GroupBox容器
    ui->radioButton->setChecked(true);//设置检查
    ui->verticalLayout_2->addStretch(1);//添加伸长
    ui->groupBox->setLayout(ui->verticalLayout_2);//添加垂直部件

    //ScrollArea滚动窗口容器
   ui->label_11->setPixmap(QPixmap("C:/Users/SuJieYin/Pictures/Saved Pictures/2.png"));
   ui->scrollArea->setWidget(ui->label_11);//添加这个标签组件
   ui->horizontalLayout_3->addWidget(ui->scrollArea);//添加进水平部件
   setLayout(ui->horizontalLayout_3);//显示这个水平部件

    //Tool Box工具箱
    ui->toolBox->addItem(ui->textEdit_5,codec->toUnicode("工具1"));
    ui->toolBox->addItem(ui->textEdit_6,codec->toUnicode("工具2"));

    //TabWidget 选项卡-分页显示
    ui->tabWidget->setTabsClosable(true);//关闭
    ui->tabWidget->addTab(ui->textEdit_7,"T");
    ui->tabWidget->addTab(ui->textEdit_8,"B");
    //点击X号后显示对应的文本
    connect(ui->tabWidget,&QTabWidget::tabCloseRequested,[&](int x){
        ui->textEdit_7->append(QString::number(x).toUtf8());
        ui->textEdit_8->append(QString::number(x).toUtf8());
    });

     //stackedWidget 堆叠窗口类
    //本教程使用的就是这个部件,来达到上一页和下一页之间的切换,不在过多解释

    //MdiArea 多媒体窗口
    ui->mdiArea->addSubWindow(ui->textEdit_9);//添加子窗口
    ui->mdiArea->addSubWindow(ui->textEdit_10);

    ui->stackedWidget->setCurrentIndex(5);
}

//上一页
void MainWindow::on_pushButton_17_clicked()
{
    ui->stackedWidget->setCurrentIndex(4);
}

【4】ui界面设计

对象和类的布局和定义位置,位置很重要

【5】代码运行效果图

文件对话框,加密,显示在第一页

6大对话框在第二页

按钮类举例

输入小部件类和显示文本部件类和滑动部件类

日期,文本框,图片,gif图

容器部件类使用举例

总结

在后期,我将QT全部学习内容,做成应用程序游戏软件,以软件的形式活学活用,工程庞大,目前正在筹划,尽情期待

(0)

相关推荐

  • Qt实现部件透明及阴影效果的示例代码

    目录 透明效果 情况一 情况二 情况三 情况四 阴影效果 透明效果 情况一 //窗口整个透明属性,取值为0-1,0为全透明 setWindowOpacity(0.5); 情况二 //部件不透明,窗体背景完全透明,以下两个函数必须配合使用 setWindowFlags(Qt::FramelessWindowHint);//窗口无边框 setAttribute(Qt::WA_TranslucentBackground);//背景透明 情况三 //单个部件设置透明 //需要添加头文件#include<

  • python3+PyQt5实现自定义流体混合窗口部件

    本文通过Python3+PyQt5实现自定义部件–流体混合窗口部件.通过逻辑(窗口)坐标绘制而成.调用setWindow,所有的绘制工作都会根据逻辑坐标系发生. #!/usr/bin/env python3 from PyQt5.QtCore import (QPointF, QSize, Qt,pyqtSignal) from PyQt5.QtWidgets import (QApplication, QFrame, QLabel, QSizePolicy, QSpinBox, QWidget

  • python3+PyQt5实现自定义分数滑块部件

    本文通过Python3+PyQt5实现自定义部件–分数滑块.它既能支持键盘也支持鼠标,使用物理(视口)坐标通过绘制方式显示. #!/usr/bin/env python3 import platform from PyQt5.QtCore import (QPointF, QRectF, QSize, Qt,pyqtSignal) from PyQt5.QtWidgets import (QApplication, QDialog,QSizePolicy, QGridLayout, QLCDNu

  • python3+PyQt5+Qt Designer实现堆叠窗口部件

    本文是对<Python Qt GUI快速编程>的第9章的堆叠窗口例子Vehicle Rental用Python3+PyQt5+Qt Designer进行改写. 第一部分无借用Qt Designer,完全用代码实现. 第二部分则借用Qt Designer,快速实现. 第一部分: import sys from PyQt5.QtCore import (Qt) from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QDialo

  • python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法

    本文通过将同一个数据集在三种不同的简便项窗口部件中显示.三个窗口的数据得到实时的同步,数据和视图分离.当添加或删除数据行,三个不同的视图均保持同步.数据将保存在本地文件中,而非数据库.对于小型和临时性数据集来说,这些简便窗口部件非常有用,可以用在非单独数据集中-数据自身的显示,编辑和存储. 所使用的数据集: /home/yrd/eric_workspace/chap14/ships_conv/ships.py #!/usr/bin/env python3 import platform from

  • python3+PyQt5实现自定义窗口部件Counters

    本文通过Python3+PyQt5实现自定义部件–Counters自定 窗口部件.这个窗口是3*3的网格.本文有两个例子如下: /home/yrd/eric_workspace/chap11/counters.py. /home/yrd/eric_workspace/chap11/counters_dnd.py 第二个例子在第一个例子的基础上实现能通过鼠标拖拽球到不同的网格中. /home/yrd/eric_workspace/chap11/counters.py #!/usr/bin/env

  • python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法

    本文借用HTML的css语法,将样式表应用到窗口部件.这里只是个简单的例子,实际上样式表的语法很丰富. 以下类似于css: StyleSheet = """ QComboBox { color: darkblue; } QLineEdit { color: darkgreen; } QLineEdit[mandatory="true"] { #mandatory="true"时,QLineEdit的样式会变化 background-co

  • QT中大部分部件如何使用举例详解

    目录 [1]main.cpp [2]mainwindow.h [3]mainwindow.cpp [4]ui界面设计 [5]代码运行效果图 总结 内容繁多,直接上代码 重点请看mainwindow.cpp的中代码和ui如何设计的 [1]main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); M

  • Qt实现模糊匹配功能的实例详解

    目录 1.准备基础数据 2.创建并实例化匹配类 3.控件绑定 对于浏览器的使用,我想大家一定不会陌生吧,输入要搜索的内容时,会出现相应的匹配信息. 那么,今天我要讲述的也是这样一个功能. 首先看一下展示效果 输入任意文本后,弹出具有该文本的符合项,也就是模糊查询. 实现功能的核心是:QCompleter 该类可以在任何Qt小部件中提供自动完成搜索功能,例如:QLineEdit.QComboBox.当输入指定字符后,QCompleter会根据单词列表提供的内容进行筛查. 在这里,我是采用QLine

  • calendar在python3时间中常用函数举例详解

    想要在python中写代码游刃有余,没有函数的支持是万万不行的.很多小伙伴反映,最近函数的应用知识不够了,所以小编挑选了python3时间中的函数,希望可以帮助大家在处理日历方面更加的迅速.其他更多的函数,大家也可以自行去搜集一点资料学习,小编就讲几个最简单的吧. 1.firstweekday() firstweekday(): 返回当前每周起始日期值.默认情况下,首次载入calendar模块时返回0,即星期一 import calendar # 0 print(calendar.firstwe

  • QT实现多线程两种方式案例详解

    Qt线程 Qt4.7之前版本处理步骤 1.自定义一个类,继承于QThread. class MyThread:public QThread{ public: vid run(); //虚函数 线程处理函数(和主线程不在同一个线程) signals: void isDone(); //信号 线程执行完发送 } void MyThread::run() { // 实现 -- 复杂的处理过程 emit isDome; // 发送线程 }; 2.定义线程 MyThread thread; 3.开启线程

  • C++ Qt之halcon读取像素项目过程详解

    项目环境:win10,qt5.14,halcon20 功能:1.读取指定图像2.读取指定目录下的图像 项目配置文件 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked depreca

  • C/C++ Qt 自定义Dialog对话框组件应用案例详解

    在上一篇文章 <C/C++ Qt 标准Dialog对话框组件应用> 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能. 但有时候我们需要一次性修改多个数据,使用默认的模态对话框似乎不太够用,此时我们需要自己创建一个自定义对话框,这类对话框也是一种窗体,所以可以在其上面放置任何的通用组件,以实现更多复杂的开发需求. 目前自定义对话框与主窗体的通信有两种方式,一种是通过函数实现通信,另一种则是通过信号实现通信,我们以通过函数通信为基础,解释一下如何实现跨窗体通信. 首先需要

  • Mybatis关联映射举例详解

    目录 一.关联映射 二.一对一多对一的关系 1.第一种形式-连表查询 2.第二种形式-分步查询 三.一对多 第一种形式按照结果嵌套处理 第二种形式按照查询嵌套处理 一.关联映射 举例关系说明 数据库创建表,student,teacher 关系说明: 一个老师可以有多个学生 一个学生只有一个老师 一个老师对学生:一对多的关系 一个学生老师:一对一的关系 二.一对一多对一的关系 查询学生信息及其对应的教师信息 学生实体:用对象来存储教师信息,因为一个学生对应一个教师对象 public class S

  • Java 回调callback举例详解

    目录 前言 1.什么是回调 2.例子 第一章.故事的缘起 第二章.幼师的找茬 第三章.幼师回来了 第四章.门口的婆婆 前言 回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息. 1.什么是回调 软件模块之间总是存在一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. (1)同步调用: 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法再继续往下走.这种调

  • Qt学习之容器类的使用教程详解

    目录 一. QList类,QLinkedList类 和 QVector类 (1)QList类 (2) QLinkedList 类 (3) QVector 类 二. QMap类和QHash类 1 . QMap类 2.QHash类 3. STL风格的迭代器容器遍历 三. QVariant类 四. Qt的算法 Qt提供来一组通用的基于模板的容器类. 一. QList类,QLinkedList类 和 QVector类 QList类.QLinkedList类和QVector类常常使用到的Qt容器类有QLi

  • QT+ffmpeg实现视频解析的示例详解

    目录 一.创建QT项目 二.引入ffmpeg 1.复制头文件和lib 2.复制bin文件 3.简单测试 三.视频解析 1.创建线程 2.创建自定义绘制控件 3.使用自定义控件 4.开启线程,进行视频解析 一.创建QT项目 首先安装了最新的Community版本,Creator是8.0.1版本了. 然后进行项目的创建. 得到的项目没有pro文件,而是CMakeLists.txt. 二.引入ffmpeg 从下面下载的ffmpeg-5.0.1-full_build-shared.7z. https:/

随机推荐