Russian Qt Forum

Qt => Общие вопросы => Тема начата: JamS007 от Декабрь 31, 2009, 00:42



Название: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 00:42
Здравствуйте,

Я использую 2е таблицы, и мне нужно их синхронизировать... Подскажите, как сделать, чтоб при скроллинге одной из них, другая прокручивалась автоматически и в соответствии предыдущей...

Спасибо.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: Kolobok от Декабрь 31, 2009, 01:36
Код:
connect( table1->verticalScrollBar(), SIGNAL( valueChanged( int ) ), table2->verticalScrollBar(), SLOT( setValue( int ) ) );
connect( table2->verticalScrollBar(), SIGNAL( valueChanged( int ) ), table1->verticalScrollBar(), SLOT( setValue( int ) ) );

Это вопрос для раздела новичков.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 13:19
может быть... не спорю, Qt только учу. Но Ваш пример не работает.
вот код:
Код:
QObject::connect(ui->namesWidget->verticalScrollBar(), SIGNAL(valueChanged(int)),ui->marksWidget->verticalScrollBar(), SLOT(setValue(int)));

а вот реакция компилятора:
Цитировать
error: no matching function for call to 'MainWindow::connect(QScrollBar*, const char*, QScrollBar*, const char*)'


Название: Re: Scrooling двух елементов одновременно.
Отправлено: Dendy от Декабрь 31, 2009, 13:26
Что такое MainWindow?


Название: Re: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 13:33
MainWindow - класс главного окна, привязку сигналов и слотов скроллбаров делаю в конструкторе класса:

код главного окна
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

  // Связываем нужные елементы
    QObject::connect(ui->namesWidget->verticalScrollBar(), SIGNAL(valueChan),ui->marksWidget->verticalScrollBar(), SLOT(setValue(int)));
}

класс главного окна:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QObject>

#include <QMainWindow>
#include <QResizeEvent>
#include <QSize>
#include <QPoint>
#include <QAction>
#include <QPushButton>
#include <QModelIndex>


   // Классы оформления
#include <Qt>
#include <QSplitter>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);
    void resizeEvent(QResizeEvent *e);

    // ------Блок переменных
      //-----Переменные офрмления формы
      QSplitter *mainSplitterWidget;

private:
    Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H


Название: Re: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 13:48
Решение нашел.

Код:
ui->marksWidget->setVerticalScrollBar(ui->namesWidget->verticalScrollBar());

работает на ура.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: pastor от Декабрь 31, 2009, 13:52
а вот реакция компилятора

#include <QScrollBar>


Название: Re: Scrooling двух елементов одновременно.
Отправлено: Dendy от Декабрь 31, 2009, 14:01
Мне кажется что таким образом из namesWidget скроллбар исчезнет. Поправьте, если ошибаюсь.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 14:19
действительно, оказалось, что исчез :) Будем поправлять.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: Dendy от Декабрь 31, 2009, 14:42
Попробуйте как посоветовал Пастор, добавить #include <QScrollBar> в mainwindow.cpp. Компилятор видит этот тип только по предварительному обьявлению, следовательно без этого инклуда он не знает, что QScrollBar наследуется от QObject, вот и выдаёт ошибку.


Название: Re: Scrooling двух елементов одновременно.
Отправлено: JamS007 от Декабрь 31, 2009, 14:50
Всё. Разобрался. Всем большое спасибо.

P.S. Метод с #include <QScrollBar> действительно решил проблему.