Программка виснет при нажатии кнопочки, споткнулся на ровном месте... |
Здравствуйте, гость ( Вход | Регистрация )
Программка виснет при нажатии кнопочки, споткнулся на ровном месте... |
igorenja |
2.2.2010, 12:53
Сообщение
#1
|
Студент Группа: Участник Сообщений: 22 Регистрация: 18.1.2010 Пользователь №: 1384 Спасибо сказали: 1 раз(а) Репутация: 0 |
Доброе время суток всем.
Написал микро программку а она зараза виснет при нажатии кнопочки: CODE #ifndef TBASEWINDOW_H #define TBASEWINDOW_H #include <QWidget> class QLabel; class QPushButton; class TBaseWindow : public QWidget { Q_OBJECT public: TBaseWindow(QWidget *parent=0); protected: QLabel *help; private: QLabel *logo; QPushButton *But; private slots: void click(); }; #endif // TBASEWINDOW_H CODE #include <QtGui> #include "tbasewindow.h" TBaseWindow::TBaseWindow(QWidget *parent) :QWidget(parent) { QLabel *help = new QLabel(this); help->setText(QString("Welcome!!!")); help->setFont(QFont("Times", 25, QFont::Bold)); help->setGeometry(QRect(QPoint(200, 500), help->sizeHint())); QPushButton *But = new QPushButton(this); But->setGeometry(QRect(QPoint(300, 300), But->sizeHint())); connect(But,SIGNAL(clicked()),this,SLOT(click())); setFixedSize(600,600); } void TBaseWindow::click() { help->setText(QString("hdhgdhgdhgdghd")); } CODE #include <QApplication> #include "tbasewindow.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); TBaseWindow *dialog = new TBaseWindow; dialog->show(); return app.exec(); } В чём дело подскажите пожалуйста... И ещё вопрос: При компиляции примеров в папке проектов Release появляется exe-шник, который не запускается отдельно от Qt. Вопрос что нужно сделать чтобы после компиляции был запускаемый на любом компьютере exe-шник. Заранее спасибо! |
|
|
lucifer_vrn |
2.2.2010, 13:07
Сообщение
#2
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
ничего удивительного. ты конечно не обижайся, но это код достойный очутиться на сайте говнокод.ру....
QLabel *help; у тебя определен в хедере. а ты еще в сипипишнике еще один определяешь, в итоге у тебя выходит, что тот что в хедере не иницилизирован и обращение в слоте происходит к рандомному участку памяти. короче говоря твой сипипи должен быть такой.
Еще пара замечаний: 1. Зачем у тебя часть переменных в private часть в protected. Если ты конечно от этого класса не собираешь потом наследоваться.... 2. But->setGeometry(QRect(QPoint(300, 300), But->sizeHint())); - мега жесть. Кури про QLayout, в частности QVBoxLayout и QHBoxLayout. И ещё вопрос: При компиляции примеров в папке проектов Release появляется exe-шник, который не запускается отдельно от Qt. Вопрос что нужно сделать чтобы после компиляции был запускаемый на любом компьютере exe-шник. чтоб запускалься на машине под виндой, где уже установлен куте, нужно в системе переменную path дополнить строкой типа "C:\Qt\2010.01\mingw\bin;C:\Qt\2010.01\qt\bin" или положить кучу дллок от куте в папку с бинарем. дллк из этих папок bin. Все не обязательно, надо смотреть какие именно использует твое приложение, кроме того там их по две разных одна типа для дебуга другая релиз... есть еще один выход - статическая линковка, но я сколько не парился - у меня не получилось... если кто подскажет как это сделать буду благодарен. |
|
|
igorenja |
2.2.2010, 13:16
Сообщение
#3
|
Студент Группа: Участник Сообщений: 22 Регистрация: 18.1.2010 Пользователь №: 1384 Спасибо сказали: 1 раз(а) Репутация: 0 |
QLabel *help; у тебя определен в хедере. а ты еще в сипипишнике еще один определяешь, в итоге у тебя выходит, что тот что в хедере не иницилизирован и обращение в слоте происходит к рандомному участку памяти. Спасибо большое тупанул по чёрному (плюсы тока изучаю). Пару комментариев добавлю 1. Зачем у тебя часть переменных в private часть в protected. Если ты конечно от этого класса не собираешь потом наследоваться.... Это определение базового класса, его свойства будут наследовать производные классы. 2. But->setGeometry(QRect(QPoint(300, 300), But->sizeHint())); - мега жесть. Кури про QLayout, в частности QVBoxLayout и QHBoxLayout. Спасибо за совет. Лэйауты я курил.... и много... Дело в том что сие твоерение будет работать на Embedded Linux в очень специфичной целезке, Там нужно точно позиционировать объекты на экране. Менеджеры компоновки там юзать не желательно.... Ну так а всё же, как скомпилировать так проект чтоб исполняемый файл работал хоть где? |
|
|
Текстовая версия | Сейчас: 2.12.2024, 9:33 |