1. 程式人生 > >QT 表格設定左上角按鈕

QT 表格設定左上角按鈕

 QT表格模型沒有提供訪問左上角按鈕的API, 檢視qtableview.cpp 發現其中有一個QTableCornerButton的私有類, 既然AP沒有暴露出該類, 那我們如何設定左上角按鈕的顯示方式呢?

一. 設定左上角按鈕背景色

      既然知道左上角按鈕就是QTableCornerButton, 我們就可以通過該類名設定該按鈕樣式 

Cpp程式碼  收藏程式碼
  1. table->setStyleSheet("QTableCornerButton::section{background-color:red;}");  

二. 設定按鈕文字

    雖然沒有提供直接的訪問方式,可以通過findChild()來定位到該按鈕,然後設定其文字及顯示寬度.

Cpp程式碼  收藏程式碼
  1. class TableWidget:public QTableWidget  
  2. {  
  3. public:  
  4.     TableWidget(int rows, int cols, QWidget* parent = 0)  
  5.         : QTableWidget(rows, cols, parent)  
  6.     {  
  7.         QAbstractButton* btn = findChild<QAbstractButton*>();  
  8.         if (btn)  
  9.         {  
  10.             btn->setText("Text"
    );  
  11.             btn->installEventFilter(this);  
  12.             // adjust the width of the vertical header to match the preferred corner button width  
  13.             // (unfortunately QAbstractButton doesn't implement any size hinting functionality)  
  14.             QStyleOptionHeader opt;  
  15.             opt.text = btn->text();  
  16.             QSize s = (btn->style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize(), btn).  
  17.                        expandedTo(QApplication::globalStrut()));  
  18.             if (s.isValid())  
  19.                 verticalHeader()->setMinimumWidth(s.width());  
  20.         }  
  21.     }  
  22.     bool eventFilter(QObject* o, QEvent* e)  
  23.     {  
  24.         if (e->type() == QEvent::Paint)  
  25.         {  
  26.             QAbstractButton* btn = qobject_cast<QAbstractButton*>(o);  
  27.             if (btn)  
  28.             {  
  29.                 // paint by hand (borrowed from QTableCornerButton)  
  30.                 QStyleOptionHeader opt;  
  31.                 opt.init(btn);  
  32.                 QStyle::State state = QStyle::State_None;  
  33.                 if (btn->isEnabled())  
  34.                     state |= QStyle::State_Enabled;  
  35.                 if (btn->isActiveWindow())  
  36.                     state |= QStyle::State_Active;  
  37.                 if (btn->isDown())  
  38.                     state |= QStyle::State_Sunken;  
  39.                 opt.state = state;  
  40.                 opt.rect = btn->rect();  
  41.                 opt.text = btn->text(); // this line is the only difference to QTableCornerButton  
  42.                 opt.position = QStyleOptionHeader::OnlyOneSection;  
  43.                 QStylePainter painter(btn);  
  44.                 painter.drawControl(QStyle::CE_Header, opt);  
  45.                 return true// eat event  
  46.             }  
  47.         }  
  48.         return false;  
  49.     }  
  50. };  

    執行效果:

    執行效果

文章 來源:http://tcspecial.iteye.com/blog/1923063

相關推薦

QT 表格設定左上角按鈕

 QT表格模型沒有提供訪問左上角按鈕的API, 檢視qtableview.cpp 發現其中有一個QTableCornerButton的私有類, 既然AP沒有暴露出該類, 那我們如何設定左上角按鈕的顯示方式呢? 一. 設定左上角按鈕背景色       既然知道左上角按

QT設定按鈕圖片和文字的兩種方法

1.使用QpushButton自帶的API實現: void setIcon(const QIcon &icon) void setText(const QString &text) 該方法使用了自帶的函式設定,缺點是無法自由調整圖示和文字之間的間距 2.使用Qlabel和佈局

QT設定ToolButton按鈕的樣式

