crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Шуточный пример
Litkevich Yuriy
  опции профиля:
сообщение 12.4.2009, 14:17
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Тут написал шуточный примерчик, но может оказатся поучительным для новичков:
Раскрывающийся текст
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>


class MyButton : public QPushButton
{
Q_OBJECT
public:
    MyButton(QWidget *parent = 0);
public slots:
    void slotSetParent(bool checked);

private:
    QWidget *parent;

};

MyButton::MyButton(QWidget *p)
    : QPushButton(0)
{
    parent = p;
    setCheckable(true);
    setText("Click");
    connect(this, SIGNAL(clicked(bool)), this, SLOT(slotSetParent(bool)));
}

void MyButton::slotSetParent(bool checked)
{
    if (checked)
    {
        setParent(parent);
        parent->layout()->addWidget(this);
    }
    else
    {
        setParent(0);
        show();
    }
};

// нужнен после объявления класса, т.к. и объявление и реализация класса в одном файле.
#include "main.moc"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QVBoxLayout    *lay = new QVBoxLayout();

    QWidget wgt;
    wgt.resize(150, 70);
    wgt.setLayout(lay);
    wgt.show();
    
    MyButton *btn = new MyButton(&wgt);
    btn->show();

    return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 12.4.2009, 23:00
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Чем-то напоминает QDockWidget, только тут докинг окна при нажатии на кнопку происходит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 12.4.2009, 23:04
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Очень интересное решение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.4.2009, 23:17
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 13.4.2009, 3:00) *
Чем-то напоминает QDockWidget, только тут докинг окна при нажатии на кнопку происходит.
вполне возможно, что он примерно так и работает. Потому, наверное, в QMainWindow предусмотрены специальные места для парковки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ЙаМайскЫйПчОЛ
  опции профиля:
сообщение 16.4.2009, 13:26
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 154
Регистрация: 10.7.2008
Из: СПб
Пользователь №: 232

Спасибо сказали: 7 раз(а)




Репутация:   5  


добавь к кнопке setWindowFlags(Qt::FramelessWindowHint); симпатишней буде
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 16.4.2009, 13:47
Сообщение #6





Гости








    


Цитата(Litkevich Yuriy @ 12.4.2009, 14:17) *
Тут написал шуточный примерчик, но может оказатся поучительным для новичков:



А почему файл *.moc обычно moc_*.cpp от чего это зависит? Вообще другое расширение удобней для поиска и архивации. Чет и в асистанте не нахожу ничего на эту тему
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.4.2009, 14:02
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
Вообще другое расширение удобней для поиска и архивации.
Это ты о чём? о какой архивации? И как это предложение связано с
Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
Чет и в асистанте не нахожу ничего на эту тему
?????

Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
А почему файл *.moc обычно moc_*.cpp от чего это зависит?
когда объявление класса помещено в отдельный заголовочный файл (myclass.h) программа qmake через make-файл говорит программе moc создать файл moc_myclass.cpp и автоматически добавляет этот файл в список зависимостей компилятора (опять же посредством make-файла).

когда иобъявление класса и его реализация помещены в один файл (myclass.cpp) , тогда программа qmake через make-файл говорит программе moc создать файл myclass.moc. НО НЕ добавляет этот файл в список зависимостей компилятора. Поэтому приходится делать это руками (#incude myclass.moc)

Цитата(Danila_Bagrofff @ 16.4.2009, 16:07) *
wdg->setParent(tbl);
tbl->setCellWidget(0,0, wdg);
тут я что-то совсем проглядел. Ты устанавливаешь и родителя и потом родителю виджет. Если нужно вставлять в ячейку, то устанавливать родителя не надо.

А вообще я чую тема сильно другая и видимо из области "Перетаскивания" (Drag-n-Drop), я прав?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.4.2009, 15:03
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Тему разделил: QTableWidget, Как програмно реализовать перетаскивание?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 15:28