динамическое добавление виджета в qt - PullRequest
4 голосов
/ 14 ноября 2010

У меня небольшая проблема с добавлением виджета в QMainWindow. Когда я делаю это так:

wsk_mainStatki = new mainStatki(this);
wsk_mainStatki ->setGeometry(0,0,400,300);
this->layout()->addWidget(wsk_mainStatki);

все в порядке, но я получаю предупреждение:

QMainWindowLayout :: addItem: используйте взамен общедоступный API QMainWindow

это мой игровой класс

    #include "game.h"

    game::game()
    {
        setGeometry(200, 200, 400, 300);
        setWindowTitle("Statki");
        wsk_mainStatki = new mainStatki(this);
        wsk_mainStatki ->setGeometry(0,0,400,300);
        this->layout()->addWidget(wsk_mainStatki);
    }

заголовок игры

#ifndef WIDGET1_H
#define WIDGET1_H
#include "k_plansza.h"
#include "mainStatki.h"
#include "settings.h"
#include <QApplication>
#include <QMainWindow>

class game : public QMainWindow
{
    public:
        game();
        ~game() {};
    private:
        mainStatki *wsk_mainStatki;
        settings *wsk_settings;
};

#endif // WIDGET1_H

класс мэйнстатки

#include "mainstatki.h"

mainStatki::mainStatki(QWidget *parent){
    setupUi(this);
    connect(closeButton, SIGNAL(clicked()), parent, SLOT(close()));
}

заголовок mainstatki

#ifndef MAINSTATKI_H
#define MAINSTATKI_H

#include <QWidget>
#include "ui_mainStatki.h"

class mainStatki : public QWidget, public Ui::mainStatki
{
    Q_OBJECT
public:
    mainStatki(QWidget *parent);

};

#endif // MAINSTATKI_H

Как это должно выглядеть?

1 Ответ

11 голосов
/ 14 ноября 2010

Я полагаю, это означает, что вы не должны вручную вставлять вещи в макет QMainWindow, но вместо этого используйте такие методы, как addToolBar, setStatusBar или setCentralWidget. Разметка ваших собственных виджетов будет происходить в centralWidget.

Кстати, в вашем конструкторе mainStatki отсутствует вызов конструктора QWidget. Если у вас нет веской причины не делать этого, ваш конструктор должен выглядеть так:

mainStatki::mainStatki(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(closeButton, SIGNAL(clicked()), parent, SLOT(close()));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...