Men的博客

欢迎光临!

0%

QT开发总结

样式表同css

加载
QApplication a(argc, argv);
QFile qss(“:/new/icon/ai3d.qss”);
if( qss.open(QFile::ReadOnly))
{
qDebug(“open success”);
QString style = QLatin1String(qss.readAll());
a.setStyleSheet(style);
qss.close();
}
else
{
qDebug(“Open failed”);
}

TableView Model

// 行数

int rowCount(const QModelIndex &parent) const;
// 列数
int columnCount(const QModelIndex &parent) const;
// 数据展示形式
QVariant data(const QModelIndex &index, int role) const;
switch (role)
{
case Qt::DisplayRole:// 数据展示
{
int ncol = index.column();
int nrow = index.row();
return m_data.at(nrow);
}
case Qt::EditRole: // 编辑
return QVariant();
case Qt::FontRole: // 字体
return QFont(“consolas”, 12, 12);
case Qt::TextAlignmentRole:// 对齐方式
return Qt::AlignCenter;
case Qt::ForegroundRole://前景
return QBrush(Qt::white);
case Qt::CheckStateRole: // 选中状态
{
if (index.column() == 0)
{
AerialTriangulationTaskData values = m_data.at(index.row());
return values.selected ? Qt::Checked : Qt::Unchecked;
}
}
}
return QVariant();
// 设置数据
bool setData(const QModelIndex &index, const QVariant &value, int role);
// 选中状态
Qt::ItemFlags flags(const QModelIndex &index) const;
// 表头展示
QVariant headerData(int section, Qt::Orientation orientation, int role) const;

QSizePolicy

QSizePolicy::Fixed 不能放大也不能缩小。
QSizePolicy::Minimum 可以变大,最小为设定值
QSizePolicy::Maximum 可以变小,最大值为设定值
QSizePolicy::Preferred 不倾向于扩展比sizeHint()大(QWidget的缺省策略)
QSizePolicy::Expanding 尽量占用剩余空间
QSizePolicy::MinimumExpanding 大小是最小值,并且是足够的。部件允许使用额外空间
QSizePolicy::Ignored 部件将会得到尽可能多的空间。

tableView

m_tableView = new QTableView;
m_tableView->setShowGrid(false); // 不显示边框
m_tableView->setAlternatingRowColors(true); // 隔行换色
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); // 选中时为整行选中
m_tableView->horizontalHeader()->setStretchLastSection(true);//最后一行是否铺满剩余空间
QHeaderView *verticalHeader = m_tableView->verticalHeader(); // 垂直表头
QHeaderView *horizontalHeader = m_tableView->horizontalHeader(); // 水平表头
verticalHeader->hide(); // 隐藏垂直方向行头
verticalHeader->setDefaultSectionSize(44); // 设置高度
horizontalHeader->setMinimumHeight(44); // 设置最小高度
m_tableView->setColumnWidth(0, 36);// 设置列宽度

圆角边框

void ImportPOSFileAdjustWidget::paintEvent(QPaintEvent *event)
{
QStylePainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(Qt::transparent));
painter.setPen(QColor(“#C1C1C1”));
QRect rect = this->rect();
painter.drawRoundedRect(rect, 3, 3);
QWidget::paintEvent(event);
}

间距

mainLayout->setSpacing(10);
mainLayout->setMargin(1);
mainLayout->setContentsMargins(1, 1, 1, 1);

tableView Delegate

void PosInfoTableDelegate::paint(QPainter painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QPair<QStyleOptionButton*, QStyleOptionButton*>
buttons = m_btns.value(index);
if (!buttons) {
QStyleOptionButton* button1 = new QStyleOptionButton();
button1->rect = option.rect.adjusted(4, 4, -(option.rect.width() / 2 + 4) , -4);
button1->text = QStringLiteral(“查看”);
QPalette pal = button1->palette;
pal.setColor(QPalette::ButtonText, QColor(255, 255, 255));
button1->palette = pal;
button1->icon = QIcon(“:/new/icon/largeImage.png”);
button1->iconSize = QSize(40,40);

    QStyleOptionButton* button2 = new QStyleOptionButton();
    button2->rect = option.rect.adjusted(button1->rect.width() + 4, 4, -4, -4);
    button2->icon =  QIcon(":/new/icon/closeTab.png");
    button2->iconSize = QSize(40,40);
    buttons =new  QPair<QStyleOptionButton*, QStyleOptionButton*>(button1, button2);
    (const_cast<PosInfoTableDelegate *>(this))->m_btns.insert(index, buttons);
}
buttons->first->rect = option.rect.adjusted(4, 4, -(option.rect.width() / 2 + 4) , -4); //
buttons->second->rect = option.rect.adjusted(buttons->first->rect.width() + 4, 4, -4, -4);
painter->save();

if (option.state & QStyle::State_Selected) {
    painter->fillRect(option.rect, option.palette.highlight());

}
painter->restore();
QApplication::style()->drawControl(QStyle::CE_PushButton, buttons->first, painter);
QApplication::style()->drawControl(QStyle::CE_PushButton, buttons->second, painter);

}

bool PosInfoTableDelegate::editorEvent(QEvent event, QAbstractItemModel model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
if (event->type() == QEvent::MouseButtonRelease) {
QMouseEvent
e =(QMouseEvent
)event;
if (m_btns.contains(index)) {
QPair<QStyleOptionButton*, QStyleOptionButton*>* btns = m_btns.value(index);
if (btns->first->rect.contains(e->x(), e->y())) {
emit lookRow(index.row());
} else if(btns->second->rect.contains(e->x(), e->y())) {
btns->second->state &= (~QStyle::State_Sunken);
emit deleteRow(index.row());
}
}
}
return false;
}