Qt辅助创建表格

15 篇文章 1 订阅

Qt辅助创建表格

说明

使用Qt的富文本编辑器设计类Word的文本编辑器时用到的一个辅助的表格尺寸设置的对话框,参照Word中的设置表格尺寸的工具。

效果展示

在这里插入图片描述

程序

#ifndef CELLBUTTON_H
#define CELLBUTTON_H

#include <QWidget>
#include <QPushButton>
#include <QFocusEvent>
#include <QColor>
class CellButton : public QWidget
{
    Q_OBJECT
public:
    explicit CellButton(QWidget *parent = nullptr);
    ~CellButton();
    void SetBackground(QColor color);
    int row,column;
protected:
    void enterEvent(QEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
signals:
    void CellPos(int row,int cloumn);
    void mouseLive();

};

#endif // CELLBUTTON_H

```cpp
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include "cellbutton.h"
#include <list>
#include <QGridLayout>
using namespace std;

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(int rowCount=10,int columnCount = 10,QWidget *parent = nullptr);
    ~Dialog();
    int mirow,micolumn;
private slots:
    void on_CellRelease();
    void AcceptPos(int row,int column);

private:
    list<CellButton*> buttonList;
    QGridLayout *playout;
};
#endif // DIALOG_H

#include "dialog.h"
#include <QDebug>
Dialog::Dialog(int rowCount,int columnCount,QWidget *parent)
    : QDialog(parent)
{
    this->setFixedSize(300,300);
    playout =new QGridLayout();
    for(int i=0;i<rowCount;i++)
    {
        for(int j=0;j<columnCount;j++)
        {
            CellButton *button =new CellButton(this);
            button->row =i;
            button->column = j;
            connect(button,&CellButton::CellPos,this,&Dialog::AcceptPos);
            connect(button,&CellButton::mouseLive,this,&Dialog::on_CellRelease);
            buttonList.push_back(button);
            playout->addWidget(button,i,j,1,1);
        }
    }
    setLayout(playout);
    setWindowFlags (Qt::FramelessWindowHint);
}

Dialog::~Dialog()
{
    for(auto it:buttonList)
    {
        delete [] it;
        it =NULL;
    }
    delete [] playout;
}


void Dialog::on_CellRelease()
{
    emit accept();
}

void Dialog::AcceptPos(int row, int column)
{
    for(auto it:buttonList)
    {
        if(it->row<=row&&it->column<=column)
        {
            it->SetBackground(QColor(255,0,0));
        }
        else
        {
            it->SetBackground(QColor(200,200,200));
        }
    }
    mirow = row;
    micolumn = column;
}

#include "dialog.h"

#include <QApplication>
#include <QDialog>
#include <QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    if(w.exec()==QDialog::Accepted)
    {
        qDebug()<<"row:"<<w.mirow<<"column:"<<w.micolumn;
    }
    return a.exec();
}

最后

对话框采用的不是一般的dialog.show的模式打开的,而是exec的阻塞模式,为在富文本编辑器中设置相应的表格的行列的单元格数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值