你需要創建一個QWidget
派生的新類,並通Qt::FramelessWindowHint
參數QWidget
構造,像這樣:
class MyWidget : public QWidget {
public:
MyWidget(QWidget* parent) : QWidget(parent, Qt::FramelessWindowHint) {...}
前前後後呃它你需要重新實現QWidget::paintEvent (QPaintEvent * event)
並繪製任何你想要的設計。
例如,您將主窗口設計爲PNG圖像。
class MyWidget : public QWidget {
Q_OBJECT
private:
QPushButton* button;
QLabel* label;
QComboBox* combobox;
QPixmap pixmap;
public:
explicit MyWidget(QWidget *parent = 0) : QWidget(parent, Qt::FramelessWindowHint) {
// Create some controls
button = new QPushButton();
label = new QLabel();
combobox = new QComboBox();
QVBoxLayout* l = new QVBoxLayout();
l->addWidget(button);
l->addWidget(label);
l->addWidget(combobox);
setLayout(l);
resize (500, 500);
setAttribute(Qt::WA_TranslucentBackground); // enable translucent background
pixmap = QPixmap("./1.png"); // load design picture
};
protected:
virtual void paintEvent (QPaintEvent* event) {
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(0, 0, 0, 0));
painter.drawRect(this->rect());
painter.drawPixmap(this->rect(), pixmap, pixmap.rect());
};
因爲我們沒有看到一個標題欄,我們需要實現窗口拖動操作:
private:
bool pressed;
QPoint mousePressPoint;
protected:
virtual void mousePressEvent (QMouseEvent * event) {
QWidget::mousePressEvent(event);
if (!pressed) {
pressed = true;
mousePressPoint = event->pos();
}
}
virtual void mouseMoveEvent (QMouseEvent * event) {
QWidget::mouseMoveEvent(event);
if (pressed) {move(event->globalPos() - mousePressPoint);}
}
virtual void mouseReleaseEvent (QMouseEvent * event) {
QWidget::mouseReleaseEvent(event);
if (pressed) {pressed = false;}
}
是否有可能爲你寫的樣品完全類爲我的細節? –
非常感謝。 –