私はタイトルがそれ自身のために話していると思う:の項目がsetItem
メンバー機能によって追加されていると、各項目の余白が何であるか知りたい。特に、これらのセルには左余白の幅が必要です。QTableWidgetItemの余白の幅をプログラムで取得する方法は?
答えて
Iは、上の項目のユーザーのクリックのテキストマージン(項目矩形とテキスト内容長方形との間の空間)を計算するほとんどの例を調製した:
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();
}
正確なスペースを計算するためにEDIT
表のセル境界線とテキストピクセルの間には、QFontMetrics
クラスを使用する必要があります。
QFontMetrics::leftBearing()
およびQFontMetrics::tightBoundingRect()
を参照してください。
良いプログラムですが、計算に間隔がありません:左余白は常に0ですが、列の左端とテキストの開始点の間には目に見える隙間があります。 私は試しませんでしたが、楕円を得ることなく、列と同じ幅のテキストで列を塗りつぶすことはできません。テキストを折り返すために正確な計算が必要です。 また、テーブル自体から値を取得する方法があるはずですが、各アイテムの値は常に同じです(この場合は0)。 –
文字の左マージンと一番左のピクセルの間隔は、実際には表のセルではなくフォントのプロパティです。 'QFontMetrics'を使ってギャップ幅を計算します。 – Tomas
- 1. プログラムでキャンバスの余白を変更する方法
- 2. ダイアログの右余白と左余白を追加する方法
- 3. プログラムでTextViewの幅を取得する
- 4. アイテムの幅、高さ、余白を取得し、それらの値を丸める
- 5. 余白を取り除く方法
- 6. AndroidのOnItemClickListenerで余分なデータを取得する方法は?
- 7. ワールドマップの余白を減らす方法
- 8. Prettyphotoサムネイルの余白 - 調整方法は?
- 9. 余白を設定する方法
- 10. ブートストラップのコンテナの余白の幅を変更する
- 11. Xamarinフォーム:グリッド内のボタンに余白があります。その余白を取り除く方法
- 12. 左/右の自動余白と900px幅の余白がiPad/iPhoneで余分に広い余白で配置されています
- 13. html2pdfを使用しているときにCSSの左余白と上余白を取り除く方法
- 14. FreeTypeでテキストの幅を取得する方法は?
- 15. rowboundイベントでGridView列の幅を取得する方法は?
- 16. Libgdxで文字列の幅を取得する方法は?
- 17. モバイルで全幅の背景を取得する方法は?
- 18. Androidでメディアプレーヤーの振幅を取得する方法は?
- 19. プロットの1ピクセル幅の白い余白(下側と右側)を取り除くことはできません
- 20. プログラムのヒープサイズを取得する方法
- 21. ボタンの余白をプログラムで設定する
- 22. 余分な空白を取り除く方法ブートストラップのビデオ
- 23. divの余白の値を取得しますか?
- 24. ボタンの余白 - 左余白左の画像の左余白
- 25. UICollectionViewのセルと余白の間の幅を指定します。
- 26. div内のすべての幅、余白、パディングをオーバーライドする方法はありますか? CSS
- 27. ラベルの下に余白を設定する方法は?
- 28. ButtomSheetDialogFragment Androidに左右の余白を設定する方法は?
- 29. Linuxのプログラムでディレクトリのサイズを取得する方法は?
- 30. KubernetesでサービスのNodePortをプログラムで取得する方法は?
セルテキストとセル境界の間のスペースを参照していますか? –
はい。私はそれがいつも "マージン"が意味するものだと思った。 –
'table.cellWidget(row、col) - > contentsMargins()。left()'を試したことがありますか? –