我在QHBoxLayout中有两个QWidgets。我希望能够通过单击它的右侧并移动鼠标(例如Qt编辑器的项目浏览器)来更改左侧QWidget的宽度。
答案 0 :(得分:2)
您可以使用QSplitter完全按照自己的意愿行事。您可以在此处找到完整示例:https://stackoverflow.com/a/38433287/4297146
答案 1 :(得分:0)
您可以使用eventFilter
并在小部件上鼠标移动,输入,离开和鼠标点击。
检查此示例:
我使用QHBoxLayout
创建了两个小部件,并为两者获取QEvent::HoverEnter
和QEvent::MouseButtonPress
。
.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