私は構成QDialogに取り組んでいます。ユーザーがクリックすると読み込まれるいくつかのカテゴリ (一般、外観など) があります。各カテゴリには独自のページがあります。これらのページは、それ自体が別個のクラスです (それぞれに独自の ui、cpp、および h があります)。[設定] ウィンドウが読み込まれると、ページがインスタンス化され、QStackedWidget に読み込まれます。Stackedwidget は QScrollArea に配置され、必要に応じてスクロールできるようになります。
ただし、問題があります。QStackedWidget を追加して以来、現在のページが必要ないほど短い場合でも、QScrollArea には常に垂直スクロールバーがあります: (図は最も短いページを示しています)
ScrollArea 垂直スクロール ポリシーは Qt::ScrollBarAsNeeded に設定されているため、論理的には、ページが表示可能領域よりも大きい場合にのみバーを表示する必要があります。
これは私がすでにこれを修正しようとしたものです:
スクロール ポリシーを Qt::ScrollBarAlwaysOff に設定します。これによりスクロールバーが取り除かれますが、長いページをスクロールする必要があることをユーザーに知らせないため、受け入れられません。
QStackedwidget の最小/最大の高さを設定します。これにより、十分に低い値に設定するとスクロールバーが消えますが、ウィジェットの一部が押しつぶされた外観になるため、受け入れられません。
問題が QStackedWidget に関係していることはわかっていますが、QStackedWidget を使用するのはこれが初めてなので、それが何であるかはわかりません。また、スクロールが常に同じ量であることにも気付きました。つまり、スクロール可能な領域は、ページ ウィジェットのサイズに関係なく、常に同じサイズです。なんらかの理由で、最も長いページよりもわずかに大きくなっています。最初は、レイアウトを引き締めるために各ページの下部に配置した垂直スペーサーがこれを引き起こしていると思いましたが、それらを取り除いても修正されませんでした.
更新: Stackedwidget を制御するコードは次のとおりです。
void Newconfig::on_Categories_currentItemChanged(QTreeWidgetItem *current)
{
QModelIndex index=ui->Categories->currentIndex();
int idx=index.row();
QString category=current->text(0);
this->setWindowTitle("Preferences -- " + category);
if (stack->currentWidget() != 0) {
stack->currentWidget()->setSizePolicy(QSizePolicy::Ignored,
QSizePolicy::Ignored);
}
stack->setCurrentIndex(idx);
stack->currentWidget()->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
adjustSize();
}