Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] не отображается QLabel , после нажатия QPushButton 
V
    Опции темы
anatox91
Дата 24.3.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



захотелось мне вобщем сделать программу где на примере можно было бы посмотреть какой размер займет окно с определенными размерами (то есть прикинуть заранее, вдруг понадобится) и наткнулся на ошибку - после нажатия на кнопку должен создаваться QLabel с введенными размерами и отображаться, но ничего не отображается... код:

main.cpp
Код

#include <QtGui>
#include "size.h"

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    SizeMainWindow *win = new SizeMainWindow;
    win->show();
    return app.exec();
}


size.h
Код

#ifndef SIZE_H_
#define SIZE_H_

#include <QtGui>

class SizeMainWindow : public QWidget {
public:
       SizeMainWindow(QWidget *parent = 0);
public:
       int x, y;
       QLineEdit *lineX;
       QLineEdit *lineY;
       QPushButton *create;
       QLabel *first;
       QLabel *second;
public slots:
       void CreateLabelWithSize();
};
#endif


size.cpp
Код

#include <QtGui>
#include "size.h"

SizeMainWindow::SizeMainWindow(QWidget *parent) : QWidget (parent) {
                                       setWindowTitle("Size Window");
                                       first = new QLabel("Enter a width:");
                                       second = new QLabel("Enter a height:");
                                       lineX = new QLineEdit;
                                       lineY = new QLineEdit;
                                       first->setBuddy(lineX);
                                       second->setBuddy(lineY);
                                       create = new QPushButton("Create");
                                       connect(create, SIGNAL(clicked()), SLOT(CreateLabelWithSize()));
                                       QIntValidator *validX = new QIntValidator(1, 1024, lineX);
                                       QIntValidator *validY = new QIntValidator(1, 768, lineY);
                                       lineX->setValidator(validX);
                                       lineY->setValidator(validY);
                                       QVBoxLayout *layout = new QVBoxLayout;
                                       layout->addWidget(first);
                                       layout->addWidget(lineX);
                                       layout->addWidget(second);
                                       layout->addWidget(lineY);
                                       layout->addWidget(create);
                                       setLayout(layout);
                                       resize(250, 200);
}
void SizeMainWindow::CreateLabelWithSize() {

     x = (lineX->text()).toInt();
     y = (lineY->text()).toInt();
     
     QLabel *window = new QLabel("This is window with size you enter");
     window->resize(x, y);
     window->show();
}


вероятно при передаче размеров окна где-то ошибка, только вот не допру где именно...


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
archimed7592
Дата 24.3.2008, 15:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



anatox91, возьми за правило: если что-то должно работать, но не работает: проверь connect'ы.
Я тебе сразу скажу, что этот connect
Цитата(anatox91 @  24.3.2008,  15:22 Найти цитируемый пост)
connect(create, SIGNAL(clicked()), SLOT(CreateLabelWithSize()));

будет возвращать false(т.е. ошибку), ибо по коду видно, что класс SizeMainWindow не имеет Q_OBJECT в private секции, но на будущее: всегда проверяй connect'ы, даже если всё рабоатет как полагается - сегодня работает, а завтра будешь долго искать ошибку.

Чтобы особо не напрягаться на этот счёт можно пользоваться макросом. Я пользуюсь таким:
Код

#define QT_CHECKED_CONNECT(src, sig, dest, sl) \
    { \
        bool connected = QObject::connect(src, sig, dest, sl); \
        assert(connected && "Qt meta-object connection problem"); \
    }

//...
QT_CHECKED_CONNECT(create, SIGNAL(clicked()), this, SLOT(CreateLabelWithSize());



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 24.3.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Ребят, мне вас жалко. Я два поста не понимал, в чём проблема посмотреть, удался ли connect. Под линухом Qt сама в случае неудавшегося коннекта пишет в консоль, какой коннект не удался и почему.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 24.3.2008, 16:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



"Ubuntu user" - видимо не под каждым линухом пишет. Под виндой - так точно не пишет smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
anatox91
Дата 24.3.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



archimed7592, спасибо за помощь... у меня просто какая-то тупая особенность допускать самые простые ошибки и не допирать где ошибка... зато теперь уж точно не забуду smile

Добавлено через 8 минут и 37 секунд
archimed7592, убунту у меня стоит в виртуалке, и пока только с ним разбираюсь, а пишу на винде, юзербарчик просто красивый нашел вот и поставил  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
JackYF
Дата 24.3.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Э, ну дык надо из консоли проги запускать ;)


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 24.3.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 11
Всего: 93



Жень, ну ты меня за имбецила то не держи ;).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 25.3.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(archimed7592 @  24.3.2008,  22:36 Найти цитируемый пост)
Жень, ну ты меня за имбецила то не держи ;). 

Э, ну, как бы у меня и в мыслях не было, ты чего? smile Просто если из иксов напрямую запускать, то, думаю, вряд ли можно будет ошибки слотов увидеть, разве что в недрах .xerrors smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
SABROG
Дата 25.3.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



smile че вы страдаете с этой консолью ?

Код

void logOutput(QtMsgType, const char *);
QTextStream *out=0;
...
    if (QDir::current().exists(logpath) || QDir::current().mkpath(logpath) )
    {
    QFile *log = new QFile(logpath + "/log.txt");
        if ( log->open(QIODevice::WriteOnly | QIODevice::Append) ) 
        {
        out = new QTextStream(log);
        qInstallMsgHandler(logOutput);
        }
        else
        {
        delete log;
        qDebug("Can't open 'log.txt' file, all message will be output to debugger and console");
        }
    }
...
void logOutput(QtMsgType type, const char *msg)
{
     QString mes(msg);
     QString dt = QDateTime::currentDateTime().toString(QLatin1String("[dd.MM.yy hh:mm:ss] "));
     switch (type) 
     {
     case QtDebugMsg:
     dt += QLatin1String("[D]");
         break;
     case QtWarningMsg:
     dt += QLatin1String("[W]");
         break;
     case QtCriticalMsg:
     dt += QLatin1String("[C]");
         break;
     case QtFatalMsg:
     dt += QLatin1String("[F]");
     }
     (*out) << dt << QLatin1Char(' ') << QString::fromLocal8Bit(msg) << endl;
}




--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
JackYF
Дата 25.3.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 7
Всего: 162



Цитата(SABROG @  25.3.2008,  17:54 Найти цитируемый пост)
че вы страдаете с этой консолью ?

не знаю, я с ней не страдаю, она работает smile

SABROG, тоже вариант smile

Добавлено через 11 минут и 29 секунд

M
JackYF
anatox91, пора тебе прочитать правила раздела. Меточки [Qt], [GTK], [wx] и т.д. должны появляться у тем сами. Намёк ясен? :)



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
anatox91
Дата 25.3.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



JackYF, сорри, забыл  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0901 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.