最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt?QTableWidget?實(shí)現(xiàn)行選中及行懸浮高亮效果

 更新時(shí)間:2024年09月23日 11:38:02   作者:為啥不吃肉捏  
使用Qt開發(fā)中,實(shí)現(xiàn)表格的行選中和懸浮高亮效果是一個(gè)常見需求,但Qt自帶的方法無法直接實(shí)現(xiàn),解決方案是通過子類化QStyledItemDelegate并重寫其paint函數(shù)來定制化繪制過程,本文給大家介紹Qt?QTableWidget?實(shí)現(xiàn)行選中及行懸浮高亮效果,感興趣的朋友一起看看吧

表格整行的 selected、hover 高亮需求很常見,但使用 Qt 提供的開箱即用的方法根本無法實(shí)現(xiàn)這個(gè)需求(至少在當(dāng)前的時(shí)間節(jié)點(diǎn)是不行的);想要實(shí)現(xiàn)這個(gè)效果必須要費(fèi)一點(diǎn)點(diǎn)力氣,我們盡量選擇較為簡單的方法。

話不多說,先看效果圖:

演示

實(shí)現(xiàn)的原理

經(jīng)常用 QWidgets 的朋友應(yīng)該都知道,框架中的 QTableWidget、QTreeWidget、QListWidget 等控件以及它們的基類 xxView 都是 MVD(model、view、delegate) 的結(jié)構(gòu),實(shí)現(xiàn)整行選中我們選擇子類化 QStyledItemDelegate 的方式,這個(gè)方法較為簡單,不會(huì)增加太多的心智負(fù)擔(dān),只需要以下幾個(gè)步驟:

  • 創(chuàng)建一個(gè)類繼承于 QStyledItemDelegate
  • 將外部將要使用這個(gè) delegate 的 QTableWidget 傳入,這里我選擇了作為構(gòu)造函數(shù)的參數(shù),形式無所謂,只要確保在使用的時(shí)候此對象有效即可
  • 重寫基類的 paint 函數(shù),客制化邏輯
  • 創(chuàng)建對象,設(shè)置給 QTableWidget

頭文件

#include <QStyledItemDelegate>
#include <QTableWidget>
class HoveredRowItemDelegate : public QStyledItemDelegate
{
public:
    explicit HoveredRowItemDelegate(QTableWidget *parent = nullptr);
protected:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
private:
    const QTableWidget *tableWidget{};
};

源文件

#include "hoveredrowitemdelegate.h"
#include <QPainter>
HoveredRowItemDelegate::HoveredRowItemDelegate(QTableWidget *parent)
    : QStyledItemDelegate{parent}
{
    tableWidget = parent;
}
void HoveredRowItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    //選中狀態(tài)或是在鼠標(biāo)下方的狀態(tài)
    if(option.state.testFlag(QStyle::State_Selected) || option.state.testFlag(QStyle::State_MouseOver))
    {
        QTableWidgetItem *hoveredItem = tableWidget->item(index.row(), index.column());
        if(hoveredItem)
        {
            const int row = hoveredItem->row();
            //遍歷列,繪制此行的所有列
            for(int column = 0; column < tableWidget->columnCount(); column++)
            {
                QTableWidgetItem *item = tableWidget->item(row, column);
                if(item)
                {
                    QModelIndex index = tableWidget->model()->index(row, column);
                    QStyleOptionViewItem itemOption = option;
                    itemOption.index = index;
                    itemOption.rect = tableWidget->visualItemRect(item);
                    QStyledItemDelegate::paint(painter, itemOption, index);
                }
            }
        }
    }
    else
    {
        return QStyledItemDelegate::paint(painter, option, index);
    }
}

使用

auto delegate = new HoveredRowItemDelegate(ui->tableWidget);
ui->tableWidget->setItemDelegate(delegate);

 QTableWidget 設(shè)置下樣式表:

QTableView::item:hover
{
	background-color: red;
}
QTableView::item:selected
{
	background-color: blue;
}

