用鼠标改变QWidget的宽度

时间:2017-07-11 00:15:34

标签: c++ qt qwidget

我在QHBoxLayout中有两个QWidgets。我希望能够通过单击它的右侧并移动鼠标(例如Qt编辑器的项目浏览器)来更改左侧QWidget的宽度。

2 个答案:

答案 0 :(得分:2)

您可以使用QSplitter完全按照自己的意愿行事。您可以在此处找到完整示例:https://stackoverflow.com/a/38433287/4297146

答案 1 :(得分:0)

您可以使用eventFilter并在小部件上鼠标移动,输入,离开和鼠标点击。

检查此示例: 我使用QHBoxLayout创建了两个小部件,并为两者获取QEvent::HoverEnterQEvent::MouseButtonPress

Example Form

.cpp文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    widgetOneW = 300;
    widgetTwoW = 300;

    ui->widgetOne->installEventFilter(this);
    ui->widgetTwo->installEventFilter(this);

    ui->widgetOne->setAttribute(Qt::WA_Hover);
    ui->widgetTwo->setAttribute(Qt::WA_Hover);
}

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if ((object == ui->widgetOne) && (event->type() == QEvent::HoverEnter))
    {
        ui->widgetOne->resize(100, ui->widgetOne->height());
        ui->widgetTwo->resize(widgetTwoW, ui->widgetTwo->height());
        return true;
    }
    else if ((object == ui->widgetOne) && (event->type() == QEvent::MouseButtonPress))
    {
        QMouseEvent *keyEvent = static_cast<QMouseEvent *> (event);
        if(keyEvent->button() == Qt::LeftButton)
        {
            ui->widgetOne->resize(100, ui->widgetOne->height());
            ui->widgetTwo->resize(widgetTwoW, ui->widgetTwo->height());
            return true;
        }
    }
    else if ((object == ui->widgetTwo) && (event->type() == QEvent::HoverEnter))
    {
            ui->widgetOne->resize(widgetOneW, ui->widgetOne->height());
            ui->widgetTwo->resize(100, ui->widgetTwo->height());
            return true;
    }
    else if ((object == ui->widgetTwo) && (event->type() == QEvent::MouseButtonPress))
    {
        QMouseEvent *keyEvent = static_cast<QMouseEvent *> (event);
        if(keyEvent->button() == Qt::LeftButton)
        {
            ui->widgetOne->resize(widgetOneW, ui->widgetOne->height());
            ui->widgetTwo->resize(100, ui->widgetTwo->height());
        }
    }
}


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

.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    int widgetOneW;
    int widgetTwoW;

public slots:
    bool eventFilter(QObject *object, QEvent *event);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

.pro文件:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = first
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui