Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: M9yT от Ноябрь 08, 2010, 20:49



Название: Окно на базе QMainWindow и центральный виджет
Отправлено: M9yT от Ноябрь 08, 2010, 20:49
Всем привет. У меня новая проблема :(
Создаю окно на базе QMainWindow и кидаю на него, к примеру, кнопку.
Далее, создаю класс Widget на базе QWidget и делаю следующее:
Цитировать
После создания нового класса его необходимо установить центральным виджетом. Для этого в конструкторе класса главного окна, после вызова ui.setupUi(this); необходимо добавить следующий код:
Код:
MyCentralWidget *centralWidget = new MyCentralWidget(this);
this->setCentralWidget(centralWidget);
где MyCentralWidget это созданный выше класс.
Для того, чтобы сигналы передавались центральному виджету в конструкторе класса MyCentralWidget необходимо захватить фокус вызовом метода
this->setFocus();
Всё делаю, но на форме кнопку не вижу!
Как сделать, чтобы она появилась?


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: Ganjabla от Ноябрь 08, 2010, 22:41
Безумный совет #1!:
Код:
QPushButton *button = new QPushButton("Quit");
...
button->show();
Если всё ОК, подари мне смайлик  :D


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: M9yT от Ноябрь 09, 2010, 05:29
Безумный совет #1!:
Код:
QPushButton *button = new QPushButton("Quit");
...
button->show();
Если всё ОК, подари мне смайлик  :D
Так-то я писал, что на форму кидаю кнопку!


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: Пантер от Ноябрь 09, 2010, 10:15
Приведи полностью код.


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: M9yT от Ноябрь 09, 2010, 11:49
Приведи полностью код.
Код:
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
Код:
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "widget.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Widget *widget = new Widget(this);
    this->setCentralWidget(widget);
}

MainWindow::~MainWindow()
{
    delete ui;
}
Код:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);

signals:

public slots:

};

#endif // WIDGET_H
Код:
//widget.cpp
#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    this->setFocus();
}
Код:
//main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "widget.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows1251"));
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

На форме у меня находятся различные объекты.


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: Пантер от Ноябрь 09, 2010, 12:00
Widget *widget = new Widget(this);
this->setCentralWidget(widget);
Это убери, дизайнер сам устанавливает центральный виджет.


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: M9yT от Ноябрь 09, 2010, 12:10
Widget *widget = new Widget(this);
this->setCentralWidget(widget);
Это убери, дизайнер сам устанавливает центральный виджет.
У меня вот какое задание:
В той же рабочей области создать проект lab6_4, в которой реализовать функциональность проекта lab6_3, но  создается главное окно на базе класса QMainWindow. В этом окне следует разместить центральный виджет на базе класса QWidget, в котором и будет происходить рисование.


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: Пантер от Ноябрь 09, 2010, 12:46
Тогда то, что ты накидал на MainWindow перенеси на отдельный виджет (т.е. в дизайнере создай виджет и там все размести) и подсовывай в MainWindow нужный виджет.


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: M9yT от Ноябрь 09, 2010, 12:50
Тогда то, что ты накидал на MainWindow перенеси на отдельный виджет (т.е. в дизайнере создай виджет и там все размести) и подсовывай в MainWindow нужный виджет.
Но я его создал с помощью класса! Т.е. сейчас на форму кидать бесполезно? Только самому кодировать?


Название: Re: Окно на базе QMainWindow и центральный виджет
Отправлено: Пантер от Ноябрь 09, 2010, 13:13
Походу да.