2013-08-19 22 views
20

qt ve C++ konusunda oldukça yeniyim ve anlayamadığım bir sorunla karşılaştım. Ana kullanıcı arayüzünde bir düğmeyi tıkladığımda çerçevesiz ve şeffaf bir pencere açmak istiyorum. Ana kullanıcı arabiriminde bir düğmeye bastığımda yeni bir pencere açmak için çalışan kod var ama çerçevesiz ve saydam parçaların çalışmasını sağlayamıyorum. İşte Çerçevesiz ve şeffaf pencere qt5

İşte Burada LearnWindow.h

#ifndef LEARNWINDOW_H 
#define LEARNWINDOW_H 

#include <QMainWindow> 
#include <transwindow.h> 

namespace Ui { 
class LearnWindow; 
} 

class LearnWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit LearnWindow(QWidget *parent = 0); 
    ~LearnWindow(); 

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::LearnWindow *ui; 
    TransWindow *winTrans; 

public slots: 
    void openTrans(); 
}; 

#endif // LEARNWINDOW_H 

olan learnwindow olan bu

main.cpp

#include "learnwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    LearnWindow w; 
    w.show(); 

    return a.exec(); 
} 

öğrenmek yazdığı küçük program için kaynak kodları olduğunu. cpp

#include "learnwindow.h" 
#include "ui_learnwindow.h" 

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

LearnWindow::~LearnWindow() 
{ 
    delete ui; 
} 

void LearnWindow::openTrans() 
{ 
    winTrans = new TransWindow (this); 
    //winTrans->setWindowTitle("NewWin"); 
    // winTrans->setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); 
    //winTrans->setAttribute(Qt::WA_TranslucentBackground,true); 
    //winTrans->setAutoFillBackground(false); 
    //winTrans->setStyleSheet("background:transparent;"); 
    winTrans->show(); 
} 

void LearnWindow::on_pushButton_clicked() 
{ 
    openTrans(); 
} 

İşte transwindow.h

#ifndef TRANSWINDOW_H 
#define TRANSWINDOW_H 

#include <QDialog> 

namespace Ui { 
class TransWindow; 
} 

class TransWindow : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit TransWindow(QWidget *parent = 0); 

    //setWindowFlags(windowFlags()| Qt::FramelessWindowHint); 

    ~TransWindow(); 

private: 
    Ui::TransWindow *ui; 
}; 

#endif // TRANSWINDOW_H 

olduğunu Ve burada denedim farklı şeyler olduğunu hatlarını yorumladı görürsünüz farklı kaynak kodları ise transwindow.cpp

#include "transwindow.h" 
#include "ui_transwindow.h" 

TransWindow::TransWindow(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::TransWindow) 
{ 
    //setWindowTitle("NewWin"); 
    //setWindowFlags(Qt::FramelessWindowHint); 
    //setAttribute(Qt::WA_TranslucentBackground,true); 
    ui->setupUi(this); 
} 

TransWindow::~TransWindow() 
{ 
    delete ui; 
} 

olduğunu. Çoğunlukla sorun şu ki, "Qt :: FramlessWindowHint" ayarlamayı deneyen satırlardan herhangi birini yorumlamıyorsam, program normal olarak çalışıyor ancak ana kullanıcı arabirimindeki düğmeyi tıklattığımda hiçbir zaman yeni bir pencere açmıyor.

"Qt :: WA_TranslucentBackground" ayarını yaptığım satırlardan hiçbirini açıklama yapmazsam, ana pencerede düğmeye basıldığında yeni pencere açılacak, ancak yeni pencerenin arka planı siyah, şeffaf değil.

ilgili olabilir

Diğer bilgi: linux: Daha önce belirtildiği gibi ubunto 12.04 qt 5.0.2 (64-bit) qt yaratıcısı 2.7.1

Ben bu ve don oldukça yeniyim Bu işi düzgün yapmak için ne eksik olduğumu tam olarak anlayamıyorum. Herkesin sağlayabileceği herhangi bir yardım büyük takdir edilecektir.

+0

Ben, bana doğru prosedürü bildirdiğiniz için teşekkür dileriz. – Caveman

+0

Sorun değil, yardımcı olabileceğime sevindim! Bu kaliteye dair sorularınız varsa, temsilcinizi alacaksınız. hiç vakit kaybetmeden, endişelenmeyin :-) Bu sitelerin [yardım] bölümünde veya [FAQ] 'da nasıl çalıştığıyla ilgili bir çok şey var (http://meta.stackexchange.com/questions/ Bilgi arıyorsanız, [meta] için 7931/faq-yığın-exchange-site) sayfası. – Mat

cevap

33

bu deneyin:

setWindowFlags(Qt::Widget | Qt::FramelessWindowHint); 
setParent(0); // Create TopLevel-Widget 
setAttribute(Qt::WA_NoSystemBackground, true); 
setAttribute(Qt::WA_TranslucentBackground, true); 
setAttribute(Qt::WA_PaintOnScreen); // not needed in Qt 5.2 and up 
+3

Bu sorunun bir parçası çözüldü. Listelenen kodu transwindow.cpp dosyasına koydum ve şimdi çerçevesiz pencere açılacak, ancak yine de siyah bir arka plana sahip. Hmm, son bölümde daha fazla okuma ve düşünmek zorundayım. Sorunun ilk yarısını çözdüğünüz için teşekkürler. – Caveman

+1

Cevabı iptal etmeyi denedim ama henüz yeterince röportaj yok. Birisi duDE'nin cevabını lütfen bana bildir, çünkü çok yardımcı oldu. – Caveman

+2

eklendiğinde "setAttribute (Qt :: WA_PaintOnScreen);" Cevabınızın alt kısmında mükemmel çalışır. Tekrar teşekkürler. – Caveman