当前位置: 首页> 财经> 访谈 > 有没有免费的推广网站_梧州网站优化_网站seo推广排名_品牌策略有哪些

有没有免费的推广网站_梧州网站优化_网站seo推广排名_品牌策略有哪些

时间:2025/7/9 10:49:59来源:https://blog.csdn.net/YUyang0304/article/details/144096823 浏览次数:0次
有没有免费的推广网站_梧州网站优化_网站seo推广排名_品牌策略有哪些

在这里插入代码片# 创建主窗口类:
使用 QTableWidget 作为核心控件。
设置表头及行列信息。

自定义代理:

继承 QStyledItemDelegate,实现代理模式。
重写 paint 和 sizeHint 方法,支持多行文本绘制。
设置行高以适应多行显示。
第二行内容以红色字体显示。

文件划分:

主程序入口 main.cpp。
主窗口类定义 mainwindow.h 和 mainwindow.cpp。
自定义代理类 multilineitemdelegate.h 和 multilineitemdelegate.cpp

案例展示

在这里插入图片描述

据提功能代码

void MultiLineItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{painter->save();// 获取多行文本QString text = index.data(Qt::DisplayRole).toString();QStringList lines = text.split('\n'); // 按行分割// 绘制背景if (option.state & QStyle::State_Selected) {painter->fillRect(option.rect, option.palette.highlight());} else {painter->fillRect(option.rect, option.palette.base());}// 设置文本绘制参数QFontMetrics fm(option.font);int lineHeight = fm.height();int y = option.rect.top() + (option.rect.height() - lineHeight * lines.size()) / 2;// 绘制多行文本for (int i = 0; i < lines.size(); ++i) {// 第一行正常绘制if (i == 0) {painter->setPen(option.palette.color(QPalette::Text));}// 第二行使用红色字体else if (i == 1) {painter->setPen(Qt::red);}painter->drawText(option.rect.left() + 5, y + (i + 1) * lineHeight, lines[i]);}painter->restore();
}

详细代码如下:

main.cpp

#include "mainwindow.h"
#include <QApplication>// 主程序入口
int main(int argc, char *argv[])
{QApplication a(argc, argv); // 创建应用程序对象MainWindow w;              // 创建主窗口对象w.show();                  // 显示主窗口return a.exec();           // 进入应用程序事件循环
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTableWidget>
#include "multilineitemdelegate.h"// 主窗口类,包含一个 QTableWidget
class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:QTableWidget *tableWidget; // 表格控件指针
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 创建表格控件tableWidget = new QTableWidget(this);tableWidget->setColumnCount(6); // 设置列数tableWidget->setRowCount(10);   // 设置行数// 设置表头QStringList headers = {"编号", "科目类型", "人员名称", "原班级", "交接班级", "流程"};tableWidget->setHorizontalHeaderLabels(headers);// 创建并设置自定义代理到第二列MultiLineItemDelegate *delegate = new MultiLineItemDelegate(this);tableWidget->setItemDelegateForColumn(1, delegate);// 填充表格数据for (int row = 0; row < 10; ++row) {for (int col = 0; col < 6; ++col) {QTableWidgetItem *item = new QTableWidgetItem; // 创建单元格项if (col == 1) {item->setText("语文\n正在撤销"); // 第二列显示多行内容} else {item->setText(QString("Row %1 Col %2").arg(row).arg(col)); // 其他列显示测试内容}tableWidget->setItem(row, col, item); // 将单元格项添加到表格中}}// 设置默认行高,根据字体高度调整QFontMetrics fm(font()); // 获取默认字体指标int rowHeight = fm.height() * 2; // 每行设置为两倍字体高度for (int i = 0; i < tableWidget->rowCount(); ++i) {tableWidget->setRowHeight(i, 150); // 设置行高}setCentralWidget(tableWidget); // 将表格控件设置为主窗口的中心部件
}MainWindow::~MainWindow()
{// 析构函数,释放资源
}

multilineitemdelegate.h

#ifndef MULTILINEITEMDELEGATE_H
#define MULTILINEITEMDELEGATE_H#include <QStyledItemDelegate>
#include <QPainter>// 自定义代理类,用于实现多行文本的绘制
class MultiLineItemDelegate : public QStyledItemDelegate
{Q_OBJECT
public:explicit MultiLineItemDelegate(QObject *parent = nullptr);// 重写 paint 方法,用于自定义绘制单元格内容void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;// 重写 sizeHint 方法,用于计算单元格的尺寸QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
};#endif // MULTILINEITEMDELEGATE_H

multilineitemdelegate.cpp

#include "multilineitemdelegate.h"MultiLineItemDelegate::MultiLineItemDelegate(QObject *parent): QStyledItemDelegate(parent)
{
}void MultiLineItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{painter->save(); // 保存画笔状态// 获取单元格的多行文本QString text = index.data(Qt::DisplayRole).toString(); // 获取数据内容QStringList lines = text.split('\n'); // 使用换行符分割为多行// 绘制单元格背景if (option.state & QStyle::State_Selected) {painter->fillRect(option.rect, option.palette.highlight()); // 选中时绘制高亮背景} else {painter->fillRect(option.rect, option.palette.base()); // 未选中时绘制默认背景}// 设置字体高度QFontMetrics fm(option.font); // 获取字体指标int lineHeight = fm.height(); // 每行文本的高度// 计算文本绘制起始点,保证文本在垂直方向居中int y = option.rect.top() + (option.rect.height() - lineHeight * lines.size()) / 2;// 循环绘制每一行文本for (int i = 0; i < lines.size(); ++i) {// 设置每行文本的颜色if (i == 0) {painter->setPen(option.palette.color(QPalette::Text)); // 第一行使用默认颜色} else if (i == 1) {painter->setPen(Qt::red); // 第二行使用红色字体}// 绘制文本painter->drawText(option.rect.left() + 5, y + (i + 1) * lineHeight, lines[i]);}painter->restore(); // 恢复画笔状态
}QSize MultiLineItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{// 获取多行文本内容QString text = index.data(Qt::DisplayRole).toString();QStringList lines = text.split('\n'); // 分割为多行// 根据行数计算单元格高度QFontMetrics fm(option.font); // 获取字体指标return QSize(option.rect.width(), fm.height() * lines.size());
}
关键字:有没有免费的推广网站_梧州网站优化_网站seo推广排名_品牌策略有哪些

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: