首页 > 其他分享 >Qt 控件的简单实例化

Qt 控件的简单实例化

时间:2024-07-09 10:02:28浏览次数:11  
标签:控件 Widget Qt 实例 ui QWidget addWidget new include

记录一个初学小白的学习过程,记录一些浅显的学习笔记


GroupBox

GroupBox 控件的作用是组织界面元素,将一组相关的控件组合在一起,并在顶部显示一个标题。

基类:QWidget  (第一部分是widget.h)(第二部分是widget.cpp)

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QGroupBox>
#include<QRadioButton>
#include<QPushButton>
#include<QCheckBox>
#include<QVBoxLayout> //可以在水平方向和垂直方向进行排列的控件 QHBoxLayout/QVBoxLayout所继承
#include <QGridLayout>
#include <QMenu>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //组合框 1 gpb_1
    QGroupBox *gpb_1=new QGroupBox("互相排斥单选按钮组1");
    QRadioButton *rbtn_1 = new QRadioButton("RadioButton1");
    QRadioButton *rbtn_2 = new QRadioButton("RadioButton2");
    QRadioButton *rbtn_3 = new QRadioButton("RadioButton3");

    QVBoxLayout *vbly1=new QVBoxLayout;
    vbly1->addWidget(rbtn_1);
    vbly1->addWidget(rbtn_2);
    vbly1->addWidget(rbtn_3);
    gpb_1->setLayout(vbly1);  //设置组合框内容是纵向布局

    //组合框 2 gpb_2
     QGroupBox *gpb_2=new QGroupBox("复选按钮组2");
     QCheckBox *cbx1=new QCheckBox("checkbox1");
     QCheckBox *cbx2=new QCheckBox("checkbox2");
     QCheckBox *cbx3=new QCheckBox("checkbox3");

     cbx2->setTristate(true); //实现复选框支持半选状态,默认不支持半选
     cbx2->setChecked(true);  //实现默认选择

     QVBoxLayout *vbly2=new QVBoxLayout;
     vbly2->addWidget(cbx1);
     vbly2->addWidget(cbx2);
     vbly2->addWidget(cbx3);
     gpb_2->setLayout(vbly2);

    //组合框 3 gpb_3
    QGroupBox *gpb_3=new QGroupBox("单选和复选按钮组3");

    gpb_3->setCheckable(true);  //组合框的选中与否按钮

    QRadioButton *rbtn_31 = new QRadioButton("RadioButton31");
    QRadioButton *rbtn_32 = new QRadioButton("RadioButton32");
    QRadioButton *rbtn_33 = new QRadioButton("RadioButton33");
    QCheckBox *cbx4= new QCheckBox("checkbox4");

    QVBoxLayout *vbly3=new QVBoxLayout;
    vbly3->addWidget(rbtn_31);
    vbly3->addWidget(rbtn_32);
    vbly3->addWidget(rbtn_33);
    vbly3->addWidget(cbx4);
    gpb_3->setLayout(vbly3);

     //组合框 4 gpb_4
    QGroupBox *gpb_4=new QGroupBox("综合按钮组4");
    gpb_4->setCheckable(true); //这个是其所有内容能不能选 (true就是默认能选)
    gpb_4->setChecked(true);   //这个是内容本身要默认选上
    QPushButton *pbtn_4 = new QPushButton("QPushButton4");
    QPushButton *pbtn_5 = new QPushButton("QPushButton5");
    pbtn_5->setCheckable(true);  //理解:使不能选择的可以选择
    pbtn_5->setChecked(true);
    QPushButton *pbtn_6 = new QPushButton("QPushButton6");

    QVBoxLayout *vbly4=new QVBoxLayout;
    vbly4->addWidget(pbtn_4);
    vbly4->addWidget(pbtn_5);
    vbly4->addWidget(pbtn_6);  //理解:纵向布局对象包含这3个对象
    gpb_4->setLayout(vbly4);  //理解:组合框使用这个纵向布局,以及其内容

    //命令按钮添加子菜单
    QMenu *mu = new QMenu(this);
    mu->addAction("King");  //子菜单添加内容函数***
    mu->addAction("Darren");
    mu->addAction("Mark");
    mu->addAction("Vico");
    pbtn_6->setMenu(mu);

    QGridLayout *gdlyout =new QGridLayout;
    gdlyout->addWidget(gpb_1,0,0,1,1);  //设置组合框位置***
    gdlyout->addWidget(gpb_2,0,1,1,1);
    gdlyout->addWidget(gpb_3,1,0,1,1);
    gdlyout->addWidget(gpb_4,1,1,1,1);

    this->setLayout(gdlyout);  //显示组合框 ***

}

Widget::~Widget()
{
}

ScrollArea 

