Bunu yukarıdaki koda göre yapıyorum ancak her iki splitter yönlendirmesini de ele alıyor. Sadece opak olmayan yeniden boyutlandırmayı ve katlanamayan çocukları tercih ettim. Sap, üç paralel çizgiden oluşur. Kulp genişliği ile oynayabilirsiniz, ancak 7'de tutuş Windows'da iyi görünüyor; Linux veya Mac’te kontrol etme.
void helper::decorateSplitter(QSplitter* splitter, int index)
{
Q_ASSERT(splitter != NULL);
const int gripLength = 15;
const int gripWidth = 1;
const int grips = 3;
splitter->setOpaqueResize(false);
splitter->setChildrenCollapsible(false);
splitter->setHandleWidth(7);
QSplitterHandle* handle = splitter->handle(index);
Qt::Orientation orientation = splitter->orientation();
QHBoxLayout* layout = new QHBoxLayout(handle);
layout->setSpacing(0);
layout->setMargin(0);
if (orientation == Qt::Horizontal)
{
for (int i=0;i<grips;++i)
{
QFrame* line = new QFrame(handle);
line->setMinimumSize(gripWidth, gripLength);
line->setMaximumSize(gripWidth, gripLength);
line->setFrameShape(QFrame::StyledPanel);
layout->addWidget(line);
}
}
else
{
//this will center the vertical grip
//add a horizontal spacer
layout->addStretch();
//create the vertical grip
QVBoxLayout* vbox = new QVBoxLayout;
for (int i=0;i<grips;++i)
{
QFrame* line = new QFrame(handle);
line->setMinimumSize(gripLength, gripWidth);
line->setMaximumSize(gripLength, gripWidth);
line->setFrameShape(QFrame::StyledPanel);
vbox->addWidget(line);
}
layout->addLayout(vbox);
//add another horizontal spacer
layout->addStretch();
}
}
ile geri dönmek için QSplitter :: createHandle() öğesini geçersiz kılabilirsiniz. Çok teşekkür ederim :)! – Narek
Bu harika. Ben sadece bir QHBoxLayout'u tercih ettiğimi eklerim, çünkü o zaman yatay çizgiye bir "maximumWidth" (yatay ayırıcılar için) atayabilirim. – Phlucious
İşe yaradığı için muhakkak cevaplandı, ama gerçekten Qt hatası için sakıncalı bir çözüm gibi geliyor ... –