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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Расположение виджетов на QStacketWidget  (Прочитано 8053 раз)
DenisMoskvin
Гость
« : Июнь 08, 2017, 13:48 »

Всем привет! Подскажите пожалуйста как располагать элементы на QStackedWidget. Мне необходимо расположить группу виджетов на каждой страничке QStackedWidget и делаю это я подобным образом:

Код
C++ (Qt)
#include "mainwindow.h"
 
#include "ui_mainwindow.h"
 
#include <QBoxLayout>
 
#include <QLineEdit>
 
#include <QString>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   QVBoxLayout *lay1 = new QVBoxLayout ();
   lay1->addWidget(new QLineEdit (QString ("LineEdit11")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit12")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit13")));
 
   QVBoxLayout *lay2 = new QVBoxLayout ();
   lay1->addWidget(new QLineEdit (QString ("LineEdit21")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit22")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit23")));
 
 
   page=lay1->widget()); // 1ая страница QStackedWidget
   page_2=lay2->widget()); // 2ая страница QStackedWidget
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 

Но программа завершается ошибкой из-за того что lay1->widget() возвращает NULL. Почему ? Он разве не наследник от QWidget ? Или как осуществить мою задумку ?
« Последнее редактирование: Июнь 08, 2017, 14:50 от gil9red » Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #1 : Июнь 08, 2017, 13:58 »

Не замечен код привязки компановщика к виджету.
Код:
setLayout(lay1);

У Вас сейчас просто есть компоновщики с виджетами, которые не принадлежат ничему.
Записан
DenisMoskvin
Гость
« Ответ #2 : Июнь 08, 2017, 14:29 »

Торопился, немного ошибся в примере,но сейчас  немного разобрался. Сделал примерно вот так:

Код
C++ (Qt)
#include "mainwindow.h"
 
#include "ui_mainwindow.h"
 
#include <QBoxLayout>
 
#include <QLineEdit>
 
#include <QString>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   QVBoxLayout *lay1 = new QVBoxLayout (ui->page);
   lay1->addWidget(new QLineEdit (QString ("LineEdit11")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit12")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit13")));
 
   QVBoxLayout *lay2 = new QVBoxLayout (ui->page);
   lay2->addWidget( new QLineEdit (QString ("LineEdit21")));
   lay2->addWidget(new QLineEdit (QString ("LineEdit22")));
   lay2->addWidget( new QLineEdit (QString ("LineEdit23")));
 
}
 
MainWindow::~MainWindow()
{
   delete ui;
}

Желаемого эффекта добился, но при отладке появилось сообщение :

Отладка запущена
QLayout: Attempting to add QLayout "" to QWidget "page", which already has a layout
Отладка завершена


Т.е я пытаюсь добавить  QVBoxLayout на ui-> page который уже имеет QLayout, но меняя код таким образом (не создавая для каждой страницы Layout), на странице я вижу последний добавленный элемент. Код такой :

Код
C++ (Qt)
#include "mainwindow.h"
 
#include "ui_mainwindow.h"
 
#include <QBoxLayout>
 
#include <QLineEdit>
 
#include <QString>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
 
 
  QLineEdit *le1=new QLineEdit (QString ("LineEdit11"),ui->page);
  QLineEdit *le2=new QLineEdit (QString ("LineEdit12"),ui->page);
  QLineEdit *le3=new QLineEdit (QString ("LineEdit13"),ui->page);
 
 
   QLineEdit *le4 = new QLineEdit (QString ("LineEdit21"),ui->page_2);
   QLineEdit *le5 = new QLineEdit (QString ("LineEdit22"),ui->page_2);
   QLineEdit *le6 = new QLineEdit (QString ("LineEdit23"),ui->page_2);
 
 
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
« Последнее редактирование: Июнь 08, 2017, 14:51 от gil9red » Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #3 : Июнь 08, 2017, 14:43 »

В первом варианте, Вы оба компоновщика создаете для ui->page, отсюда и ошибка.
Во-втором варианте, Вы свои виджеты создаете на разных страницах (?) , но они просто попадают в одну точку - поэтому видно только последний.

Записан
DenisMoskvin
Гость
« Ответ #4 : Июнь 08, 2017, 14:50 »

а, да спасибо! банальная невнимательность. Вот итоговый пример:

Код
C++ (Qt)
#include "mainwindow.h"
 
#include "ui_mainwindow.h"
 
#include <QBoxLayout>
 
#include <QLineEdit>
 
#include <QString>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   QVBoxLayout *lay1 = new QVBoxLayout (ui->page);
   lay1->addWidget(new QLineEdit (QString ("LineEdit11")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit12")));
   lay1->addWidget(new QLineEdit (QString ("LineEdit13")));
 
   QVBoxLayout *lay2 = new QVBoxLayout ([b]ui->page_2[/b]);
   lay2->addWidget( new QLineEdit (QString ("LineEdit21")));
   lay2->addWidget(new QLineEdit (QString ("LineEdit22")));
   lay2->addWidget( new QLineEdit (QString ("LineEdit23")));
 
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
« Последнее редактирование: Июнь 08, 2017, 14:51 от gil9red » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июнь 08, 2017, 14:53 »

DenisMoskvin, оборачивайте код в тег code
В сообщении это комбобокс с текстом С++ (Qt)
Записан

DenisMoskvin
Гость
« Ответ #6 : Июнь 08, 2017, 15:49 »

Ок, хорошо. Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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