QPushButton* btn[6];
QWidget* centralWidget;
centralWidget = new QWidget(this);
centralWidget->resize(600, 400);
centralWidget->move(20, 20);
centralWidget->setStyleSheet("background-color:rgb(255, 255, 255); ");
const QSize btnSize = QSize(200, 200);
for(int i = 0; i < 6; i++)
{
btn[i] = new QPushButton();
btn[i]->setText(QString::number(i));
btn[i]->setFixedSize(btnSize); //btn[i]->resize(200, 200);不会填满宫格
}
btn[0]->setStyleSheet("background-color:rgb(255, 0, 0); ");
btn[1]->setStyleSheet("background-color:rgb(0, 255, 0); ");
btn[3]->setStyleSheet("background-color:rgb(0, 0, 255); ");
QGridLayout *btnLayout = new QGridLayout(centralWidget);
btnLayout->setContentsMargins(0, 0, 0, 0);
btnLayout->setSpacing(0);
//btn[0]->setAutoFillBackground();
btnLayout->addWidget(btn[0], 0, 0);
btnLayout->addWidget(btn[1], 0, 1);
btnLayout->addWidget(btn[2], 0, 2);
btnLayout->addWidget(btn[3], 1, 0);
btnLayout->addWidget(btn[4], 1, 1);
btnLayout->addWidget(btn[5], 1, 2);
centralWidget->setLayout(btnLayout);
TableView中添加图片
void ImgDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}
void ImgDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
#if 0
QStyleOptionViewItem viewOption(option);
if (option.state.testFlag(QStyle::State_HasFocus))
viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
if(index.column() == 0)
{ //图片
const QAbstractItemModel * model=index.model();
QVariant var=model->data(index,Qt::DisplayRole);
if(var.isNull()) var=false;
QPixmap show;
if (0 == index.row())
{
show = QPixmap("res/132.jpg");
}
if(1 == index.row())
{
show = QPixmap("res/memorandum.png");
}
QRect rect=option.rect;
show = show.scaled(rect.width(), rect.height(),
Qt::KeepAspectRatio);
int width=show.width();
int height=show.height();
int x=rect.x()+rect.width()/2-width/2;
int y=rect.y()+rect.height()/2-height/2;
painter->drawPixmap(x,y,show);
}else if (index.column() == 1) { //勾选框
// bool d = index.model()->data(index, Qt::EditRole).toBool();
// QStyleOptionButton checkBoxStyle;
// checkBoxStyle.state = d ? QStyle::State_On : QStyle::State_Off;
// checkBoxStyle.state |= QStyle::State_Enabled;
// checkBoxStyle.iconSize = QSize(32, 32);
// checkBoxStyle.rect = option.rect;
// QCheckBox checkBox;
// QApplication::style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &checkBoxStyle, painter, &checkBox);
}else if (index.column() == 2) { //下拉框
// QString value = index.model()->data(index, Qt::EditRole).toString();
// QStyleOptionComboBox comboBoxStyle;
// comboBoxStyle.currentText = value;
// comboBoxStyle.state |= QStyle::State_Enabled;
// comboBoxStyle.rect = option.rect;
// QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxStyle, painter);
// QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxStyle, painter);
}
#endif
QStyleOptionViewItem viewOption(option);
//initStyleOption(&viewOption, index);
if (option.state.testFlag(QStyle::State_HasFocus))
viewOption.state = viewOption.state ^ QStyle::State_HasFocus;
// // ... 省略
// // 设置显示文本为空,使用默认样式
QStyle *pStyle = viewOption.widget? viewOption.widget->style() : QApplication::style();
// viewOption.text = "";
// pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget);
// 需要显示的HTML
QString strHTML = QString("<html> \
<head> \
<style> \
</style> \
</head> \
<body>\
<img src=\"res/132.jpg\" width=\"40\" height=\"40\"> \
</body> \
</html>");
QTextDocument doc;
doc.setHtml(strHTML);
QAbstractTextDocumentLayout::PaintContext paintContext;
QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption);
painter->save();
// 坐标变换,将左上角设置为原点
painter->translate(textRect.topLeft());
// 设置HTML绘制区域
painter->setClipRect(textRect.translated(-textRect.topLeft()));
doc.documentLayout()->draw(painter, paintContext);
painter->restore();
}
QTableView标题栏