Russian Qt Forum

Qt => Общие вопросы => Тема начата: lem от Декабрь 05, 2010, 18:32



Название: drag&drop
Отправлено: lem от Декабрь 05, 2010, 18:32
поясните плз, как сделать область, при переносе файла на которую переменной присваивался путь к файлу и выполнялся участок кода и как настроить программу чтоб она отображалась не в списке окон (на панели внизу) а в области уведомлений и пявлялась/исчезала при нажатии F11


Название: Re: drag&drop
Отправлено: ernie от Декабрь 06, 2010, 07:07
1.assistant -> Drag and Drop.
2.window flag QT::Tool + assistant->system tray icon


Название: Re: drag&drop
Отправлено: lem от Декабрь 06, 2010, 14:26
1)я так понял, что это был совет посмотреть в ассистенте: посмотрел, но не понял, если не сложно, дайте плз пример
2)вообще не понял ???


Название: Re: drag&drop
Отправлено: deaks от Декабрь 06, 2010, 14:52
ну емае)))в ассистанте введите Drag and drop examples


Название: Re: drag&drop
Отправлено: lem от Декабрь 06, 2010, 16:49
простите за нубство, но я в QT недавно, многого не понимаю. В ассистенте я искал, НИЧЕГО НЕ ПОНЯЛ, примеров там как таковых не нашел, только описание класса. Гугление тоже ни к чему не привело. У кого есть время, напишите пожалуйста подробно

все, что я смог найти - это drag and drop для qtextedit, но это не совсем то


Название: Re: drag&drop
Отправлено: deaks от Декабрь 07, 2010, 00:10
ну тогда может это вам поможет - http://www.qtforum.org/article/33691/solved-how-to-get-full-filename-from-drag-and-drop-file.html


Название: Re: drag&drop
Отправлено: ernie от Декабрь 07, 2010, 07:22
lem.
1.Сделать setAcceptDrops(true) для виджета.

void <Имя твоего виджетпа>::dragEnterEvent(QDragEnterEvent *event)
{
    bool typeFlag = false;
    urls = event->mimeData()->urls();
    if (urls.isEmpty()) return;
    for (int i=0;i<urls.size();i++)
    {
        QFileInfo *inf = new QFileInfo(urls.at(i).toString());
        QString suf = inf->completeSuffix();
        if ((suf=="jpeg")||(suf=="jpg")||(suf=="tiff")||(suf=="png")||(suf=="raw")||(suf=="bmp")||(suf=="gif"))
        {
            typeFlag = true;
        }
    }
    if (typeFlag==true)
    {
        event->acceptProposedAction();
    }
}

void <Имя твоего виджета>::dropEvent(QDropEvent *event)
{
    foreach(QUrl path,urls)
    {
        QMessageBox::information(this,"dropped files",path.toString());
    }
}

В dragEnterEvent проверяем на возможность опускания на виджет файлов этого типа(в примере это картинки с определенным расширением),а в dropEvent уже осуществляем действия нам нужные с опущенными файлами.
2.чтобы не отображалось окно на панели(баре) надо сделать setWindowFlag(Qt::tool),а по созданию в области уведомлений(как я понял в трее),читай System Tray Icon ,так же если хочешь появления по F11 из любого места ОС,придётся заюзать Qext библиотеку,ибо в qt горячие клавиши только при активном виджете программы работают.