仅用于记录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;
}
}
以上是学习记录。