Название: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: 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(); }
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: gil9red от Август 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); }
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: helga1917 от Август 07, 2013, 14:13
Спасибо!
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: helga1917 от Август 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(); }
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: gil9red от Август 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); // устанавливаем наш компоновщик }
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: helga1917 от Август 07, 2013, 15:38
спасибо
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: gil9red от Август 07, 2013, 15:52
Да пожалуйста :)
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: Alex Custov от Август 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); }
Вы можете построчно объяснить что тут и зачем написано?
Название: Re: НЕВИДНО ТЕКСТОВУЮ МЕТКУ
Отправлено: helga1917 от Август 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);
|