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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окно на базе QMainWindow и центральный виджет  (Прочитано 7754 раз)
M9yT
Гость
« : Ноябрь 08, 2010, 20:49 »

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

Безумный совет #1!:
Код:
QPushButton *button = new QPushButton("Quit");
...
button->show();
Если всё ОК, подари мне смайлик  Веселый
Записан
M9yT
Гость
« Ответ #2 : Ноябрь 09, 2010, 05:29 »

Безумный совет #1!:
Код:
QPushButton *button = new QPushButton("Quit");
...
button->show();
Если всё ОК, подари мне смайлик  Веселый
Так-то я писал, что на форму кидаю кнопку!
« Последнее редактирование: Ноябрь 09, 2010, 05:38 от M9yT » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Ноябрь 09, 2010, 10:15 »

Приведи полностью код.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
M9yT
Гость
« Ответ #4 : Ноябрь 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();
}

На форме у меня находятся различные объекты.
« Последнее редактирование: Ноябрь 09, 2010, 12:41 от M9yT » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Ноябрь 09, 2010, 12:00 »

Widget *widget = new Widget(this);
this->setCentralWidget(widget);
Это убери, дизайнер сам устанавливает центральный виджет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
M9yT
Гость
« Ответ #6 : Ноябрь 09, 2010, 12:10 »

Widget *widget = new Widget(this);
this->setCentralWidget(widget);
Это убери, дизайнер сам устанавливает центральный виджет.
У меня вот какое задание:
В той же рабочей области создать проект lab6_4, в которой реализовать функциональность проекта lab6_3, но  создается главное окно на базе класса QMainWindow. В этом окне следует разместить центральный виджет на базе класса QWidget, в котором и будет происходить рисование.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Ноябрь 09, 2010, 12:46 »

Тогда то, что ты накидал на MainWindow перенеси на отдельный виджет (т.е. в дизайнере создай виджет и там все размести) и подсовывай в MainWindow нужный виджет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
M9yT
Гость
« Ответ #8 : Ноябрь 09, 2010, 12:50 »

Тогда то, что ты накидал на MainWindow перенеси на отдельный виджет (т.е. в дизайнере создай виджет и там все размести) и подсовывай в MainWindow нужный виджет.
Но я его создал с помощью класса! Т.е. сейчас на форму кидать бесполезно? Только самому кодировать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Ноябрь 09, 2010, 13:13 »

Походу да.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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