実行時にQSplitterを移動させないようにしたい。 setEnabled(false)
を呼び出すと、これも実行されますが、すべての子ウィジェットも無効になります。これは私が望むものではありません。これを達成する方法はありますか?スプリッターを無効にしてから、手動ですべての子ウィジェットを再度有効にする必要がありますか?合理的に一般的な練習でなければならないことは、むしろ扱いにくいようです。Qtスプリッタを無効にする
誰もが何か示唆できますか?
実行時にQSplitterを移動させないようにしたい。 setEnabled(false)
を呼び出すと、これも実行されますが、すべての子ウィジェットも無効になります。これは私が望むものではありません。これを達成する方法はありますか?スプリッターを無効にしてから、手動ですべての子ウィジェットを再度有効にする必要がありますか?合理的に一般的な練習でなければならないことは、むしろ扱いにくいようです。Qtスプリッタを無効にする
誰もが何か示唆できますか?
実際にはスプリッタを無効にする人はいませんでした。ユーザーが必要に応じてUIをレイアウトすることができます。なぜ誰もこれを無効にしたいのですか?スプリッターが必要な場合や、通常のレイアウト(ユーザーがサイズ変更できない場合)のいずれかを使用することができます。
まだ試してみたい場合は、closestLegalPosition()またはgetRange()をご覧ください。ウィジェットの幅を返すだけなら、サイズ変更は機能しなくなります。
あなたは2つのことを行う必要があります。スプリッタ内のウィジェット(サイズ変更不可能)をFixedSize
に設定し、対応するスプリッタハンドルのカーソルをQt::ArrowCursor
に変更します。ハンドルは(左ではなく使用)ゼロで始まるので、2つのウィジェット間の第1のハンドルは、ここで1
はサンプル(main.cppににコードを置く)のインデックスである:今
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(800, 300);
window.setWindowTitle("Splitter Test");
window.show();
QSplitter *splitter = new QSplitter(&window);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);
splitter->setChildrenCollapsible(false);
splitter->show();
listview->show();
treeview->show();
textedit->show();
//make the lisview 'fix'
listview->setFixedSize(listview->width(), listview->height());
//change the cursor over the splitter handle between listview and
//treeview to ArrowCursor
splitter->handle(1)->setCursor(Qt::ArrowCursor);;
return app.exec();
}
最初のスプリッタハンドルはdisabled
で、2番目のスプリッタハンドルは動作します。
この操作を行います。私はそれが最も簡単な方法になるだろうと思い
for (int i = 0; i < splitter->count(); i++)
{
QSplitterHandle *hndl = splitter->handle(i);
hndl->setEnabled(false);
}
を - ユースケースはこれです:私は、スプリッタの子の内の1つの特定のモードにすることができるUIを、持っていますウィジェットが消えます。その場合、片方だけにウィジェットしかないので、スプリッタを動かすことができないようにしたいのですが、それは意味がありますか? – Thomi
奇数私は、スプリッターが単一の子供しか持たないときにドラッグ要素を提供しないと思います。実際に子供が1人しかいないことを確認できますか? –
さて、実際にはスプリッタからウィジェットを削除することはできません.QSplitterパブリックAPIはこれを行うためのメソッドを提供していません。達成できる最高のものは、子供を隠すことです。何か案は? – Thomi