crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> менеджер размещения, внедрение менеджера размещения в конструктор
anater
  опции профиля:
сообщение 25.12.2009, 17:26
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 25.12.2009
Пользователь №: 1335

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день.
Проблема в следующем:
При создании менеджера размещения в конструкторе менеджер не отрабатывает.
Выдается в отладке такая штука.
QWidget::setLayout: Attempting to set QLayout "" on qarm "", which already has a layout

Уж что только не делал не работает и все тут. Рекомендации прочитать мануал и погуглить не нужны.

Имеется код
main
#include <qarm.h>
#include <QtGui>
#include <QtGui/QMainWindow>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

qarm q;

return app.exec();
};



хейдер
#ifndef QARM_H
#define QARM_H
#include <QtGui/QMainWindow>

class qarm : public QMainWindow
{
    Q_OBJECT

public:
    qarm(QWidget *parent = 0);
        public slots:
    int read_set();

};

#endif // QARM_H



код класса
#include <iostream>
#include <cstdlib>
#include "qarm.h"
#include <QtGui/QMainWindow>
#include <QPushButton>
#include <QDesktopWidget>
#include <QtGui>
//#include <QHBoxLayout>
#include "sysfunc.h"


qarm::qarm(QWidget *parent)
    : QMainWindow(parent)
{
//Окно перекрывает весь рабочий стол
this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | Qt::ToolTip);

//Разрешение экрана
QDesktopWidget *d =QApplication::desktop();
int x=d->width();
int y=d->height();
std::cout << x<< " " << y << std::endl;

//Окно во весь экран
//this->setGeometry(0,0,x,y);
this->setGeometry(0,0,640,480);

//Кнопка выход временная
QPushButton *qb = new QPushButton("EXIT",this);
//qb->setGeometry(10,10,100,30);
connect(qb,SIGNAL(clicked()),this,SLOT(close()));


//Кнопка сетевого запроса настроек
QPushButton *qb2 = new QPushButton("SETTING",this);
//qb2->setGeometry(500,10,100,30);
connect(qb2,SIGNAL(clicked()),this,SLOT(read_set()));


     QPushButton *button1 = new QPushButton("One");
     QPushButton *button2 = new QPushButton("Two");
     QPushButton *button3 = new QPushButton("Three");
     QPushButton *button4 = new QPushButton("Four");
     QPushButton *button5 = new QPushButton("Five");

     QHBoxLayout *layout = new QHBoxLayout;
     layout->addWidget(button1);
     layout->addWidget(button2);
     layout->addWidget(button3);
     layout->addWidget(button4);
     layout->addWidget(button5);
this->setLayout(layout);
this->show();
};

int qarm::read_set()
{

int result2;
result2 =lcon();

QString str2=QString("%1").arg(result2);
     //str2.setNum(st.param1);
     //ui->textEdit->append(str2);

std::cout << "result2 " << result2 << std::endl;
return 0;
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 25.12.2009, 17:36
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Потому что у QMainWindow есть свой Layout, который ему нужен и переустанавливать его своим не стоит.
Сделай свой виджет, в котором будет все твои виджеты, настрой в нем свой layout и установи этот виджет методом void QMainWindow::setCentralWidget ( QWidget * widget ).

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
anater
  опции профиля:
сообщение 25.12.2009, 17:41
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 25.12.2009
Пользователь №: 1335

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(BRE @ 25.12.2009, 17:36) *
Потому что у QMainWindow есть свой Layout, который ему нужен и переустанавливать его своим не стоит.
Сделай свой виджет, в котором будет все твои виджеты, настрой в нем свой layout и установи этот виджет методом void QMainWindow::setCentralWidget ( QWidget * widget ).


Спасибо! А как на примере выше изложенного кода это будет выглядеть?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2009, 17:54
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


anater, при работе с QMainWindow, ты всегда создаёшь виджет, который затем помещаешь в главное окно.

Т.е. тебе лучше создать отдельный класс со своими виджетами, например, MainWidget, а затем в конструкторе главного окна:
w = new MainWidget(this);
this->setCentralWidget(w);
где w - указатель на MainWidget, член-класса главного окна

Либо, вместо строчки (непосредственно про твой код):
this->setLayout(layout);
написать:
w = new QWidget(this); // указатель объявить в описании класса
w->setLayout(layout);
this->setCentralWidget(w);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
anater
  опции профиля:
сообщение 28.12.2009, 11:51
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 25.12.2009
Пользователь №: 1335

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем спасибо!
По итогу сделал как:
     QHBoxLayout *layout = new QHBoxLayout;
     layout->addWidget(button1);
     layout->addWidget(button2);
     layout->addWidget(button3);
     layout->addWidget(button4);
     layout->addWidget(button5);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
this->setCentralWidget(centralWidget);
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.9.2019, 7:31