Russian Qt Forum
Сентябрь 30, 2024, 02:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] виджет внутри QSplitter  (Прочитано 5898 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« : Март 08, 2013, 15:55 »

Здравствуйте. Есть 2 виджета, разделенные сплиттером. Поступило предложение добавить 2 кнопки внутрь сплиттера (см. скрин). Возможно ли это реализовать?
« Последнее редактирование: Март 09, 2013, 16:14 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 08, 2013, 16:48 »

Сплитер обычный виджет, на который можно добавить другие виджеты.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Март 08, 2013, 16:57 »

не вижу кода работающего примера. вот такая банальщина работает так, как предполагает сплиттер, а не так, как обычный виджет:
Код
C++ (Qt)
QSplitter s;
QPushButton *b1 = new QPushButton("b1", &s), *b2 = new QPushButton("b2", &s);
s.show();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #3 : Март 08, 2013, 17:05 »

Придётся скорее всего перехватывать у сплиттера евенты. У него ж активная область только его handle.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Март 08, 2013, 17:06 »

не вижу кода работающего примера.
А он должен быть?
Посмотри исходники QSplitter, на нем есть виджеты, тот же QSplitterHandle. По аналогии можно добавить свои.
А можно рисовать кнопки самому.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #5 : Март 08, 2013, 20:10 »

спасибо, теперь всё понял. надо было просто почитать документацию по QSplitterHandle, а я искал в QSplitter.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #6 : Март 09, 2013, 16:14 »

пример использования:
Код
C++ (Qt)
#include <QtGui>
#include <QtCore>
 
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
#include <QtWidgets/QtWidgets>
#endif
 
class SplitterHandle : public QSplitterHandle
{
public:
   SplitterHandle(Qt::Orientation orientation, QSplitter *parent) : QSplitterHandle(orientation, parent)
   {
       QPushButton *right = new QPushButton(QChar(0x2192), this);
       right->setCursor(Qt::ArrowCursor);
 
       QPushButton *left = new QPushButton(QChar(0x2190), this);
       left->setCursor(Qt::ArrowCursor);
 
       w = new QWidget(this);
       QVBoxLayout *layout = new QVBoxLayout(w);
       layout->addStretch();
       layout->addWidget(right);
       layout->addWidget(left);
       layout->addStretch();
   }
 
   QSize sizeHint() const { return QSize(w->width(), QSplitterHandle::sizeHint().height()); }
 
protected:
   void showEvent(QShowEvent *e) { w->resize(size()); }
 
private:
   QWidget *w;
};
 
class Splitter : public QSplitter
{
public:
   Splitter(Qt::Orientation orientation, QWidget *parent = 0) : QSplitter(orientation, parent) {}
 
protected:
   QSplitterHandle *createHandle() { return new SplitterHandle(orientation(), this); }
};
 
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
 
   Splitter splitter(Qt::Horizontal);
   QTextEdit *t1 = new QTextEdit(&splitter), *t2 = new QTextEdit(&splitter);
   splitter.show();
 
   return app.exec();
}
« Последнее редактирование: Март 09, 2013, 16:17 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.277 секунд. Запросов: 23.