您的当前位置:首页正文

Qt的栅格窗口与局部放大显示

2024-12-01 来源:个人技术集锦

说明

仅用于记录QWidget的栅格布局和局部放大显示的效果的实现,因QWidget与QPushButton的基类均为QWidget,所以就用QPushButton代替QWidget实现功能。QWidget无非是多写一个mousePressEvent发送消息的功能。

展示

程序

主要是使用Qt的栅格布局的程序

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <list>
#include <QGridLayout>
using namespace std;
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void pushButtonClicked();

private:
    Ui::Widget *ui;
    list<QWidget*> widgetlist;
    QGridLayout *playout;


};

#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    playout=new QGridLayout(this);
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
        {
            QPushButton *btn=new QPushButton(this);
            widgetlist.push_back(btn);
            btn->setText(QString("%1").arg(i*10+j));
            connect(btn,&QPushButton::clicked,this,&Widget::pushButtonClicked);
            playout->addWidget(btn,i,j,1,1);
            btn=nullptr;
        }

}

Widget::~Widget()
{
    delete ui;
    delete playout;
    for(auto it:widgetlist)
    {
        delete it;
        it=nullptr;
    }
}
static bool a=0;
void Widget::pushButtonClicked()
{
    QPushButton *btnCurrent = qobject_cast<QPushButton*>(sender());
    qDebug()<<btnCurrent->text();
    if(a==0)
    {
        for(auto it:widgetlist)
        {
            if(it!=btnCurrent)
                it->setVisible(false);
        }
        a=1;
    }
    else
    {
        for(auto it:widgetlist)
        {
                it->setVisible(true);
        }
        a=0;
    }

}

最后

以上是学习记录。

显示全文