Название: Расположение виджетов на QStacketWidget
Отправлено: 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 ? Или как осуществить мою задумку ?
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: Apktyc от Июнь 08, 2017, 13:58
Не замечен код привязки компановщика к виджету. У Вас сейчас просто есть компоновщики с виджетами, которые не принадлежат ничему.
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: DenisMoskvin от Июнь 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; }
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: Apktyc от Июнь 08, 2017, 14:43
В первом варианте, Вы оба компоновщика создаете для ui->page, отсюда и ошибка. Во-втором варианте, Вы свои виджеты создаете на разных страницах (?) , но они просто попадают в одну точку - поэтому видно только последний.
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: DenisMoskvin от Июнь 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; }
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: gil9red от Июнь 08, 2017, 14:53
DenisMoskvin, оборачивайте код в тег code В сообщении это комбобокс с текстом С++ (Qt)
Название: Re: Расположение виджетов на QStacketWidget
Отправлено: DenisMoskvin от Июнь 08, 2017, 15:49
Ок, хорошо. Спасибо
|