QToolButton{      min-width:80px;      min-height:32px;   }   QToolButton{   color:rgb(255, 255, 255);   min-height:20;   border-style:

QT 4 設定按鈕大小,設定wigdet 大小例子(除錯通過)

classMywidget:publicQWidget { Q_OBJECT public: explicitMywidget(QWidget*parent=0); signals: publicslots: private: QPushButton*TestPushButt

Angular4 後臺管理系統搭建(3) - wijmo5 flexgrid表格增刪改按鈕實現

-a bsp pack github 技術分享 lease 需要 lec 獲取 這章應該是wijmo5 flexgrid表格應用的最後一章,我們在三章內介紹了flexgrid表格組件的數據綁定,分頁器搭建,單元格模板控制和代碼重繪單元格控制。這章在介紹下對表格添加增刪改

蘋果手機左上角按鈕返回不刷新

page 必須 按鈕 刷新 底部導航 跳轉 丟失 返回 切換 在實際項目中,點擊底部導航,跳轉到不同的頁面,而且相對應的按鈕加active 類名,改變其背景圖 pc, 安卓返回都木有問題,但是蘋果手機左上角點擊返回按鈕時出現active不會切換和從上一頁返回後需要改變的底部

antd Table表格 單選按鈕

效果圖: 引入antd的表格後: <Table bordered columns={columns} dataSource={dataSource} rowSelection={rowRadioSelection} pagination={false}rowKey={dataSource

Java--對接微信第五篇之底部選單按鈕url設定(通過按鈕回撥獲取openid)

在上一篇的基礎上,有一個地方是需要去微信公眾平臺設定的(如果你這個url需要獲取使用者openid的話!如果不需要獲取可以無視) 登入微信公眾平臺-->公眾號設定-->選擇功能設定-->設定網頁授權域名(為微信認為安全的地址,不用精確到方法,但是你需要將一個文字金鑰放入對應

layui中彈出層中將確認按鈕變為form表格的提交按鈕

layer.open({ type : 1, title : '新增角色', area : [ '500px', '350px' ], shadeClose : true, // 點選遮罩關閉 content : html, btn : [ '儲存', '取消' ], s

JTable表格設定隔行顏色

定義函式,隔行設定表格背景色 在表格顯示之前呼叫,setColumnColor(table);,table是你新建的表格。 public static void setColumnColor(JTable table) { try { Default

Qt QDialog 設定圓角

對於普通的控制元件,我們通過樣式表(css)設定圓角就比較簡單 border-radius:5px 但是這個方法對於QDialog並沒有作用。經過仔細研究發現了。原來QDialog只是一個容器,對於已經設定無邊框(Qt::FramelessWindowHint)的對話方塊,直接設定border-radiu

QT點選"X"按鈕,呼叫closeEvent()函式來實現呼叫特定事件

背景:   QT在使用者關閉視窗(直接點選"X"鍵)時,程式一般都需要做一些善後的事情,就我現在的程式來說,既關閉USB。如何實現? 正文:   首先,在對應窗體的".h"檔案包含 #include <QCloseEvent>;的標頭檔案。   其

Qt設定QTableWidget的表頭高度

關鍵就是 ui->tableWidget->horizontalHeader()->setMinimumHeight(30); ui->tableWidget->set

QT comboBox設定下拉選單()

設定combobox的item方法有兩種 方法一:適合有規律的,可利用for迴圈減少程式碼量,當然也可以一個一個插入 方法二:適合無規律的 程式碼如下 //方法一: for (int i

QT學習---day1---視窗按鈕的操作

//qt學習筆記: //12_7 //跨平臺,完全面向物件,容易擴充套件,容易組建程式設計。 //QWidget 和 QMainWindow 和 QDialog 之間的關係。 //QWidget是基類,QMainWindow 和 QDialog 是子類。 /* QWidget 是

Android Studio裡設定按鈕,開發到手機上,點開按鈕,卻發現沒有跳到下一個介面,而是閃退的原因

如果你在介面設定了按鈕,開發到手機上,點開按鈕,卻發現沒有跳到下一個介面,而是閃退。 原因是因為你沒有在左圖的xml檔案裡把結果的目標activity這3行寫進去。寫進去之後再重新下載到手機上,就可以了。

Qt如何設定某個區域透明

方法:過載paintEvent,在區域內重新繪製 程式碼: void UIMainWindow::paintEvent(QPaintEvent* event) { QPainter p(this); p.setCompositionMode(QPainter::Composi

Qt——軟體設定引數檔案快速讀取

每個軟體多多少少都會存在一些自己的引數,需要依靠配置檔案對軟體進行後臺改動,當引數數量不是很多的時候解析不是很困難,但是如果引數數量比較多的時候在解析的時候會比較麻煩的。 .ini 檔案是Initialization File的縮寫,即初始化檔案,是windows的系統配置檔

bootstrap 表格設定列固定寬度以及內容自動換行的CSS

<style type="text/css"> #contentTable{ table-layout:fixed; /* bootstrap-table設定colmuns中某列的寬度無效時,需要給整個表設定css屬性 */ word-break:break-all;

Qt 佈局設定stretch,不起作用解決方法

addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment()) insertStretch(int index, int stretch = 0) setStretchFactor(