А какие вобще сигналы ловятся слотами?, по нажатию кнопки на Label |
Здравствуйте, гость ( Вход | Регистрация )
А какие вобще сигналы ловятся слотами?, по нажатию кнопки на Label |
Don |
7.5.2008, 19:21
Сообщение
#41
|
Студент Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: 0 |
непонял, это ты уже про свое творение? Давай с этим примером покончим. Насчёт *.obj да, это я про своё творение. Но сделал у весь qmake и файл с кирпичём появился. Но а с t7 он меня работает, делая как ты мне говорил. Мы по ходу начали друг друга не понимать. Я спрашивал: "Может быть, что в moc_*.cpp файлах происходить обращение данным класса напрямую". Просто счас у меня вылазит постоянно одна и таже ошибка Error 1 error C2248: 'QWidget::QWidget' : cannot access private member declared in class 'QWidget' Я сней не могу разабраться. Хотя не moc_*.obj файл в мёом творении всё равно не создаётся. Сообщение отредактировал Don - 7.5.2008, 19:28 |
|
|
Litkevich Yuriy |
7.5.2008, 19:44
Сообщение
#42
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
если ты moc-файлы руками не правишь, то и ошибку в них не ищи, ищи у себя, если проект не большой выкладывай все вместе с pro-файлом, бум изучать.
посмотри, что у тебя идет следующей строкой после
кроме препроцессорных директив, в тех файлах где есть такой инклуд, иногда компилер показывает предыдущую строку вызвавшую ошибку, а она может быть имено в конце хидера. |
|
|
Don |
8.5.2008, 15:53
Сообщение
#43
|
Студент Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ладно, со своей предыдущей ошибкой я разобрался, при использовании QOBJECT ошибок не выдаёт, все файлы moc_*.cpp и moc_*.obj генерируются, но кнопка всё равно остаётся мёртвой, жмёшь на неё, а она ничего не делает. Люди добрые посмотрите пожайлуйста мой код и скажите что я делаю не так.
Эта версия моей проги при запуске в клетках рандомно рисуются смайлики, а при нажатии на кнопку должна ещё раз рандомно перерисовывать смайлики, но этого не происходит. life.h CODE #ifndef LCDRANGE_H #define LCDRANGE_H #include <QtGui> #include <QWidget> #include <QPainter> class Life : public QWidget { Q_OBJECT public: Life(QWidget *parent = 0); void smile(int x, int y ); protected: virtual void paintEvent(QPaintEvent*); public slots: void ris(); private: int imatrix[10][10]; int newmatrix[10][10]; }; #endif life.cpp CODE #include <QApplication> #include <QPainter> #include <QTextCodec> #include <QPushButton> #include <QtGui> #include <math.h> #include <time.h> #include <QPushButton> #include <Life.h> Life::Life(QWidget *parent) : QWidget(parent) { srand(time(0)); for (int i = 0; i<10; i++) for(int j=0; j<10; j++) imatrix[i][j] = rand()%3; } void Life::ris() { int x = 20; int y = 40; srand(time(0)); for (int i = 0; i<10; i++) for(int j=0; j<10; j++) newmatrix[i][j] = rand()%3; for (int i = 0; i<10; i++) { for(int j=0; j<10; j++) { if (newmatrix[i][j] == 1) smile(x,y); x = x + 50; } y = y + 50; x = 20; } } void Life::paintEvent(QPaintEvent*) { QPainter paint(this); int x = 15; int y; paint.setRenderHint(QPainter::Antialiasing,true); paint.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap)); paint.setBrush(QBrush(Qt::white, Qt::SolidPattern)); for (int i=1; i<=11; i++) //рисуем клетку { paint.drawLine(x,15,x,515); x = x + 50; } x = 15; y = 19; for (i=1; i<=11; i++) { paint.drawLine(15,x,515,x); x = x+50; } x = 19; paint.setPen(QPen(Qt::white)); //рисуем прямоугольники в клетках paint.drawRoundRect(19,19,42,42); for (i=1; i<=10; i++) { for (int j=1; j<=10; j++) { paint.drawRoundRect(x,y,42,42); x = x+50; } x = 19; y = y +50; } srand(time(0)); x = 20; y = 40; for (int i = 0; i<10; i++) //рисуем смайлики { for(int j=0; j<10; j++) { if (imatrix[i][j] == 1) smile(x,y); x = x + 50; } y = y + 50; x = 20; } paint.end(); } void Life::smile(int x, int y) //рисуем смайлик { QPainter paintsmile(this); paintsmile.setRenderHint(QPainter::Antialiasing,true); paintsmile.setPen(QPen(Qt::black)); paintsmile.setBrush(QBrush(Qt::yellow)); paintsmile.drawEllipse(x,y-20,40,40); paintsmile.drawEllipse(x+11,y-5,3,3); paintsmile.drawEllipse(x+26,y-5,3,3); QRect rect(x+6,y-24,28,39); int a = 30 * 112; int b = 120 * 16; paintsmile.drawArc(rect,a,; paintsmile.end(); } main.cpp CODE #include <QApplication> #include <QPainter> #include <QHBoxLayout> #include <QSpinBox> #include <QTextCodec> #include <QPushButton> #include <QtGui> #include <math.h> #include <time.h> #include <QPushButton> #include <Life.h> int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget window; QPushButton go("Go"); //go.setGeometry(550,490,70,28); go.setFixedSize(70,28); Life a; QObject::connect(&go, SIGNAL(clicked()), &a, SLOT(ris())); window.setGeometry(100,100,700,550); //рамки окна window.setFixedSize(700,550); //фиксируем границы QHBoxLayout lay; //собираем lay.addWidget(&a); //все виджеты lay.addWidget(&go); window.setLayout(&lay); //вместе window.show(); return app.exec(); } |
|
|
Litkevich Yuriy |
8.5.2008, 16:37
Сообщение
#44
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Ладно, со своей предыдущей ошибкой я разобрался, при использовании QOBJECT ошибок не выдаёт, все файлы moc_*.cpp и moc_*.obj генерируются Расскажи в чем ошибка была, кому-нибудь может пригодится. почему пишишь свой заголовочник как системный? (#include <Life.h>) уменя перерисовывается, я не стал вникать в то, как работает программа, тупо повторил то, что в конструкторе, разница в строке: в конструкторе:
а в слоте было:
|
|
|
Don |
8.5.2008, 16:58
Сообщение
#45
|
Студент Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ошибка была в том, что я при реализации функций класса, обращался к данным этого же класса как бы через объект: а.ris() к примеру, а надо было просто ris().
Перепиши то, что ты написал в тегах кода и то что исправил. А то у меня ничего не видно (см прикреплённый скрин) |
|
|
Litkevich Yuriy |
8.5.2008, 17:24
Сообщение
#46
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Don |
8.5.2008, 17:42
Сообщение
#47
|
Студент Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: 0 |
Чёт я не понял, что ты исправил. У меня как не работало, так и не работает
В конструкторе в imatrix рандомно задаются значения для рисования смайликов при запуске проги. А функция ris() должна рандомно задать newmatrix и по этой же матрице опять перерисовывать смайлики. И ris() дожна вызыватся по нажатии на кнопку, но у меня она не работает Сообщение отредактировал Don - 8.5.2008, 17:47 |
|
|
Litkevich Yuriy |
8.5.2008, 17:59
Сообщение
#48
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я сделал как в конструкторе, но есть какой-то касяк с событием paintEvent, а именнно:
я переделал функцию main так, чтобы там были указатели, а не объекты, при этом перерисовываться перестало, но при включеном стиле Cleanlooks, все перерисовывается, попробуй после нажатия на кнопку переключаться в любое другое окно, а потом назад. Этот трюк помогает. и еще используй qDebug, чтобы видеть что происходит, после добавления отладки в обработчик события
вижу такое:
короче добился чтоб работало, но я полагаю что это все методом грубой силы, все таки рисование вещь тонкая надо доки подробно изучать. Лекарство: в конце своего слота (ris()) добавь repaint(); - принудительно перерисовать. |
|
|
Don |
8.5.2008, 18:04
Сообщение
#49
|
Студент Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: 0 |
А как включить стиль Cleanlooks?
|
|
|
Litkevich Yuriy |
8.5.2008, 18:07
Сообщение
#50
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Прочитай конец моего предыдущего поста (о лекарстве)
main.cpp:
|
|
|
Текстовая версия | Сейчас: 2.12.2024, 9:46 |