Example #1
0
/**
 * @brief TimerWindow::initLayout 初始化布局
 */
void TimerWindow::initLayout()
{
    //当前时间和日期说明字符串头部
    headToday =  QString(tr("Today Time: "));
    headWeek =  QString(tr("Week Time: "));
    headAverage = QString(tr("Average Time: "));
    headTodayDate =  QString(tr("Today is: "));
    headWeekDate =  QString(tr("This Week: "));

    //当前时间和日期控件
    labelTodayDate = new QLabel();
    labelTodayDate->setContentsMargins(30,15,30,3);
    labelTodayDate->setStyleSheet("background-color:#94BCD7;color:white");
    labelWeekDate = new QLabel();
    labelWeekDate->setContentsMargins(30,3,30,15);
    labelWeekDate->setStyleSheet("background-color:#94BCD7;color:white");
    labelTodayTime = new QLabel();
    labelTodayTime->setContentsMargins(30,15,30,3);
    labelTodayTime->setStyleSheet("background-color:#549FCF;color:white");
    labelWeekTime = new QLabel();
    labelWeekTime->setContentsMargins(30,3,30,3);
    labelWeekTime->setStyleSheet("background-color:#549FCF;color:white");
    labelAverageTime = new QLabel();
    labelAverageTime->setContentsMargins(30,3,30,15);
    labelAverageTime->setStyleSheet("background-color:#549FCF;color:white");

    //当前时间和日期布局
    vLayoutTimeAndDate = new QVBoxLayout();
    vLayoutTimeAndDate->addWidget(labelTodayDate);
    vLayoutTimeAndDate->addWidget(labelWeekDate);
    vLayoutTimeAndDate->addWidget(labelTodayTime);
    vLayoutTimeAndDate->addWidget(labelWeekTime);
    vLayoutTimeAndDate->addWidget(labelAverageTime);
    vLayoutTimeAndDate->setContentsMargins(0,10,0,20);

    //查询部分控件
    labelBeginDate = new QLabel(tr("Begin:"));
    labelEndDate = new QLabel(tr("End:"));
    labelYear = new QLabel(tr(" year"));
    labelMonth = new QLabel(tr(" month"));
    labelDay = new QLabel(tr(" day"));
    editBeginYear = new QLineEdit();
    editBeginMonth = new QLineEdit();
    editBeginDay = new QLineEdit();
    editEndYear = new QLineEdit();
    editEndMonth = new QLineEdit();
    editEndDay = new QLineEdit();
    btnSelfData = new QPushButton(tr("Self"));
    btnSelfData->setFixedSize(40, 25);
    btnSelfData->setContentsMargins(0,0,0,0);
    btnSelfData->setStyleSheet("background-color:#2AA0D2;color:white;border:none;margin:0;padding:0;");
    btnAllData = new QPushButton(tr("All"));
    btnAllData->setStyleSheet("background-color:#94BCD7;color:white;border:none;margin:0;padding:0;");
    btnAllData->setFixedSize(40, 25);
    btnAllData->setContentsMargins(0,0,0,0);
    btnQuery = new QPushButton(tr("Query"));
    btnQuery->setStyleSheet("background-color:#2AA0D2;color:white;border:none;margin:0;padding:0;");
    btnQuery->setFixedSize(60,25);
    labelBeginDate->setFixedWidth(40);
    labelEndDate->setFixedWidth(40);
    editBeginYear->setFixedWidth(35);
    editBeginMonth->setFixedWidth(35);
    editBeginDay->setFixedWidth(35);
    editEndYear->setFixedWidth(35);
    editEndMonth->setFixedWidth(35);
    editEndDay->setFixedWidth(35);
    labelYear->setFixedWidth(40);
    labelMonth->setFixedWidth(40);
    labelDay->setFixedWidth(40);

    QRegExp reYear("^[0-9]{4}$");
    editBeginYear->setValidator(new QRegExpValidator(reYear, this));
    editEndYear->setValidator(new QRegExpValidator(reYear, this));
    QRegExp reMonth("^0?[1-9]$|^1[0-2]$");
    editBeginMonth->setValidator(new QRegExpValidator(reMonth, this));
    editEndMonth->setValidator(new QRegExpValidator(reMonth, this));
    QRegExp reDay("^0?[1-9]$|^[1-2][0-9]$|^3[0-1]$");
    editBeginDay->setValidator(new QRegExpValidator(reDay, this));
    editEndDay->setValidator(new QRegExpValidator(reDay, this));

    //查询布局
    gLayoutDate = new QGridLayout();
    gLayoutDate->addWidget(btnSelfData,0,0,1,1);
    gLayoutDate->addWidget(btnAllData,0,1,1,1);
    gLayoutDate->addWidget(labelBeginDate,0,3,1,1);
    gLayoutDate->addWidget(editBeginYear,0,4,1,1);
    gLayoutDate->addWidget(labelYear,0,5,2,1);
    gLayoutDate->addWidget(editBeginMonth,0,6,1,1);
    gLayoutDate->addWidget(labelMonth,0,7,2,1);
    gLayoutDate->addWidget(editBeginDay,0,8,1,1);
    gLayoutDate->addWidget(labelDay,0,9,2,1);
    gLayoutDate->addWidget(labelEndDate,1,3,1,1);
    gLayoutDate->addWidget(editEndYear,1,4,1,1);
//    gLayoutDate->addWidget(labelYear,1,2,1,1);
    gLayoutDate->addWidget(editEndMonth,1,6,1,1);
//    gLayoutDate->addWidget(labelMonth,1,4,1,1);
    gLayoutDate->addWidget(editEndDay,1,8,1,1);
//    gLayoutDate->addWidget(labelDay,1,6,1,1);
    gLayoutDate->addWidget(btnQuery,0,10,2,1);
    gLayoutDate->addWidget(labelYear,0,2,1,1);
    gLayoutDate->setContentsMargins(0,0,0,0);
    gLayoutDate->setSpacing(1);

    //绘图对象
    customPlot = new QCustomPlot();
    customPlot->setFixedSize(500, 250);

    //按钮布局
//    hLayoutBtn = new QHBoxLayout();
//    hLayoutBtn->addWidget(btnSelfData);
//    hLayoutBtn->addWidget(btnAllData);
//    hLayoutBtn->setSpacing(0);
//    hLayoutBtn->setAlignment(btnSelfData, Qt::AlignLeft);
//    hLayoutBtn->setAlignment(btnAllData, Qt::AlignLeft);
//    hLayoutBtn->setMargin(0);

    //主布局
    vLayoutMain = new QVBoxLayout();
//    vLayoutMain->addWidget(labelTodayDate);
//    vLayoutMain->addWidget(labelWeekDate);
//    vLayoutMain->addWidget(labelTodayTime);
//    vLayoutMain->addWidget(labelWeekTime);
//    vLayoutMain->addWidget(labelAverageTime);
//    vLayoutMain->addLayout(hLayoutBtn);
    vLayoutMain->addLayout(vLayoutTimeAndDate);
    vLayoutMain->addLayout(gLayoutDate);
    vLayoutMain->addWidget(customPlot);
    vLayoutMain->setAlignment(gLayoutDate, Qt::AlignLeft);
    vLayoutMain->setAlignment(gLayoutDate, Qt::AlignLeft);
    vLayoutMain->setSpacing(0);
    vLayoutMain->setContentsMargins(40,0,40,0);

    this->setLayout(vLayoutMain);
}
Example #2
0
QUrl ImdbParser::Parse( const QByteArray& data )
{
    DebugPrintFunc( "ImdbParser::Parse", data.size() );

    QString foundedPage( data );
    RegExpTools::SimplifyText( foundedPage );

    QRegExp reRedirect( "class=\"number\">1.</td><td class=\"title\"><a href=\"(.*)\">");
    QString redirectUrl( RegExpTools::ParseItem( foundedPage, reRedirect ) );

    QUrl posterUrl;

    if( !redirectUrl.isEmpty() )
    {
        redirectUrl = "http://www.imdb.com" + redirectUrl;

        QString str( request.runSync( QUrl( redirectUrl ) ) );
        RegExpTools::SimplifyText( str );

        DebugPrint( QString( "Simpified to: %1 bytes" ).arg( str.size() ) );

          // Title
        QRegExp reTitle( "h1 itemprop=\"name\".*>(.*)<span" );
        film.SetColumnData( FilmItem::TitleColumn, RegExpTools::ParseItem( str, reTitle ) );

          // Original title
        QRegExp reOriginalTitle( "div class=\"originalTitle\">(.*)<span" );
        film.SetColumnData( FilmItem::OriginalTitleColumn, RegExpTools::ParseItem( str, reOriginalTitle ) );

          // Tagline
        QRegExp reTagline( "Taglines:</h4>(.*)<" );
        film.SetColumnData( FilmItem::TaglineColumn, RegExpTools::ParseItem( str, reTagline ) );

          // Year
        QRegExp reYear( "Release Date:</h4>.*([0-9]{4})" );
        film.SetColumnData( FilmItem::YearColumn, RegExpTools::ParseItem( str, reYear ).toInt() );

          // Budget
        QRegExp reBudget( "Budget:</h4> \\$(.*)<span" );
        film.SetColumnData( FilmItem::BudgetColumn, RegExpTools::ParseItem( str, reBudget ).replace( " ", "" ).toDouble() );

          // Rating
        QRegExp reRating( "itemprop=\"ratingValue\">(.*)</span>" );
        film.SetColumnData( FilmItem::RatingColumn, RegExpTools::ParseItem( str, reRating ).replace( ",", "." ).toDouble() );

          // Country
        QRegExp reCountryList( "Countr.*</h4>(.*)</div>" );
        QRegExp reCountry( "href=\"/country/.*>(.*)</a>" );
        film.SetColumnData( FilmItem::CountryColumn, RegExpTools::ParseList( str, reCountryList, reCountry ) );

          // Genre
        QRegExp reGenreList( "Genres:</h4>(.*)</div>" );
        QRegExp reGenre( "href=\"/genre/.*>(.*)</a>" );
        film.SetColumnData( FilmItem::GenreColumn, RegExpTools::ParseList( str, reGenreList, reGenre ) );

          // Description
        QRegExp reDescription( "Storyline</h2><.*><p>(.*)<em class=\"nobr\">" );
        film.SetColumnData( FilmItem::DescriptionColumn, RegExpTools::ParseItem( str, reDescription ).replace( "<br><br>", "<br>\n" ) );

          // Advanced information

        QRegExp reName( "itemprop=\"name\">(.*)</span>" );

        if( AlexandraSettings::GetInstance()->GetParsersLoadAdvancedInfo() )
        {
            QString str( request.runSync( QUrl( redirectUrl + "fullcredits" ) ) );
            RegExpTools::SimplifyText( str );
            DebugPrint( QString( "Simpified to: %1 bytes" ).arg( str.size() ) );

              // Starring
            QRegExp reStarringList( "Cast <span>(.*)Produced by" );
            film.SetColumnData( FilmItem::StarringColumn, RegExpTools::ParseList( str, reStarringList, reName, 20 ) );  // 20 first actors

              // Director
            QRegExp reDirectorList( "Directed by(.*)Writing Credits" );
            reName = QRegExp( "href=\"/name/.*>(.*)</a>" );
            film.SetColumnData( FilmItem::DirectorColumn, RegExpTools::ParseList( str, reDirectorList, reName, 10 ) );  // 10 first directors

              // Screenwriter
            QRegExp reScreenwriterList( "Writing Credits(.*)Cast" );
            film.SetColumnData( FilmItem::ScreenwriterColumn, RegExpTools::ParseList( str, reScreenwriterList, reName, 10 ) ); // 10 first writers

              // Producer
            QRegExp reProducerList( "Produced by(.*)Music by" );
            film.SetColumnData( FilmItem::ProducerColumn, RegExpTools::ParseList( str, reProducerList, reName, 10 ) );  // 10 first producers

              // Composer
            QRegExp reComposerList( "Music by(.*)Film Editing by" );
            film.SetColumnData( FilmItem::ComposerColumn, RegExpTools::ParseList( str, reComposerList, reName ) );
        }
        else
        {
              // Starring
            QRegExp reStarringList( "Cast</h2>(.*)</table>" );
            film.SetColumnData( FilmItem::StarringColumn, RegExpTools::ParseList( str, reStarringList, reName ) );

              // Director
            QRegExp reDirectorList( "Director.*</h4>(.*)</div>" );
            QRegExp reName( "itemprop=\"name\">(.*)</span>" );
            film.SetColumnData( FilmItem::DirectorColumn, RegExpTools::ParseList( str, reDirectorList, reName ) );

              // Screenwriter
            QRegExp reScreenwriterList( "Writer.*</h4>(.*)</div>" );
            film.SetColumnData( FilmItem::ScreenwriterColumn, RegExpTools::ParseList( str, reScreenwriterList, reName ) );
        }

          // Poster

        if( AlexandraSettings::GetInstance()->GetParsersLoadBigPoster() )
        {
            QRegExp rePoster( "div class=\"poster\"><a href=\"(.*)\"" );
            QString s = QString( request.runSync( QUrl( "http://www.imdb.com" + RegExpTools::ParseItem( str, rePoster ) ) ) );

            RegExpTools::SimplifyText( s );
            DebugPrint( QString( "Simpified to: %1 bytes" ).arg( s.size() ) );

            rePoster = QRegExp( "id=\"primary-img\".*src=\"(.*)\"" );
            posterUrl = RegExpTools::ParseItem( s, rePoster );
        }

        if( posterUrl.isEmpty() ) // Small poster
        {
            QRegExp rePoster( "div class=\"poster\"><.*><img.*src=\"(.*)\"" );
            posterUrl = RegExpTools::ParseItem( str, rePoster );
        }

        DebugPrint( "Text parsed!" );
        emit Loaded( film, posterUrl );
    }
    else
    {
        emit Error( "Movie not found!" );
    }

    return( posterUrl );
}