how to setAlignment of QGroupBox
-
@cerr The default alignment is already
Qt::AlignLeft
.
http://doc.qt.io/qt-5/qgroupbox.html#alignment-prop -
@Ratzz said in how to setAlignment of QGroupBox:
@cerr
can you show me what u get using image ? -
@p3c0 said in how to setAlignment of QGroupBox:
@cerr Looks like you have added the groupbox in a layout?
Can you post the relevant code ?Correct,
Okay, so let's see:
My groupBox is here, in addTerminal() which gets called with a QSplitter as parent... - not sure if that's enough...Terminal* Session::addTerminal(QWidget* parent) { Terminal* terminal = new Terminal(parent); connect(terminal, SIGNAL(activated(int)), this, SLOT(setActiveTerminal(int))); connect(terminal, SIGNAL(manuallyActivated(Terminal*)), this, SIGNAL(terminalManuallyActivated(Terminal*))); connect(terminal, SIGNAL(titleChanged(int,QString)), this, SLOT(setTitle(int,QString))); connect(terminal, SIGNAL(keyboardInputBlocked(Terminal*)), this, SIGNAL(keyboardInputBlocked(Terminal*))); connect(terminal, SIGNAL(silenceDetected(Terminal*)), this, SIGNAL(silenceDetected(Terminal*))); connect(terminal, SIGNAL(destroyed(int)), this, SLOT(cleanup(int))); m_terminals.insert(terminal->id(), terminal); QGroupBox *groupBox = new QGroupBox(tr("Test"), parent); groupBox->setAlignment(Qt::AlignLeft); QWidget* terminalWidget = terminal->terminalWidget(); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); groupBox->setLayout(vbox); terminalWidget ->show(); if (/*terminalWidget*/groupBox) /*terminalWidget*/groupBox->setFocus(); groupBox->show(); return terminal; }
and then, the constructor for Terminal() looks like this:
Terminal::Terminal(QWidget* parent) : QObject(parent) { m_terminalId = m_availableTerminalId; m_availableTerminalId++; m_keyboardInputEnabled = true; m_monitorActivityEnabled = false; m_monitorSilenceEnabled = false; m_part = NULL; m_terminalInterface = NULL; m_partWidget = NULL; m_terminalWidget = NULL; m_parentSplitter = parent; KPluginFactory* factory = 0; KService::Ptr service = KService::serviceByDesktopName("konsolepart"); if( service ) { factory = KPluginLoader(service->library()).factory(); m_part = factory ? (factory->create<KParts::Part>(parent)) : 0; if (m_part) { connect(m_part, SIGNAL(setWindowCaption(QString)), this, SLOT(setTitle(QString))); connect(m_part, SIGNAL(overrideShortcut(QKeyEvent*,bool&)), this, SLOT(overrideShortcut(QKeyEvent*,bool&))); connect(m_part, SIGNAL(destroyed()), this, SLOT(deleteLater())); m_partWidget = m_part->widget(); m_terminalWidget = m_part->widget()->focusWidget(); if (m_terminalWidget) { m_terminalWidget->setFocusPolicy(Qt::WheelFocus); m_terminalWidget->installEventFilter(this); } disableOffendingPartActions(); m_terminalInterface = qobject_cast<TerminalInterface*>(m_part); if (m_terminalInterface) m_terminalInterface->showShellInDir(QDir::homePath()); } else displayKPartLoadError(); } }
-
@p3c0 said in how to setAlignment of QGroupBox:
@cerr This part looks odd:
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); groupBox->setLayout(vbox);
You should set layout (vbox) to your main widget and in this layout add widgets
groupBox
andterminalWidget
.Hmm, I don't get this, so are you saying this should look something like:
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); vbox->addWidget(groupBox); parent->setTerminalLayout(vbox); // vbox->setLayout() would be called within this method terminalWidget ->show(); if (groupBox) groupBox->setFocus();
but I don't see what a differnce it'll make to call setLayout from within another wrapper , I must not understand you properly - can you clarify, please?
Thanks!
-
@cerr What I imagined was that you are trying to create a main widget and in that you want to add a groupbox and terminalwidget so I suggested to add this layout(vbox) to the main widget and in that you add these 2 widgets so that they are arranged vertically. Is this the requirement ?
-
@p3c0 said in how to setAlignment of QGroupBox:
@cerr What I imagined was that you are trying to create a main widget and in that you want to add a groupbox and terminalwidget so I suggested to add this layout(vbox) to the main widget and in that you add these 2 widgets so that they are arranged vertically. Is this the requirement ?
By main widget you understand a "mother widget" that would contain the groupbox & the terminal widget, right? What I want to do is, to nest the terminalwidget within a groupbox so that there is an ability to assign the terminalwidget some kind of membership (that makes visually sense, too). If you have a better idea on how to solve this, please don't be shy to let me know! Thanks!
-
By main widget you understand a "mother widget" that would contain the groupbox & the terminal widget, right?
Yes.
So now where do you add this groupbox ? You should add this groupbox inside another layout so that it is laid properly.
-
@p3c0 said in how to setAlignment of QGroupBox:
Yes.
So now where do you add this groupbox ? You should add this groupbox inside another layout so that it is laid properly.
So I currently have something lke groupBox(vbox(terminalWidget())) and I think from what you're saying, I should have something like ContainerWidget(vbox(groupBox(terminalWidget))), is that correct? Any idea what kind of container widget I can use for this? Or better, vbox(groupBox(terminalWidget)) should do as well, shouldn't it?
-
@p3c0 said in how to setAlignment of QGroupBox:
ContainerWidget(vbox(groupBox(terminalWidget))), is that correct?
Yes. You can use
QDialog
as the container widget.But I don't want it to be in abother dialog and it already is in a QTabWidget....I should use that as the outer most layer probably...
-
@p3c0 said in how to setAlignment of QGroupBox:
@cerr Ok. But remember to add that groupbox inside a layout.
So what actually happens in my application is:
MainWindow->QTabWidget->session->setupSession->addTerminal->QVBoxWidget(QGroupBox->terminalWidget) and you suggest i'd better be like mainwindow->QVBoxWidget(QTabWidget->session->setupSession->addTerminal->QGroupBox->terminalWidget) ?
Will that change things? -
@cerr No. The earlier one.
MainWindow->QTabWidget->session->setupSession->addTerminal->QVBoxWidget(QGroupBox->terminalWidget)
But I dont see that happening in your original code.
QGroupBox *groupBox = new QGroupBox(tr("Test"), parent); //<--- This should be added in a layout too. groupBox->setAlignment(Qt::AlignLeft); QWidget* terminalWidget = terminal->terminalWidget(); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); groupBox->setLayout(vbox); // <--- This sets layout inside it terminalWidget ->show(); if (/*terminalWidget*/groupBox) /*terminalWidget*/groupBox->setFocus(); groupBox->show();
-
@p3c0 said in how to setAlignment of QGroupBox:
@cerr No. The earlier one.
MainWindow->QTabWidget->session->setupSession->addTerminal->QVBoxWidget(QGroupBox->terminalWidget)
But I dont see that happening in your original code.
QGroupBox *groupBox = new QGroupBox(tr("Test"), parent); //<--- This should be added in a layout too. groupBox->setAlignment(Qt::AlignLeft); QWidget* terminalWidget = terminal->terminalWidget(); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); groupBox->setLayout(vbox); // <--- This sets layout inside it terminalWidget ->show(); if (/*terminalWidget*/groupBox) /*terminalWidget*/groupBox->setFocus(); groupBox->show();
Sorry,
Yeah, I had changed it in the meantime to:
QGroupBox *groupBox = new QGroupBox(tr("Test"), parent); groupBox->setAlignment(Qt::AlignLeft); QWidget* terminalWidget = terminal->terminalWidget(); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); vbox->addWidget(groupBox); //groupBox->setLayout(vbox); <- if i remove the comment, it won't start my application at all... terminalWidget ->show(); if (/*terminalWidget*/groupBox) /*terminalWidget*/groupBox->setFocus();
-
@p3c0 said in how to setAlignment of QGroupBox:
@cerr So now set
vbox
as a layout to its parent widget.Did you mean like?
QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(terminalWidget); vbox->addWidget(groupBox); vbox->addWidget(parent); groupBox->setLayout(vbox); terminalWidget ->show(); ``` - that doesn't let me open my application...
-
@cerr Probably something like this. Assuming
QDialog
is my main widget which contains groupbox.QVBoxLayout *mainLayout = new QVBoxLayout; myDialog->setLayout(mainLayout); //Now add widgets into this layout mainLayout->addWidget(groupBox);// groupbox first mainLayout->addWidget(terminalWidget);
Now in your case if you want to add
terminalWidget
inside a groupbox's layout you can create new one and add into it keeping mainLayout as it is.