`
tcspecial
  • 浏览: 911921 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

QT 表格设置左上角按钮

阅读更多

      QT表格模型没有提供访问左上角按钮的API, 查看qtableview.cpp 发现其中有一个QTableCornerButton的私有类, 既然AP没有暴露出该类, 那我们如何设置左上角按钮的显示方式呢?

 

一. 设置左上角按钮背景色

      既然知道左上角按钮就是QTableCornerButton, 我们就可以通过该类名设置该按钮样式 

 table->setStyleSheet("QTableCornerButton::section{background-color:red;}");

 

二. 设置按钮文本

    虽然没有提供直接的访问方式,可以通过findChild()来定位到该按钮,然后设置其文本及显示宽度.

class TableWidget:public QTableWidget
{
public:
    TableWidget(int rows, int cols, QWidget* parent = 0)
        : QTableWidget(rows, cols, parent)
    {
        QAbstractButton* btn = findChild<QAbstractButton*>();
        if (btn)
        {
            btn->setText("Text");
            btn->installEventFilter(this);

            // adjust the width of the vertical header to match the preferred corner button width

            // (unfortunately QAbstractButton doesn't implement any size hinting functionality)

            QStyleOptionHeader opt;
            opt.text = btn->text();
            QSize s = (btn->style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize(), btn).
                       expandedTo(QApplication::globalStrut()));
            if (s.isValid())
                verticalHeader()->setMinimumWidth(s.width());
        }
    }

    bool eventFilter(QObject* o, QEvent* e)
    {
        if (e->type() == QEvent::Paint)
        {
            QAbstractButton* btn = qobject_cast<QAbstractButton*>(o);
            if (btn)
            {
                // paint by hand (borrowed from QTableCornerButton)

                QStyleOptionHeader opt;
                opt.init(btn);
                QStyle::State state = QStyle::State_None;
                if (btn->isEnabled())
                    state |= QStyle::State_Enabled;
                if (btn->isActiveWindow())
                    state |= QStyle::State_Active;
                if (btn->isDown())
                    state |= QStyle::State_Sunken;
                opt.state = state;
                opt.rect = btn->rect();
                opt.text = btn->text(); // this line is the only difference to QTableCornerButton

                opt.position = QStyleOptionHeader::OnlyOneSection;
                QStylePainter painter(btn);
                painter.drawControl(QStyle::CE_Header, opt);
                return true; // eat event

            }
        }
        return false;
    }
};

  

    运行效果:

    运行效果

 

  • 大小: 23.5 KB
分享到:
评论

相关推荐

    Qt圆角功能和状态组合按钮,可以显示颜色或者图片

    Qt的`QButtonGroup`类可以帮助我们管理多个按钮,并且可以设置它们之间的关系。通过使用`QButtonGroup`,我们可以轻松实现按钮状态的切换。例如,我们可以为每个按钮分配一个唯一的ID,当某个按钮被按下时,其他...

    Qt表格分页打印

    在Qt框架中,实现表格数据的分页打印是一项常见的任务,尤其在开发桌面应用程序时,用户可能需要将大量数据从GUI界面导出到纸质媒介。Qt提供了强大的打印功能,允许开发者利用QPrinter、QPrintPreviewDialog等类实现...

    QtExcel.rar_QT操作ex_Qt 表格_qt 数据 excel_qt读取excel表格_qt读取表格

    QtExcel还支持设置单元格的格式,如字体、颜色、边框、对齐方式等。这可以通过调用Excel对象的相关方法来完成,如`dynamicCall("Range(const QString&).Font.Color = int")`改变字体颜色。 8. **保存和关闭工作簿*...

    QT在QTableView的一列里添加两个按钮

    QTableView是QT中的一个关键组件,它用于展示表格数据,通常与QAbstractItemModel或QSqlTableModel等模型类配合使用。在QTableView中添加自定义元素,如按钮,可以实现更丰富的用户交互。 在QT中,要在QTableView的...

    QT表格固定第一列,拖动时第一列不会遮挡

    在QT编程中,创建动态且用户友好的界面是至关重要的,特别是当涉及到数据展示时,如使用表格(QTableView或QTableWidget)。标题"QT表格固定第一列,拖动时第一列不会遮挡"指向了一个特定的需求:在表格中固定第一列...

    Qt按钮菜单

    在Qt框架中,按钮菜单(通常称为上下文菜单或右键菜单)是用户界面中一个常见的功能,它允许用户通过单击按钮或者右键点击触发一个包含多个操作选项的菜单。这种设计使得用户能快速访问复杂的操作而不必占据屏幕空间...

    QT 电子表格(Designer设计版)

    QT电子表格(Designer设计版)是一款基于QT框架开发的电子表格应用,它允许用户通过图形化界面Designer进行自定义设计。这个编译完成的Win版本是专为Windows操作系统设计的,尽管部分功能可能尚未完全成熟,但其核心...

    qt5.1实现的异形按钮(适应图片的形状)

    在Qt框架中,创建异形按钮(也称为自定义形状按钮)是一项常见的需求,尤其是在界面设计中追求个性化和美观性时。本示例基于Qt5.1版本,展示了如何利用Qt的功能来实现一个按钮,其形状能根据所绑定图片的轮廓进行...

    Qt按钮互斥效果

    QPushButton是Qt提供的一种用于创建按钮的类,它提供了丰富的功能,包括文本设置、图标显示、鼠标点击事件等。要实现按钮互斥,我们通常会使用一个信号来通知其他按钮改变它们的状态。 1. **信号与槽机制**:在Qt中...

    qt 表格多行表头,复杂表头

    在Qt编程中,QTableWidget是一个非常常用的组件,用于展示二维数据,通常用于创建简单的表格。然而,有时候我们需要创建更复杂的表格布局,比如带有多行表头的表格。标题"qt 表格多行表头,复杂表头"正是指向这样一...

    QT QDialog 圆角实现

    例如,对于一个名为`myPushButton`的按钮,我们可以这样写: ```cpp myPushButton-&gt;setStyleSheet("QPushButton { border-radius: 10px; }"); ``` 5. **调整布局**:在某些情况下,由于布局管理器的影响,圆角...

    基于QT的高亮圆形按钮

    在本文中,我们将深入探讨如何在QT框架下创建一个具有抛光效果的高亮圆形按钮。QT是一个跨平台的应用程序开发框架,广泛用于构建桌面、移动和嵌入式系统的用户界面。利用QT的图形视图模型,我们可以轻松实现自定义的...

    Qt自定义控件动画效果按钮

    接下来,我们需要设置动画的属性,如持续时间、曲线类型等,并在paintEvent()中应用动画的当前值来改变按钮的大小: ```cpp void AnimatedButton::paintEvent(QPaintEvent *) { QPainter painter(this); // ... ...

    qt树型表格,并带有多行表头,超牛

    在这个特定的项目中,"qt树型表格,并带有多行表头,超牛",开发者实现了一个自定义的QT组件,它不仅是一个表格视图,还具有树状结构,这使得数据可以以层次形式展现,增强了数据的可读性和管理性。 多行表头是表格...

    qt表格自定义model,支持分页展示

    在Qt框架中,为了实现高性能的表格数据展示并支持分页功能,开发者通常需要自定义QAbstractItemModel或QSortFilterProxyModel。本教程将详细讲解如何创建一个自定义的模型来实现这一目标,以便在表格视图...

    Qt实现自定义按钮的状态

    在本文中,我们将深入探讨如何在Qt环境中使用C++实现自定义按钮的状态管理。Qt是一个跨平台的应用程序开发框架,广泛用于创建GUI(图形用户界面)应用。它提供了丰富的控件和API,使得开发者能够轻松地实现各种界面...

    Qt可自定义按钮(图片 、文本 、颜色)

    例如,我们可以将文本设置在按钮中央,图片放在左上角: ```cpp void NavBtn::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 开启抗锯齿 // ...

    QT 表格应用

    QT表格应用是一个强大的工具,尤其在处理大量数据和需要用户交互的界面设计中。QT库中的`QTableWidget`是实现此类应用的核心组件,它允许开发者创建和管理二维表格,支持数据的显示、编辑和排序。在这个特定的应用...

    QT下拉框样式表设置

    ### QT下拉框样式表设置详解 在QT中,我们经常需要对用户界面进行自定义样式设置以满足不同场景下的视觉需求。其中,`QComboBox`(即下拉框)是一种常用的控件,用于提供一系列选项供用户选择。本文将详细介绍如何...

    qt编程下实现点击按钮调用外部程序

    这是Qt框架的核心特性,允许我们在对象之间建立连接,当特定事件(如按钮被点击)发生时,可以触发预定义的函数(槽)执行。在这个场景中,我们将设置一个按钮,当用户点击它时,会触发调用外部程序的代码。 首先,...

Global site tag (gtag.js) - Google Analytics