Виджет разделителя QT? - PullRequest
3 голосов
/ 08 октября 2010

Приветствую всех,

Есть ли виджет для разделения двух QWidget, а также для полного фокуса на один виджет?Как показано на следующем рисунке?alt text

Заранее спасибо, Уманга

1 Ответ

6 голосов
/ 08 октября 2010

Как насчет QSplitter ?

QWidget 1 , например, QListView. QWidget 2 представляет собой комбинацию QWidget s (левая часть проста QPushButton с надписью «показать / скрыть», а правая часть - другой виджет) ... Все, что вам нужно сделать, это скрытьваш QWidget2, когда пользователь нажал на QPushButton ...

Если вам нужен пример, я могу опубликовать его.


Обновлено

main.cpp

#include "splitter.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    splitter w;
    w.show();
    return a.exec();
}

splitter.h

#ifndef SPLITTER_H
#define SPLITTER_H

#include <QtGui/QDialog>

class splitter : public QDialog
{
    Q_OBJECT;

    QWidget*        widget1;
    QWidget*        widget2;

    QPushButton*    button;

public:
    splitter(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~splitter();

private slots:
    void    showHide(void);
};

#endif // SPLITTER_H

splitter.cpp

#include <QtGui>

#include "splitter.h"

splitter::splitter(QWidget *parent, Qt::WFlags flags)
    : QDialog(parent, flags)
{
    QApplication::setStyle("plastique");

    QListView*      listView = new QListView;
    QTableView*     tableView = new QTableView;
    button = new QPushButton("Hide >");

    widget1 = new QWidget;
    QHBoxLayout*    w1Layout = new QHBoxLayout;
    w1Layout->addWidget(listView);
    w1Layout->addWidget(button);
    widget1->setLayout(w1Layout);

    widget2 = new QWidget;
    QHBoxLayout*    w2Layout = new QHBoxLayout; 
    w2Layout->addWidget(tableView);
    widget2->setLayout(w2Layout);

    QSplitter *mainSplitter = new QSplitter(this);
    mainSplitter->addWidget(widget1);
    mainSplitter->addWidget(widget2);

    connect(button, SIGNAL(clicked()), this, SLOT(showHide()));

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(mainSplitter);

    setLayout(mainLayout);
}
splitter::~splitter()
{}
void splitter::showHide(void)
{
    if (widget2->isVisible())
    {   // hide     
        widget2->setVisible(false);
        button->setText("< Show");
    }
    else
    {   // show     
        widget2->setVisible(true);
        button->setText("Hide >");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...