Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt]Czyszczenie labela z Pixmapy

Ostatnio zmodyfikowano 2013-10-17 11:54
Autor Wiadomość
mar3
Temat założony przez niniejszego użytkownika
[Qt]Czyszczenie labela z Pixmapy
» 2013-09-28 23:54:52
Witam,
Mam problem pisze program lupa i okno odpowiadające za lupę mam przeźroczyste i w nim tylko label do którego ładuje QPixmape. Na czas robienia screenshota potrzebuje mieć zupełnie nie widoczne więc chciałem wyczyścić label, ale to nie działa.
C/C++
lupaFrame::lupaFrame( QWidget * parent )
    : QFrame( parent )
    , ui( new Ui::lupaFrame )
{
    Qt::WindowFlags flags = windowFlags();
    flags ^= Qt::WindowStaysOnTopHint;
    setStyleSheet( "background:transparent;" );
    setAttribute( Qt::WA_TranslucentBackground );
    flags ^= Qt::FramelessWindowHint;
    flags &= Qt::FramelessWindowHint;
    setWindowFlags( flags );
    show();
    activateWindow();
    timer = new QTimer( this );
    connect( timer, SIGNAL( timeout() ), this, SLOT( lupaUpdate() ) );
    timer->start( 100 );
}
//...
void lupaFrame::lupaUpdate()
{
    originalPixmap = QPixmap();
    POINT cursorPos;
    GetCursorPos( & cursorPos );
   
    ui->widokLabel->clear();
    originalPixmap = QPixmap::grabWindow( QApplication::desktop()->winId() );
   
    int x =( int ) cursorPos.x - ui->widokLabel->size().width() / 4;
    int y =( int ) cursorPos.y - ui->widokLabel->size().height() / 4;
   
    QPixmap tempPixmap = originalPixmap.copy( QRect( QPoint( x, y ), ui->widokLabel->size() / 2 ) );
    ui->widokLabel->setPixmap( tempPixmap.scaled( tempPixmap.size().width() * 2, tempPixmap.size().height() * 2 ) );
    //move((int)cursorPos.x-0.5*size().width(), (int)cursorPos.y-0.5*size().height());
}
P-92835
Mrovqa
» 2013-09-29 13:47:27
Co dokładnie się dzieje? Kawałek powiększonego screenshoota jest brany pod uwagę przy kolejnym screenshoocie? Jeśli tak, to prawdopodobnie metoda clear() nie renderuje od razu zmian (co ma jakiś sens), więc na ekranie pozostaje jeszcze stara zawartość.
Opisz twój problem bardziej szczegółowo i zrozumiale.
P-92856
mar3
Temat założony przez niniejszego użytkownika
» 2013-09-29 15:29:34
Kawałek powiększonego screenshoota jest brany pod uwagę przy kolejnym screenshoocie?
Dokładnie o to chodzi. Dopisałem
ui->widokLabel->repaint();
, wtedy clear działa, ale ta lupa miga.

Edit: Czy ktoś wie jak zrobić, żeby lupa nie migała?
P-92865
mar3
Temat założony przez niniejszego użytkownika
» 2013-09-30 21:06:59
Znalazłem program open source tego typu, ale napisany jest chyba w Pascalu, którego w ogóle nie znam. http://sourceforge.net/p​/magnifier/code/HEAD/tree/. Może zna ktoś Pascala i powie jak to tam zrobili?
P-92935
akwes
» 2013-09-30 21:28:58

 ale ta lupa miga.

http://www.informit.com​/articles/article.aspx​?p=1405227&seqNum=4

Generalnie jak "grafika miga" to

Frazy, które należy wpisać w wyszukiwarkę google:

Jednak, jeżeli ten Label Ci przeszkadza, to może go przenieś gdzieś? Zrób jakiś pasek, gdzie nie rysujesz obrazka albo w ogóle drugą formę z ustawieniami.
P-92937
mar3
Temat założony przez niniejszego użytkownika
» 2013-10-01 16:54:43
Przecież to właśnie ten QLabel to lupa, który jest jako oddzielne okno. Do niego (tego QLabela) ładowany jest powiększony fragment screenshota (QPixmap). Znikanie i pojawianie się tego QLabela jest potrzebne natychmiast żeby
grabWindow()
 go nie widziało w sensie był screenshot bez tego powiększonego fragmentu czyli QLabela, a użytkownik ma cały czas widzieć ten QLabel, czyli lupę.
P-92989
DejaVu
» 2013-10-17 11:54:15
Rozwiązałeś problem mrugania lupy?
P-93866
« 1 »
  Strona 1 z 1