• 8722阅读
  • 0回复

請問如何解決這個問題~~ [复制链接]

上一主题 下一主题
离线tako761208
 
只看楼主 正序阅读 楼主  发表于: 2010-04-06
C:/Users/JJLIAO/Documents/t1/mainwindow.cpp:12: error: cannot convert 'Phonon::SeekSlider*' to 'ADM_QSlider*' in assignment
指的是這行 slider=ui->horizontalSlider; 有問題

請問如何才能解決這個問題~~

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

static ADM_QSlider *slider=NULL;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    slider=ui->horizontalSlider;
    slider->setMinimum(0);
    slider->setMaximum(1000000000);
    slider->setPageStep(10000000);

    media = new Phonon::MediaObject;

    vwidget = new Phonon::VideoWidget;
    Phonon::createPath(media, vwidget);
    vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);

    aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
    Phonon::createPath(media, aOutput);

    volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(aOutput);
    volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);

    ui->gridLayout->addWidget(vwidget);
    ui->horizontalSlider->setMediaObject(media);
    ui->horizontalLayout->addWidget(volumeSlider);
    
}

mainwindow.h

#include <QMainWindow>
#include <QFileDialog>
#include <Phonon>
#include "ADM_qslider.h"

namespace Ui {
    class MainWindow;
}

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

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;

    Phonon::MediaObject *media;
    Phonon::VideoWidget *vwidget;
    Phonon::AudioOutput *aOutput;
    Phonon::VolumeSlider *volumeSlider;

private slots:
    void on_stop_clicked();
    void on_pause_clicked();
    void on_play_clicked();
    void on_open_clicked();
};

ADM_qslider.cpp
#include <QtGui/QPainter>
#include <QtGui/QSlider>
#include "ADM_qslider.h"

ADM_QSlider::ADM_QSlider(QWidget *parent) : QSlider(parent)
{
    frameCount = markerA = markerB = 0;
}

void ADM_QSlider::paintEvent(QPaintEvent *event)
{
    QSlider::paintEvent(event);    

    int a = markerA, b = markerB;
    QColor color = Qt::blue;

    if (markerA > markerB)
    {
        b = markerA;
        a = markerB;
        color = Qt::red;
    }

    if (frameCount > 0 && (a != 0 || b != frameCount))
    {
        int left = (a * width()) / frameCount;
        int right = (b * width()) / frameCount;

        QPainter painter(this);

        painter.setPen(color);
        painter.drawRect(left, 1, right - left, height() - 3);
        painter.end();
    }
}

void ADM_QSlider::setMarkerA(uint32_t frameIndex)
{
    setMarkers(frameIndex, markerB);
}

void ADM_QSlider::setMarkerB(uint32_t frameIndex)
{
    setMarkers(markerA, frameIndex);
}

void ADM_QSlider::setMarkers(uint32_t frameIndexA, uint32_t frameIndexB)
{
    if (frameIndexA > frameCount)
        printf("[ADM_QSlider] Marker A is out of bounds (%u, %u)\n", markerA, frameCount);
    else if (frameIndexB > frameCount)
        printf("[ADM_QSlider] Marker B is out of bounds (%u, %u)\n", markerB, frameCount);
    else
    {
        markerA = frameIndexA;
        markerB = frameIndexB;

        repaint();
    }
}

void ADM_QSlider::setFrameCount(uint32_t count)
{
    frameCount = count;
    repaint();
}

//EOF


ADM_QSlider.h
#include <QSlider>

class ADM_QSlider : public QSlider
{
protected:
    uint32_t frameCount, markerA, markerB;
    void paintEvent(QPaintEvent *event);

public:
    ADM_QSlider(QWidget *parent = 0);

    void setMarkerA(uint32_t frameIndex);
    void setMarkerB(uint32_t frameIndex);
    void setMarkers(uint32_t frameIndexA, uint32_t frameIndexB);
    void setFrameCount(uint32_t count);
};
[ 此帖被tako761208在2010-05-10 00:07重新编辑 ]
快速回复
限100 字节
 
上一个 下一个