我希望能夠阻止用戶在運行時移動QSplitter。調用setEnabled(false)
這樣做,但它也禁用所有子窗口小部件 - 這不是我想要的。有沒有辦法做到這一點?我必須禁用拆分器,然後手動重新啓用所有子部件嗎?這看起來相當麻煩,對於某些必須是合理常見的做法。Qt分離器禁用
任何人都可以提出任何建議嗎?
我希望能夠阻止用戶在運行時移動QSplitter。調用setEnabled(false)
這樣做,但它也禁用所有子窗口小部件 - 這不是我想要的。有沒有辦法做到這一點?我必須禁用拆分器,然後手動重新啓用所有子部件嗎?這看起來相當麻煩,對於某些必須是合理常見的做法。Qt分離器禁用
任何人都可以提出任何建議嗎?
實際上,我從來沒有見過任何人禁用分離器:他們在那裏,所以用戶可以根據需要佈置UI,那麼爲什麼有人想禁用它?無論您需要分配器還是您可以使用其中一種普通佈局(用戶無法調整大小)。
如果你仍然想嘗試,我想你應該看看closestLegalPosition()或getRange()。如果你只是返回小部件的寬度,那麼調整大小應該停止工作。
你必須做兩件事。將分離器內部的小部件(不應調整大小)設置爲FixedSize
,並將對應分離器手柄的光標更改爲Qt::ArrowCursor
。手柄開始零(左和未使用),所以兩個小部件之間的第一把手是指數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
,第二個作品。
這樣做:
for (int i = 0; i < splitter->count(); i++)
{
QSplitterHandle *hndl = splitter->handle(i);
hndl->setEnabled(false);
}
我想這將是最簡單的方法 - 使用情況是這樣的:我有一個用戶界面,它可以投入一定的模式,其中分離器的孩子之一小部件消失。在這種情況下,我不希望用戶能夠移動分離器,因爲一側只有一個小部件 - 這是否合理? – Thomi 2009-10-20 14:55:03
奇數。我猜想,當它只有一個孩子時,分離器不會提供一個拖動元素。你能檢查確實只有一個孩子嗎? – 2009-10-20 14:59:53
那麼,你實際上不能從分離器中移除一個小部件--QSplitter公共API不提供這樣做的方法。你能做到的最好的就是隱藏孩子。有任何想法嗎? – Thomi 2009-10-21 07:54:16