QtableView中新增核取方塊

2022-08-10 15:12:16 字數 3380 閱讀 8882

先建立乙個qt widgets 應用程式,並將mainwindow.cpp檔案中修改為如下**

#include "

mainwindow.h

"#include

"ui_mainwindow.h

"#include

#include

#include

#include

#include

#include

#include

#include

static

bool

createconnectiondatebase()

qsqlquery query;

query.exec(

"create table test_sql (id int(1) primary key,name char(200),age int(1),chenked int (1))");

query.exec(

"insert into test_sql values(1,'測試1',18,0)");

query.exec(

"insert into test_sql values(2,'測試2',19,0)");

query.exec(

"insert into test_sql values(3,'測試3',20,0)");

return

true;}

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(newui::mainwindow)

model = new qsqltablemodel(this

); model->settable("

test_sql");

model->setheaderdata(0,qt::horizontal,tr("

id號"

)); model->setheaderdata(1,qt::horizontal,tr("姓名"

)); model->setheaderdata(2,qt::horizontal,tr("年齡"

)); model->select

(); qtableview *view = new qtableview(this

); view->setmodel(model);

setcentralwidget(view);

//ui->tableview->setmodel(model);

}mainwindow::~mainwindow()

執行檢視效果,

現在開始往這個表中新增核取方塊,需要繼承qsqltablemodel類,在工程中add new,新建乙個c++類,名字為mytablemodel,然後在將生成的mytablemodel.h和metaoblemodel.cpp修改為如下:

#ifndef mytablemodel_h

#define mytablemodel_h#include

class mytablemodel:public

qsqltablemodel

;#endif

//mytablemodel_h

#include "

mytablemodel.h

"qmap

check_state_map;

int checkcolumn = 3;//

將核取方塊放到第幾列,從0開始計數

mytablemodel::mytablemodel(qobject *parent, qsqldatabase db)

bool mytablemodel::setdata(const qmodelindex &index, const qvariant &value, int

role)

else

return

qsqltablemodel::setdata(index, value,role);

}qvariant mytablemodel::data(

const qmodelindex &index, int role) const

switch

(role)

return

qt::unchecked;

}default

:

return

qvariant();

}return

qvariant();

}qt::itemflags mytablemodel::flags(

const qmodelindex &index) const

然後將mianwindow.cpp中包含該標頭檔案 mytablemodel.h 然後將mianwindow.cpp的建構函式修改為如下:

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(newui::mainwindow)

model = new mytablemodel(this

); model->settable("

test_sql");

model->setheaderdata(0,qt::horizontal,tr("

id號"

)); model->setheaderdata(1,qt::horizontal,tr("姓名"

)); model->setheaderdata(2,qt::horizontal,tr("年齡"

)); model->select

(); qtableview *view = new qtableview(this

); view->setmodel(model);

setcentralwidget(view);

//ui->tableview->setmodel(model);

}

然後執行看效果

核取方塊已經出現在了第3列。

至於怎麼知道是否選中呢,

在mytablemodel.cpp檔案中的check_state_map中, check_state_map[i]的值就是第i行checkbox的值。

在PyQt中對QTableView新增右鍵選單

上面的軟體,最左側是qlist,中間是qlabelview,準備給中間的 加個右鍵選單,主要 如下 self.view setcontextmenupolicy qt.customcontextmenu 右鍵選單,如果不設為customcontextmenu,無法使用customcontextmen...

Qt中QTableView中加入Check列實現

class mymodel public qsqlquerymodel qt itemflags mymodel flags const qmodelindex index constqvariant mymodel data const qmodelindex index,int role con...

Qt中QTableView中加入Check列實現

qtableview qcheckbox列 核取方塊 qtableview中嵌入核取方塊checkbox 第二種方法 設定qabstracttablemodel的flags 函式法 通過delegate建立qcheckbox來實現的check列,只有在該列進入編輯模式時才能夠check unchec...