一、说明
通过输入行数、列数,在规定范围内生成按钮,组成矩阵,并且可以通过按钮做全选、多选操作,将选中的按钮变色。
二、实例图片
三、操作步骤
1、文件创建
(1)创建工程文件,选择MainWindow类型,并勾选Generate form,生成UI界面图;
(2)创建如图所示界面,用到的控件有Group Box、Line Edit、Push Button、Radio Button、Spin Box及Label,根据个人习惯对齐进行排列并修改名称。
2、程序编写
(1)main.cpp文件不做修改;
(2)mainwindow.h页面的程序如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton> //Push按钮类
#include <QList> //列表类
#include <QDebug> //QDebug类
#include <QGroupBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void slotButtonClicked();//动态创建QPushButton按钮信号槽函数
void on_pushButton_clicked();
void on_radioButton_all_clicked();
void on_radioButton_digit_clicked();
private:
Ui::MainWindow *ui;
QList<QPushButton*> btnPushlist;//动态创建按钮的列表
QPushButton *btnPush;//动态创建按钮指针
int num;
int row;
int col;
};
#endif // MAINWINDOW_H
(3)mainwindo.cpp中的程序如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSpinBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
//删除QList占用的内存及清空列表
qDeleteAll(btnPushlist);
btnPushlist.clear();
}
/*===动态创建QPushButton按钮信号槽函数===*/
void MainWindow::slotButtonClicked()
{
QPushButton *btn = qobject_cast<QPushButton*>(sender());
//获取按钮显示文本
QString text = btn->text();
//获取按钮对象名称
QString name = sender()->objectName();
//do something在这里进行其他事项处理
qDebug()<<text;//在下方debug中显示出按下按钮显示的文本
qDebug()<<name;//在下方debug中显示 出按下 按钮的名称
}
//*********************************************************根据输入的行列式生成按钮矩阵
void MainWindow::on_pushButton_clicked()
{
row=ui->lineEdit->text().toInt();
col=ui->lineEdit_2->text().toInt();
qDeleteAll(btnPushlist);
btnPushlist.clear();
num=0;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
num+=1;
btnPush=new QPushButton(this);
btnPush->setParent(this);
btnPush->show();
//设置按钮在主对话框的位置
// 每一个的坐标, 横、纵 、宽度、高度
btnPush->setGeometry(20+(500/col)*j,20+(500/row)*i,(500/col)-10,(500/row)-10);
//设置按钮对象名字
btnPush->setObjectName("btnPush"+QString::number(num));//num正序
//设置按钮显示文本
btnPush->setText(QString::number(num));
//设置初始颜色 snow
btnPush->setStyleSheet("background-color:rgb(255,255,255)");
//向QList添加成员项
btnPushlist.append(btnPush);
//关联信号槽函数
connect(btnPushlist.at(i*col+j),SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
}
}
}
//*************************************按下全部点胶按钮,变色
void MainWindow::on_radioButton_all_clicked()
{
for(int m=0;m<row*col;m++)
{
QPushButton * btn1 = btnPushlist.at(m);
QString name =btn1->objectName();
btn1->setStyleSheet("background-color:rgb(255,218,185)");//PeachPuff桃红色
}
}
//**************************************填写起始位置、终止位置,按下数字点胶,变色
void MainWindow::on_radioButton_digit_clicked()
{
int start=ui->spinBox->value();
int end=ui->spinBox_2->value();
if (end>row*col)
end =row*col;
//全选所有按钮,变原始颜色
for(int m=0;m<row*col;m++)
{
QPushButton * btn1 = btnPushlist.at(m);
QString name =btn1->objectName();
btn1->setStyleSheet("background-color:rgb(255,255,255)");//先全部变为原始颜色
}
//根据需要,将选中的按钮变色
for(int m=start-1;m<end;m++)//重新填充颜色
{
QPushButton * btn1 = btnPushlist.at(m);
QString name =btn1->objectName();
btn1->setStyleSheet("background-color:rgb(255,218,185)");
}
}
3、运行
运行程序后,将出现如下页面:
(1)输入行数、列数,点击“确定”按钮,将生成对应矩阵;
(2)点击“全选”按钮,生成的矩阵按键将全部变色,即实现全选功能;
(3)在输入框中输入想要选中的范围,点击多选按钮,对应选中的范围将变为桃红色按钮,其他未选中的变回原来的颜色;重新输入数字后,再次点击“多选”按钮,将会重新改变颜色并覆盖原有颜色,实现多选功能;
(4)点击“退出”按钮,将退出该页面。
目标功能实现,结束~