QT tableWidget横向纵向设置

    //创建表格
    QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
    // 使表格平铺在界面
    tableWidget-> horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);    
    tableWidget->show();
    
    
	// 使表格平铺在界面
    tableWidget-> horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    // 设置控制大小
	tableWidget->resize(500,500);
    // 删除列
    tableWidget->removeColumn(0);
    // 删除行
    tableWidget->removeRow(0);


1,设置表头
    QStringList header;
    header<<"姓名"<<"年龄";
    header.push_back(QString("备注"));
    tableWidget->setHorizontalHeaderLabels(header);
    tableWidget->setVerticalHeaderLabels(header);
    // 隐藏表头
    tableWidget->verticalHeader()->setVisible(false);
    // 最后一列自动宽度
    tableWidget->horizontalHeader()->setStretchLastSection(true);

    
2,一般显示
    tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
    tableWidget->setItem(0,1,new QTableWidgetItem("33"));

    // 内容居中显示
    tableWidget->item(0,0)->setTextAlignment(Qt::AlignCenter);

	// 文本颜色
    tableWidget->item(0,0)->setTextColor(QColor(200,100,100));
    // 字体
    tableWidget->item(0,0)->setFont(QFont("Microsoft Yahei"));
    // 背景颜色
    tableWidget->item(0,0)->setBackgroundColor(QColor(100,100,100));

3,放一个控件
    // 单元格里放一个控件
    QComboBox *comBox = new QComboBox();
    comBox->addItem("Male");
    comBox->addItem("Female");
    tableWidget->setCellWidget(1,1,comBox);

4,加一个图标
    QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
    tableWidget->show();


    QStringList header;
    header<<"姓名"<<"年龄";
    tableWidget->setHorizontalHeaderLabels(header);

    tableWidget->setItem(0,0,new QTableWidgetItem(QIcon("D:/1.png"),"张三"));
    tableWidget->setItem(0,1,new QTableWidgetItem("33"));
5,获取内容/清除内容/关闭
    QString string = tableWidget->item(0,0)->text();
    qDebug() << string << endl;

    // 清除所有内容含表头// 清除内容不含表头
    tableWidget->clear();

    tableWidget->close();
6, 设置行高和列宽
    tableWidget->setColumnWidth(3,300);
    tableWidget->setRowHeight(3,30);

7,单元格选中行为
// 选中整行
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
// 选中单元格
tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
// 选中一列
tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);

// 只允许选中一行
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
// 允许选中多行(默认情况)
tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

8,合并单元格
    QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
    tableWidget->show();

    QStringList header;
    header<<"姓名"<<"年龄";
    tableWidget->setHorizontalHeaderLabels(header);

    tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
    tableWidget->setItem(0,1,new QTableWidgetItem("33"));

    tableWidget->setSpan(1,0,1,2);

9,信号
(1)头函数
public slots:
    void on_itemChanged(QTableWidgetItem *item);
    QTableWidget *tableWidget = new QTableWidget(10,5,ui->centralWidget);
(2)建立表格建立槽函数
    tableWidget->show();

    QStringList header;
    header<<"姓名"<<"年龄";
    tableWidget->setHorizontalHeaderLabels(header);

    connect(tableWidget, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(on_itemChanged(QTableWidgetItem *)));

 

横向控件

### 修改 Python 中 QTabWidget 的文本显示角度 对于 `QTabWidget` 控件中的文本方向调整,特别是当选项卡位置被设定为侧边(即 West 或 East),默认情况下文本会呈现垂直排列。为了使这些文本保持水平状态,通常的做法是通过自定义样式或重写特定方法来达到目的。 #### 方法一:使用自定义样式 可以通过创建一个新的样式类并应用到 `QTabWidget` 上面,从而改变其子组件如 `QTabBar` 的表现形式: ```python from PySide6.QtWidgets import QApplication, QProxyStyle, QTabWidget, QStyle import sys class HorizontalTextTabStyle(QProxyStyle): def tabSizeHint(self, option, index): size = super().tabSizeHint(option, index) if self.parent().shape() == QTabWidget.West or \ self.parent().shape() == QTabWidget.East: size.transpose() return size def drawControl(self, element, opt, painter, widget=None): if element == QStyle.CE_TabItemLabel and (self.parent().shape() == QTabWidget.West or self.parent().shape() == QTabWidget.East): opt.rect.setSize(opt.fontMetrics.size(0, " ")) painter.save() painter.translate(opt.rect.bottomLeft()) painter.rotate(-90) # 将画布旋转使得文字变为水平 self.proxy().drawControl(element, opt, painter, widget) painter.restore() else: super().drawControl(element, opt, painter, widget) app = QApplication(sys.argv) tab_widget = QTabWidget() tab_widget.setTabPosition(QTabWidget.West) tab_widget.setStyle(HorizontalTextTabStyle(tab_widget.style())) for i in range(3): tab_widget.addTab(QWidget(), f'Tab {i}') tab_widget.show() sys.exit(app.exec_()) ``` 这段代码展示了如何利用继承自 `QProxyStyle` 创建新的风格对象,并覆盖其中两个重要虚函数——`tabSizeHint()` 和 `drawControl()` 来控制尺寸计算以及绘图逻辑[^2]。 #### 方法二:直接操作 TabBar 并重载 paintEvent 函数 另一种更灵活的方式就是完全接管绘制过程,这涉及到对 `QTabBar` 进行扩展并替换原有的绘画行为: ```python from PySide6.QtCore import Qt from PySide6.QtGui import QPainter from PySide6.QtWidgets import QWidget, QVBoxLayout, QLabel, QTabBar, QTabWidget class VerticalTabBar(QTabBar): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def paintEvent(self, event): painter = QPainter(self) st_option = QStyleOptionTabV3() for index in range(self.count()): self.initStyleOption(st_option, index) painter.save() s = st_option.rect.size() s.transpose() r = QRect(QPoint(), s) r.moveCenter(st_option.rect.center()) st_option.rect = r center = st_option.rect.center() painter.translate(center) painter.rotate(270) painter.translate(-center) painter.drawText(r, Qt.AlignVCenter | Qt.TextDontClip, self.tabText(index)) painter.restore() if __name__ == '__main__': app = QApplication([]) main_window = QMainWindow() central_widget = QWidget(main_window) layout = QVBoxLayout(central_widget) custom_tab_bar = VerticalTabBar() tab_widget = QTabWidget() tab_widget.setTabBar(custom_tab_bar) tab_widget.setTabPosition(QTabWidget.West) for idx in range(5): label = QLabel(f"Content of Tab {idx}") tab_widget.addTab(label, f"Tab {idx}") layout.addWidget(tab_widget) main_window.setCentralWidget(central_widget) main_window.resize(400, 300) main_window.show() app.exec_() ``` 此方案中引入了一个名为 `VerticalTabBar` 的新类,它负责处理所有的渲染细节,包括但不限于文本的方向变换[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值