2009-10-20 9 views
5

実行時にQSplitterを移動させないようにしたい。 setEnabled(false)を呼び出すと、これも実行されますが、すべての子ウィジェットも無効になります。これは私が望むものではありません。これを達成する方法はありますか?スプリッターを無効にしてから、手動ですべての子ウィジェットを再度有効にする必要がありますか?合理的に一般的な練習でなければならないことは、むしろ扱いにくいようです。Qtスプリッタを無効にする

誰もが何か示唆できますか?

答えて

1

実際にはスプリッタを無効にする人はいませんでした。ユーザーが必要に応じてUIをレイアウトすることができます。なぜ誰もこれを無効にしたいのですか?スプリッターが必要な場合や、通常のレイアウト(ユーザーがサイズ変更できない場合)のいずれかを使用することができます。

まだ試してみたい場合は、closestLegalPosition()またはgetRange()をご覧ください。ウィジェットの幅を返すだけなら、サイズ変更は機能しなくなります。

+1

を - ユースケースはこれです:私は、スプリッタの子の内の1つの特定のモードにすることができるUIを、持っていますウィジェットが消えます。その場合、片方だけにウィジェットしかないので、スプリッタを動かすことができないようにしたいのですが、それは意味がありますか? – Thomi

+0

奇数私は、スプリッターが単一の子供しか持たないときにドラッグ要素を提供しないと思います。実際に子供が1人しかいないことを確認できますか? –

+0

さて、実際にはスプリッタからウィジェットを削除することはできません.QSplitterパブリックAPIはこれを行うためのメソッドを提供していません。達成できる最高のものは、子供を隠すことです。何か案は? – Thomi

0

あなたは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番目のスプリッタハンドルは動作します。

10

この操作を行います。私はそれが最も簡単な方法になるだろうと思い

for (int i = 0; i < splitter->count(); i++) 
{ 
    QSplitterHandle *hndl = splitter->handle(i); 
    hndl->setEnabled(false); 
} 
関連する問題