说明
使用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的阻塞模式,为在富文本编辑器中设置相应的表格的行列的单元格数。