gpt4 book ai didi

c++ - 如何以编程方式获取 QTableWidgetItem 的边距宽度?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:11 26 4
gpt4 key购买 nike

我认为标题不言自明:给定一个 QTableWidget,其中的项目由 setItem 成员函数添加,我想知道每个项目的边距是多少。特别是,我想要这些单元格中左边距的宽度。

最佳答案

我准备了一个计算用户点击项目的文本边距(项目矩形和文本内容矩形之间的空间)的小例子:

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow mainWin;

QTableWidget* table = new QTableWidget(3, 3, &mainWin);
table->setItem(0, 0, new QTableWidgetItem("Item A"));
table->setItem(1, 0, new QTableWidgetItem("Item B"));
table->setItem(2, 0, new QTableWidgetItem("Item C"));
table->setItem(0, 1, new QTableWidgetItem("Item D"));
table->setItem(1, 1, new QTableWidgetItem("Item E"));
table->setItem(2, 1, new QTableWidgetItem("Item F"));
table->setItem(0, 2, new QTableWidgetItem("Item G"));
table->setItem(1, 2, new QTableWidgetItem("Item H"));
table->setItem(2, 2, new QTableWidgetItem("Item I"));

mainWin.setCentralWidget(table);
mainWin.show();

auto slot = [&table](QTableWidgetItem* item){
QStyleOptionViewItem option;
option.font = item->font();
option.fontMetrics = QFontMetrics(item->font());

if (item->textAlignment())
option.displayAlignment = static_cast<Qt::Alignment>(item->textAlignment());
else
option.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter; // default alignment

option.features |= QStyleOptionViewItem::HasDisplay;
option.text = item->text();
option.rect = table->visualItemRect(item);

// If your table cells contain also decorations or check-state indicators,
// you have to set also:
// option.features |= QStyleOptionViewItem::HasDecoration;
// option.icon = ...
// option.decorationSize = ...

QRect textRect = table->style()->subElementRect(QStyle::SE_ItemViewItemText, &option, nullptr);

double leftMargin = textRect.left() - option.rect.left();
double rightMargin = option.rect.right() - textRect.right();
double topMargin = textRect.top() - option.rect.top();
double bottomMargin = option.rect.bottom() - textRect.bottom();
qDebug() << leftMargin;
qDebug() << rightMargin;
qDebug() << topMargin;
qDebug() << bottomMargin;
};

QObject::connect(table, &QTableWidget::itemClicked, slot);
return app.exec();
}

编辑

要计算表格单元格边框和文本像素之间的精确间距,您必须使用 QFontMetrics 类。

参见QFontMetrics::leftBearing()QFontMetrics::tightBoundingRect()

关于c++ - 如何以编程方式获取 QTableWidgetItem 的边距宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com