crossplatform.ru

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


  Ответ в File Drop и QtableWidget
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
RazrFalcon Дата 17.1.2011, 14:43
  Спасибо, получилось.
Вот только как ограничить открываемые файлы только текстовыми ака text/plain


Вот пример моей программы (банально считает количество слов):
(если есть замечание по самому коду, готов высушать)
Litkevich Yuriy Дата 16.1.2011, 23:56
  Примерно так:
заголовочник класса окна
class SameClass : public QWidget {
    Q_OBJECT
public:
    SameClass(QWidget * = 0);
    virtual ~SameClass(){}

protected:
    virtual void dragEnterEvent(QDragEnterEvent *);
    virtual void dropEvent(QDropEvent *);
    
private:
    void load(const QString &);

private:
    QString currentFilePath;
    QTableView *view;
    
};

реализация класса окна
SameClass::SameClass(QWidget *parent):
                QWidget(parent)
{
    QVBoxLayout *layout = new QVBoxLayout(this);
    view = new QTableView(this);
    layout->addWidget(view);
    setLayout(layout);
    setAcceptDrops(true); // [1]
}

void SameClass::dragEnterEvent(QDragEnterEvent *event) {
    qDebug() << "SameClass::dragEnterEvent";
    event->acceptProposedAction(); // [1]
}

// [2]
void SameClass::dropEvent(QDropEvent *event) {
    qDebug() << "SameClass::dropEvent";
    const QMimeData *mime = event->mimeData();
    if (!mime->hasUrls()) {
        event->ignore();
        return;
    }

    if (!mime) return;
    QString file_path = mime->urls().first().toLocalFile();
    if (file_path.isEmpty()) return;
    
    load(file_path);
    currentFilePath = file_path;
    
    event->acceptProposedAction();
}

void SameClass::load(const QString &file_path)
{
    QMessageBox::information(this,
                             "Same class",
                             QString("Loading drop file:\n %1").arg(file_path));
}

[1] - разрешаем бросание на виджет
Цитата
To be able to receive media dropped on a widget, call setAcceptDrops(true) for the widget, and reimplement the dragEnterEvent() and dropEvent() event handler functions.
...
The dragEnterEvent() function is typically used to inform Qt about the types of data that the widget accepts. You must reimplement this function if you want to receive either QDragMoveEvent or QDropEvent in your reimplementations of dragMoveEvent() and dropEvent().

[2] - собственно обработка бросания
Цитата
The dropEvent() is used to unpack dropped data and handle it in way that is suitable for your application.

RazrFalcon Дата 16.1.2011, 21:51
  Нашел только это.
Компилит но не работает =(
Алексей1153 Дата 14.1.2011, 21:12
  смотри методы QWidget:

setAссeptDrops(bool)
virtual void dropEvent(QDropEvent*)
RazrFalcon Дата 14.1.2011, 20:26
  Как сбросить файл в таблицу, что бы запустился код считывания и обработки файла, а потом уже и вывод его в таблицу.
В примерах только QLabel
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 14:56