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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: НЕВИДНО ТЕКСТОВУЮ МЕТКУ  (Прочитано 3935 раз)
helga1917
Гость
« : Август 07, 2013, 13:27 »

Компилируется, но не отображается текстовая метка, ПОЧЕМУ?

mainwindow.h:
Код:
 
#ifndef TOOL
#define TOOL

#include <QMainWindow>
#include <QHBoxLayout>
#include <QLabel>
#include <QtGui>

class MainWindow : public QMainWindow
{
Q_OBJECT
public :
      MainWindow (QWidget *parent=0);
};
#endif

mainwindow.cpp:
Код:
#include "mainwindow.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QtGui>

MainWindow::MainWindow (QWidget *parent)
               : QMainWindow (parent)
{
QHBoxLayout *layout = new QHBoxLayout;
QLabel *label = new QLabel;
label->setText("text");
layout->addWidget(label);
setLayout(layout);
}


main.cpp:
Код:
#include "mainwindow.h"
#include <QApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QtGui>

int main (int argc, char argv[])
{
QApplication a (argc, argv);
MainWindow w;
w.show;

return a.exec();
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Август 07, 2013, 14:04 »

Потому что QMainWidget немного отличается от простого виджета.
Для размещения на нем виджета, нужно указать setCentralWidget()

Изменив ваш код на:
Код:
MainWindow::MainWindow (QWidget *parent)
               : QMainWindow (parent)
{
QHBoxLayout *layout = new QHBoxLayout;
QLabel *label = new QLabel;
label->setText("text");
layout->addWidget(label);

QWidget *cWidget = new QWidget();
cWidget->setLayout(layout);

setCentralWidget(cWidget);
}

Или так:
Код:
MainWindow::MainWindow (QWidget *parent)
               : QMainWindow (parent)
{
QLabel *label = new QLabel;
label->setText("text");

setCentralWidget(label);
}
Записан

helga1917
Гость
« Ответ #2 : Август 07, 2013, 14:13 »

Спасибо!
Записан
helga1917
Гость
« Ответ #3 : Август 07, 2013, 15:08 »

Так как вы написали, все работает, а вот если  для QLabel сделать отдельный класс, то опять не видно метку:

mainwindow.h:
Код:
#ifndef TOOL
#define TOOL

#include <QMainWindow>
#include <QHBoxLayout>
#include <QLabel>


class CMW : public QMainWindow
{
Q_OBJECT
public :
      CMW (QWidget *parent=0);
};
#endif

klass.h:
Код:
#ifndef WIDGET
#define WIDGET

#include <QMainWindow>
#include <QLabel>

class Widget : public QLabel
{
  Q_Object
public: Widget (QWidget *parent=0);
};
#endif

mainwindow.cpp:
Код:
#include "mainwindow.h"
#include "klass.h"
#include <QHBoxLayout>
#include <QLabel>


CMW::CMW (QWidget *parent)
               : QMainWindow (parent)
{
Widget *label0 = new Widget;
setCentralWidget(label0);
}

klass.cpp:
Код:
#include "klass.h"
#include <QLabel>
#include <QtGuil>
Widget::Widget (QWidget *parent)
               : QLabel (parent)
{
QLabel *label = new QLabel;
label->setText("text");
QHBoxLayout *lay = new QHBoxLayout;
lay->addWidget(label);
QWidget *wid = new QWidget;
wid->setLayout(lay);
}


main.cpp:
Код:
#include "mainwindow.h"
#include <QApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QtGui>

int main (int argc, char argv[])
{
QApplication a (argc, argv);
CMW w;
w.show;

return a.exec();
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Август 07, 2013, 15:25 »

Мне немного не понятно, для чего вы создаете наследника от QLabel и на этом наследнике хотите еще метку поставить Улыбающийся

QLabel обычный виджет (в отличии от QMainWidget), и чтобы на него поместить другой виджет или виджеты, можно воспользоваться компоновщиками (layouts):
Код:
Widget::Widget (QWidget *parent)
               : QLabel (parent)
{
QLabel *label = new QLabel();
label->setText("text");

QHBoxLayout *lay = new QHBoxLayout();
lay->addWidget(label);

setLayout(lay); // устанавливаем наш компоновщик
}


Ну или максимально близкий к вашему коду вариант:
Код:
Widget::Widget (QWidget *parent)
               : QLabel (parent)
{
QLabel *label = new QLabel();
label->setText("text");

QHBoxLayout *lay = new QHBoxLayout();
lay->addWidget(label);

QWidget *wid = new QWidget();
wid->setLayout(lay);

QHBoxLayout *hBoxLayoutMain = new QHBoxLayout();
hBoxLayoutMain->addWidget(wid);

setLayout(hBoxLayoutMain); // устанавливаем наш компоновщик
}
Записан

helga1917
Гость
« Ответ #5 : Август 07, 2013, 15:38 »

спасибо
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Август 07, 2013, 15:52 »

Да пожалуйста Улыбающийся
Записан

Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Август 07, 2013, 16:10 »

Код:
Widget::Widget (QWidget *parent)
               : QLabel (parent)
{
QLabel *label = new QLabel;
label->setText("text");
QHBoxLayout *lay = new QHBoxLayout;
lay->addWidget(label);
QWidget *wid = new QWidget;
wid->setLayout(lay);
}

Вы можете построчно объяснить что тут и зачем написано?
Записан
helga1917
Гость
« Ответ #8 : Август 08, 2013, 09:04 »

Ну я пробовала создать отдельный класс для простого объекта QLabel, и подсоединить его, чтобы посмотреть что и как работает.

Код:
Widget::Widget (QWidget *parent)         //создаю класс Widget, который наследуется от QLabel
               : QLabel (parent)
{
QLabel *label = new QLabel;                 //объект label
label->setText("text");                        //добавляем ему текст
QHBoxLayout *lay = new QHBoxLayout; //горизонтальный компоновщик lay
lay->addWidget(label);                       //добавляем на горизонтальный компоновщик label
QWidget *wid = new QWidget;             //объект QWidget wid 
wid->setLayout(lay);                          //на этот объект добавляем компоновщик lay
}

была задумка вызвать объект Widget и назначить его виджетом главного окна

Код:
Widget *label0 = new Widget;
setCentralWidget(label0);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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