它允许用户在一个较小空间内查看和滚动一个较大的内容区域。即滚动条,直接在main 内实现。

#include "widget.h"

#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QGridLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.resize(500,500);

    //滚动条外观是否漂亮取决于当前滚动条策略,可以查询官网实现
    QLabel *qljpg =new QLabel;
    qljpg->setScaledContents(true);
    QImage imagejpg(":/new/prefix1/images/3.jpg");
    qljpg->setPixmap(QPixmap::fromImage(imagejpg));

    QScrollArea *sArea=new QScrollArea;

    sArea->setAlignment(Qt::AlignCenter);  //居中

    sArea->setWidgetResizable(true);  //根据窗口比例显示

    sArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    sArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //这两个最后的参数就是设置 滚动条的那个条是否要显示出来

    sArea->setWidget(qljpg);

    QGridLayout *glayout=new QGridLayout;
    glayout->addWidget(sArea);

    w.setLayout(glayout);

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

 TabWidget

是一个用于组织和管理多个相似或相关内容的控件。允许你在一个窗口中创建多个标签页,每个标签页都可以显示不同的用户界面内容。

基类:QWidget 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTabWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    QTabWidget *tabwidgetUI;
private slots:
    void MsgCommit();
};
#endif // WIDGET_H
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setWindowTitle("标签小部件测试");
    this->setGeometry(300,200,1000,800);

    tabwidgetUI=new QTabWidget(this);
    tabwidgetUI->setGeometry(20,20,960,760);
    tabwidgetUI->show();

    bool m_showtabwidgetui1=true;
    bool m_showtabwidgetui2=true;
    //bool m_showtabwidgetui3=false;
    //bool m_showtabwidgetui4=false;

    if(m_showtabwidgetui1)
    {
        QWidget *qwidget1=new QWidget();
        tabwidgetUI->addTab(qwidget1,"进程");

        QGridLayout *glayout =new QGridLayout();
        QLabel *lab1 =new QLabel("请选择文件及文件夹:");
        QLineEdit *ledit1=new QLineEdit();
        QPushButton *pbt1=new QPushButton("消息框...");
        connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(MsgCommit()));

        glayout->addWidget(lab1,0,0);
        glayout->addWidget(ledit1,0,1);
        glayout->addWidget(pbt1,0,3);

        qwidget1->setLayout(glayout);

    }
    if(m_showtabwidgetui2)
    {
        QWidget *qwidget2=new QWidget();
        tabwidgetUI->addTab(qwidget2,"性能");
    }
}

Widget::~Widget()
{
}

void Widget::MsgCommit()
{
    QMessageBox::information(NULL,"Test","QMessageBox:成功",QMessageBox::Ok);
}

Frame

它可以用来创建带有边框的矩形区域,QFrame 是一个通用的控件,可以根据需要被配置为多种样式,例如边框样式、填充样式和布局方向等。它通常用于组织其他控件,以及为它们提供视觉边界和结构。     

基类:Qwidget  这里用ui界面直接布局了

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setWindowTitle("Fram测试");
    ui->frame1->setStyleSheet("background-color:red");
    ui->frame_2->setStyleSheet("background-color:green");

    ui->frame1->setLineWidth(2);
    ui->frame1->setMidLineWidth(2);
    ui->frame1->setFrameShape(QFrame::Box);

    ui->frame_2->setLineWidth(2);
    ui->frame_2->setMidLineWidth(4);
    ui->frame_2->setFrameShape(QFrame::Box);
    ui->frame_2->setFrameShadow(QFrame::Sunken);
}

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

DockWidget

是一个用于在主窗口或其他 QDockWidget 中停靠和浮动的控件。它通常用于提供附加的功能窗口,例如工具栏、状态栏、属性编辑器或其他任何需要单独访问的用户界面元素。

基类:QMainWindow

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

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;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QLabel>
#include <QGridLayout>
#include <QComboBox>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QDockWidget *dw =new QDockWidget("停靠窗口测试:123",this);

    //设置颜色
    QPalette pal;
    pal.setColor(QPalette::Background,Qt::cyan);
    dw->setAutoFillBackground(true);
    dw->setPalette(pal);

    dw->setMaximumSize(300,300);

    //学习层次
    QLabel *lab = new QLabel("学历层次");
    QComboBox *cbx=new QComboBox();
    cbx->addItem("小学");
    cbx->addItem("初中");
    cbx->addItem("高中");
    cbx->addItem("专科");
    cbx->addItem("本科");
    cbx->addItem("硕士");
    cbx->addItem("博士");

    QPushButton *pbt1=new QPushButton("清华大学");
    QPushButton *pbt2=new QPushButton("北京大学");


    //通过栅格布局(网格布局)
    QGridLayout *glayout =new QGridLayout();
    glayout->addWidget(lab,0,0,1,1);
    glayout->addWidget(cbx,0,1,1,1);
    glayout->addWidget(pbt1,1,0,1,1);
    glayout->addWidget(pbt2,1,1,1,1);

    glayout->setHorizontalSpacing(10);  //设置水平距离
    glayout->setVerticalSpacing(10);    //设置垂直距离
    glayout->setContentsMargins(20,20,20,20); //设置上下左右距离

    QWidget *wdt=new QWidget();
    wdt->setLayout(glayout);
    dw->setWidget(wdt);
}

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


 gg,推荐课程:https://xxetb.xetslk.com/s/kNPSd

