سؤال

أنا أعمل مع واجهة المستخدم الرسومية QT. أنا أقوم بتنفيذ عنصر تحكم سداسي سداسي بسيط باستخدام QTableView. فكرتي الأولية هي استخدام جدول مع سبعة عشر عمودًا. سيكون لكل صف من الجدول 16 بايت سداسي ثم تمثيل ASCII لتلك البيانات في العمود السابع عشر. من الناحية المثالية ، أود تحرير/ضبط نمط العمود السابع عشر لعدم وجود خطوط في أعلى وأسفل كل خلية لإعطاء النص مظهرًا مجانيًا متدفقًا. ما هي أفضل طريقة للتعامل مع هذا باستخدام QTableView؟

هل كانت مفيدة؟

المحلول

أستطيع أن أفكر في طريقين لفعل ما تحتاجه ؛ سيشمل كلاهما رسم شبكة مخصصة لأنه لا توجد طريقة مباشرة للأمام للتثبيت في روتين لوحة الشبكة لفئة QTableView:

1. احصل على الشبكة القياسية لشبكة TreeView الخاصة بك عن طريق استدعاء SetShowGrid (خطأ) ورسم خطوط الشبكة للخلايا التي تحتاج إلى استخدام مندوب العنصر. أدناه مثال:

// custom item delegate to draw grid lines around cells
class CustomDelegate : public QStyledItemDelegate
{
public:
    CustomDelegate(QTableView* tableView);
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
private:
    QPen _gridPen;
};

CustomDelegate::CustomDelegate(QTableView* tableView)
{
    // create grid pen
    int gridHint = tableView->style()->styleHint(QStyle::SH_Table_GridLineColor, new QStyleOptionViewItemV4());
    QColor gridColor = static_cast<QRgb>(gridHint);
    _gridPen = QPen(gridColor, 0, tableView->gridStyle());
}

void CustomDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
    QStyledItemDelegate::paint(painter, option, index);

    QPen oldPen = painter->pen();
    painter->setPen(_gridPen);

    // paint vertical lines
    painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
    // paint horizontal lines 
    if (index.column()!=1) //<-- check if column need horizontal grid lines
        painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());

    painter->setPen(oldPen);
}

// set up for your tree view:
ui->tableView->setShowGrid(false);
ui->tableView->setItemDelegate(new CustomDelegate(ui->tableView));

2. إنشاء سليل QTableview وتجاوز ألم طريقة. هناك إما أن ترسم الشبكات الخاصة بك أو السماح للفئة الأساسية لرسمها ثم ترسم الخطوط الأفقية فوق الشبكة باستخدام لون خلفية TableView.

أتمنى أن يساعد هذا ، تحياتي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top