crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в запуск виджета по нажатию кнопки
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 14.11.2008, 15:42
 
Цитата(guest13 @ 14.11.2008, 18:37) *
qdevelop
от него ничего не зависит, только от библиотек Qt
guest13 Дата 14.11.2008, 15:37
 
Цитата(Litkevich Yuriy @ 14.11.2008, 15:31) *
про Qt Developper никогда не слышал.

эм-м... виноват немного не так выразился
http://qdevelop.org вот эта штука
была на диске от книги Шлее
Litkevich Yuriy Дата 14.11.2008, 15:31
  guest13, вопервых тебе понадобятся dll'ки (для виндовоза) см. Асистент
про Qt Developper никогда не слышал.

если еще используются плагины Qt (например SQL модуль и т.д.) то читай эту статью, когда ты проведьшь тест на возможность распространять свои программы, буду рад если ты чего-нибудь допишешь в эту статью, вобще в ней нужно написать и о распространении программ вообще, а не только о плагинах.
guest13 Дата 14.11.2008, 15:20
  спасибо) теперь до 40 кб упал вес ехе-шника))
тогда ещё нагружу маленьким вопросиком
я полагаю, что это приложение при запуске на компах, где нету установленного Qt Developper не будет запускаться, требуя библиотеки.... как можно сделать, чтобы приложение запускалось на всех компах?
Litkevich Yuriy Дата 14.11.2008, 12:29
 
Цитата(guest13 @ 14.11.2008, 14:39) *
с чего такие большие объемы ехе-файлов?
по всей видимости ты собираешь отладочную версию, в pro-файл напиши так:
CONFIG         += debug_and_release build_all


CONFIG (release, debug|release) {
    message(=================== BUILD FOR RELEASE ==================)
    message(EXTLIBPATH = $$EXTLIBPATH)
    message(LIBS = $$LIBS)
    message(Qt's = $$QT)
    message(CONFIG's = $$CONFIG)    
    OBJECTS_DIR = release/obj
    UI_DIR      = release/uic
    MOC_DIR     = release/moc
    RCC_DIR        = release/rcc
}

CONFIG (debug, debug|release) {
            CONFIG        += console
    message(=================== BUILD FOR DEBUG ====================)
    message(EXTLIBPATH = $$EXTLIBPATH)
    message(LIBS = $$LIBS)
    message(Qt's = $$QT)
    message(CONFIG's = $$CONFIG)        
    OBJECTS_DIR = debug/obj
    UI_DIR      = debug/uic
    MOC_DIR     = debug/moc
    RCC_DIR        = debug/rcc    
}

тогда у тебя по команде make будет собиратся и отладочная версия и релизная, при этом результат работы MOC, UIC, RCC и объектники будут акуратно раскладыватся по подкаталогам, а консоль будет создаватся только для отладочной версии.

Незабудь, что после изменения pro-файла надо выполнить qmake
guest13 Дата 14.11.2008, 11:39
  ога) спасибо) я именно это и имел в виду, что теперь, благодаря тому, что у меня есть слот, который принимает сигнал от первого виджета, я могу не просто открыть второй виджет, а ещё какое-нибудь действо совершить.

ещё маленький вопросик.... с чего такие большие объемы ехе-файлов? когда использовал #include <QtGui> вообще около 2 мб. А когда отдельно все библиотеки подключал <QWidget>, <QApplication> и прочее - размер уменьшился до 780 кб....всё-таки, мне кажется, приложение должно весить значительно меньше....
Litkevich Yuriy Дата 14.11.2008, 10:57
 
Цитата(guest13 @ 14.11.2008, 13:48) *
p.s. пока я писал, ты уже добавил))
да что-то инет уменя при тормаживает, пришлось делить на порции.
Обрати внимание, мы соеденили сигнал MyWid1::clicked() со слотом MyWid2::show(), которого вроде нет у нас, но так как MyWid2 является наследником QWidget, он всвою очередь распологает таким слотом, именно этот слот и вызывается.

Ради эксперимента можешь переопределить этот слот, например так:
public slots:
    void show();

реализация:
void MyWid2::show()
{
    QWidget::show();
    QMessageBox::informaion(this, "Slot", tr("MyWid2::show()"));

}
guest13 Дата 14.11.2008, 10:48
 
Цитата(Litkevich Yuriy @ 14.11.2008, 10:40) *
или в переводе с русского на С++ так:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWid1 w1;
    MyWid2 w2;

    QObject::connect(&w1,SIGNAL(clicked()),&w2,SLOT(show()));
    w1.show();
    return app.exec();
}
И все


когда я делал так, то получал следующее
Object::connect: No such signal MyWid1::clicked()

тогда, я и сделал так, как описал выше....

p.s. пока я писал, ты уже добавил))
Цитата(Litkevich Yuriy @ 14.11.2008, 10:40) *
В классе MyWid1 создал сигнал
void clicked();
с седенил его с сигналом кнопки:

т.е. я просто создал лишний слот) значит всё-таки намудрил ) но зато, теперь кроме вызова второго виджета, я могу ещё какое-нибудь действо совершить)
большое спасибо! :clapping:
Litkevich Yuriy Дата 14.11.2008, 10:40
  для описаной изначально задачи, это выглядит так:
Цитата(Litkevich Yuriy @ 13.11.2008, 18:12) *
вобщем логика:
создал виджет 1
создал виджет 2
соеденил сигнал 1-го со слотом 2-го
показал 1-ый
запустил цикл событий приложения
(соображай где все эти действия нужно проделать!)
или в переводе с русского на С++ так:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWid1 w1;
    MyWid2 w2;

    QObject::connect(&w1,SIGNAL(clicked()),&w2,SLOT(show()));
    w1.show();
    return app.exec();
}
И все

В классе MyWid1 создал сигнал
void clicked();
с седенил его с сигналом кнопки:
QObject::connect(q,SIGNAL(clicked()),this,SIGNAL(clicked()));
где q кнопка (нумеровать ее нет нужды, т.к. в каждом классе она своя)

и того, когда по кнопке первого виджета щелкнут, происходит следующее:
QPushButton::clicked() -> MyWid1::clicked() -> MyWid2::show()
т.е. отобразится второй виджет
guest13 Дата 14.11.2008, 10:10
  и снова здравствуйте)
хочу похвастаться, что всё-таки я сделал то что хотел! :clapping: спасибо огромное))
в итоге я сделал так
в wid1.h добавил вот такой сигнал
signals:
    void closed();

в wid2.h добавил вот такой слот
public slots:
    void myslot();

в wid2.cpp описал слот таким образом
void MyWid2::myslot()
{
    emit show();
}

в wid1.cpp свзязал сигнал кнопки с сигналом испускаемым виджетом wid1
QObject::connect(q1,SIGNAL(clicked()),this,SIGNAL(closed()));

ну и напоследок в main.cpp связал сигнал одного виджета со слотом другого
QObject::connect(&w1,SIGNAL(closed()),&w2,SLOT(myslot()));

и спросить - не слишком ли я намудрил со слотами и сигналами...может можно как-то упростить? :rolleyes:
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 10.11.2025, 16:03