标签:控件,Widget,Qt,实例,ui,QWidget,addWidget,new,include
From: https://blog.csdn.net/2301_77671421/article/details/140286422

相关文章

  • 【视频讲解】Python、R时间卷积神经网络TCN与CNN、RNN预测时间序列3实例附代码数据
    全文链接:https://tecdat.cn/?p=36944原文出处:拓端数据部落公众号本文旨在探讨时间卷积网络(TemporalConvolutionalNetwork,TCN)与CNN、RNN在预测任务中的应用。通过引入TCN模型,我们尝试解决时间序列数据中的复杂依赖关系,以提高预测的准确性。本文首先介绍了TCN的基本原理,随后详......
  • [QT入门]标签控件(QLabel)
    一、概述QLabel是Qt中用于显示文本或图像的控件。它通常被用作标签或显示静态信息的区域。QLabel控件是图形用户界面(GUI)开发中的基础元素之一,广泛应用于各种Qt应用程序中。QLabel控件的灵活性和易用性使其成为开发过程中不可或缺的一部分。二、QLabel控件的基本属性和方法1.......
  • 构建 Qt 项目
    使用qmake构建Qt项目源代码创建一个Qt项目文件(.pro文件)和一个源文件:MyQtProject.pro:QT+=coreguiCONFIG+=c++11SOURCES+=main.cpp#如果你有UI文件或头文件,也可以添加到这里。#HEADERS+=mainwindow.h#FORMS+=mainwindow.uimain.cpp:#inc......
  • KMP算法实例——模式匹配
    题目描述:给定两个字符串,一个是文本串txt,另一个是模式串pat。请使用KMP算法找出模式串在文本串中的所有出现位置。示例输入:文本串 txt:"ABABDABACDABABCABAB"模式串 pat:"ABABCABAB"#include<stdio.h>#include<string.h>//计算模式串的最长公共前后缀数组voidco......
  • QT中调用python中的函数
    1.创建py文件例如名为“python_script.py”的python文件:#python_script.pydefgreet(name):return"Hello,"+name+"!" 2.Qt的pro文件中包含python的头文件和库INCLUDEPATH+=python解释器的安装目录\includeLIBS+=-Lpython解释器的安装目录\libs-lpyt......
  • STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)
    目录引言理解DMA:数据的高效搬运工DMA的主要特性多优先级请求事件标志数据对齐多样化的数据传输路径广泛的数据源与目标最大数据长度DMA寄存器详解增量与循环模式DMA中断机制​编辑小实验:DMA-ADC串口发送引言在现代嵌入式系统设计中,数据传输速度和效率是关键......
  • 将WPF内部绑定的控件和数据拉取出来
    一般最简单的ItemsControl的写法是<ItemsControlItemsSource="{BindingStudents}"><ItemsControl.ItemTemplate><DataTemplate><TextBlockText="{BindingName}"/>......
  • 什么是I2C,IIC怎么用,从实例波形分析I2C读写
    什么是I2C,IIC怎么用,从实例波形分析I2C读写前言今天分享的主题是I2C通信。接下来从I2C是什么,怎么用,以及以时钟外设读写作为实例进行分析。I2C简介I2C(Inter-IntegratedCircuit),也可以叫IIC、I2C,译作集成电路总线,是两线式串行通信总线,用于设备间的通讯等,标准情况下最高传送速率达......
  • C#开发单实例应用程序的几种方式
    C#默认的WinForm模板是不支持设置单实例的,也没有隔壁大哥VB.NET那样有个“生成单个实例应用程序”的勾选选项(VB某些时候要比C#更方便),实现单实例可以有多种方法:检测同名进程:Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName),如果集合的Length>1那就表明已......
  • 关于Qt是否免费使用的问题
    如果公司用Qt开发闭源商业桌面软件,在Windows/Mac/Linux上,可以使用动态库链接方式,遵循LGPL协议,是不用付费的,也不用开源你的代码。只需在你的商业软件的about等一些小角落,说明你使用了Qt,遵循LGPLV3协议即可。那商业付费什么意思呢?就是指的你使用静态库链接的方式,......