到此這篇關(guān)于Qt QTableWidget 實(shí)現(xiàn)行選中及行懸浮高亮效果的文章就介紹到這了,更多相關(guān)Qt QTableWidget 行懸浮高亮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Visual Studio 2022中創(chuàng)建的C++項(xiàng)目無法使用萬能頭<bits/stdc++.h>的解決方案

    Visual Studio 2022中創(chuàng)建的C++項(xiàng)目無法使用萬能頭<bits/stdc++.h>的

    如果大家也遇到下面這種問題,可能是沒有include文件夾中沒有bits/stdc++.h,這篇文章主要介紹了Visual Studio 2022中創(chuàng)建的C++項(xiàng)目無法使用萬能頭<bits/stdc++.h>的解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 一起來了解c語言的str函數(shù)

    一起來了解c語言的str函數(shù)

    這篇文章主要為大家詳細(xì)介紹了c語言的str函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Qt實(shí)現(xiàn)配置文件讀寫操作的示例詳解

    Qt實(shí)現(xiàn)配置文件讀寫操作的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt實(shí)現(xiàn)配置文件讀寫操作,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • Qt實(shí)現(xiàn)密碼顯示按鈕

    Qt實(shí)現(xiàn)密碼顯示按鈕

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)密碼顯示按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++獲取當(dāng)前系統(tǒng)時(shí)間的方法總結(jié)

    C++獲取當(dāng)前系統(tǒng)時(shí)間的方法總結(jié)

    這篇文章主要介紹了C++獲取當(dāng)前系統(tǒng)時(shí)間的方法,實(shí)例總結(jié)了四個(gè)獲取系統(tǒng)時(shí)間的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C++基礎(chǔ)概念講述

    C++基礎(chǔ)概念講述

    這篇文章主要介紹了C++基礎(chǔ)概念,??本次為C++的一個(gè)開篇,重點(diǎn)是更好的理解C++相對于其他編程語言的一個(gè)特性,之后會(huì)持續(xù)更新,本次專欄計(jì)劃是掌握C++的基礎(chǔ)語法以及常用特性,并且從細(xì)節(jié)上去理解,需要的朋友可以參考一下
    2021-12-12
  • 在C語言中對utmp文件進(jìn)行查找和寫入操作的函數(shù)小結(jié)

    在C語言中對utmp文件進(jìn)行查找和寫入操作的函數(shù)小結(jié)

    這篇文章主要介紹了在C語言中對utmp文件進(jìn)行查找和寫入操作的函數(shù)小結(jié),包括pututline()函數(shù)和getutline()函數(shù)以及getutid()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++實(shí)現(xiàn)打印兩個(gè)有序鏈表公共部分的方法

    C++實(shí)現(xiàn)打印兩個(gè)有序鏈表公共部分的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)打印兩個(gè)有序鏈表公共部分的方法,涉及C++針對有序鏈表的簡單遍歷、比較相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C++?MiniZip實(shí)現(xiàn)目錄壓縮與解壓的示例詳解

    C++?MiniZip實(shí)現(xiàn)目錄壓縮與解壓的示例詳解

    Zlib是一個(gè)開源的數(shù)據(jù)壓縮庫,提供了一種通用的數(shù)據(jù)壓縮和解壓縮算法,本文主要為大家詳細(xì)介紹了如何利用Zlib實(shí)現(xiàn)目錄壓縮與解壓,需要的小伙伴可以參考下
    2023-11-11
  • C++中POCO庫的安裝與基礎(chǔ)知識介紹(Windwos和Linux)

    C++中POCO庫的安裝與基礎(chǔ)知識介紹(Windwos和Linux)

    這篇文章主要為大家介紹了C++ POCO庫的簡單介紹、下載以及安裝方式、簡單代碼示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-05-05

最新評論

荥阳市| 沂源县| 农安县| 天门市| 尼木县| 阿城市| 容城县| 聂拉木县| 柳河县| 宣威市| 祥云县| 崇文区| 靖边县| 阿合奇县| 建德市| 手游| 鞍山市| 海城市| 盐城市| 香河县| 建始县| 衡水市| 奉化市| 金乡县| 乌兰县| 垦利县| 阿坝| 浮山县| 北京市| 肃北| 玉山县| 五峰| 克东县| 云安县| 孟州市| 大竹县| 华容县| 桐乡市| 定州市| 名山县| 同心县|