2013-08-19 30 views
20

Tôi khá mới đối với qt và C++ và tôi đã gặp phải một vấn đề mà tôi không thể tìm ra. Tôi muốn mở một cửa sổ không khung và trong suốt khi tôi nhấp vào một nút trên ui chính. Tôi đã có mã làm việc để mở một cửa sổ mới khi tôi nhấn một nút trên ui chính nhưng tôi không thể có vẻ để có được phần không khung và minh bạch làm việc.Cửa sổ không khung và trong suốt qt5

Dưới đây là các mã nguồn cho các chương trình nhỏ mà tôi đã viết thư cho học này

main.cpp

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

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

    return a.exec(); 
} 

Đây là 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 

Đây là learnwindow. 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(); 
} 

Đây là 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 

Và đây là 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; 
} 

Trong mã nguồn khác nhau bạn sẽ thấy nhận xét ra dòng đó là những điều khác nhau mà tôi đã cố gắng. Đối với hầu hết các vấn đề là, nếu tôi un-nhận xét ra bất kỳ dòng mà cố gắng để thiết lập "Qt :: FramlessWindowHint" chương trình chạy bình thường nhưng không bao giờ mở một cửa sổ mới khi tôi nhấp vào nút trên ui chính.

Nếu tôi không nhận xét bất kỳ dòng nào tôi đặt "Qt :: WA_TranslucentBackground", cửa sổ mới sẽ mở ra khi nút được nhấn trong ui chính nhưng nền của cửa sổ mới là màu đen, không minh bạch.

Thông tin khác mà bạn có thể thích hợp: linux: ubunto 12.04 qt 5.0.2 (64-bit) tạo qt 2.7.1

Giống như tôi đã nói trước đó tôi còn khá mới mẻ tại này và don' Tôi hiểu chính xác những gì tôi đang thiếu để thực hiện công việc này một cách chính xác. Bất kỳ hỗ trợ ai có thể cung cấp sẽ được đánh giá cao.

+0

Tôi xin lỗi, cảm ơn vì đã cho tôi biết thủ tục chính xác. – Caveman

+0

Không sao, tôi rất vui được giúp đỡ! Với câu hỏi về chất lượng đó, bạn sẽ có được đại diện. để upvote trong thời gian không, đừng lo lắng về nó :-) Có rất nhiều thứ về cách các trang web này hoạt động trong phần [help], hoặc trong [FAQ] (http://meta.stackexchange.com/questions/ 7931/faq-for-stack-exchange-sites) trên [meta] nếu bạn đang tìm kiếm thông tin. – Mat

Trả lời

33

Hãy thử điều này:

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

Điều đó giải quyết được một phần vấn đề. Tôi đặt mã bạn liệt kê, trong transwindow.cpp và bây giờ cửa sổ không khung mở ra, nhưng nó vẫn có một nền đen. Hmm, tôi sẽ phải đọc thêm và suy nghĩ về phần cuối. Cảm ơn bạn đã giải quyết một nửa vấn đề đầu tiên. – Caveman

+1

Tôi đã cố gắng để upvote câu trả lời nhưng tôi chưa có đủ đại diện. Ai đó xin vui lòng upvote câu trả lời của duDE cho tôi vì nó rất hữu ích. – Caveman

+2

Khi tôi thêm "setAttribute (Qt :: WA_PaintOnScreen);" Đến cuối câu trả lời của bạn, nó hoạt động hoàn hảo. Cảm ơn một lần nữa. – Caveman

Các vấn đề liên quan