我在QHBoxLayout中有两个QWidgets。我希望能够通过点击右侧和移动鼠标(例如Qt编辑器的项目浏览器)来改变左侧QWidget的宽度。用鼠标更改QWidget的宽度
1
A
回答
2
你可以做的正是你想要什么用我们QSplitter。你可以在这里找到一个完整的例子:https://stackoverflow.com/a/38433287/4297146
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
相关问题
- 1. 用鼠标悬停jQuery元素更改元素的宽度
- 2. PagerTabStrip:更改标签宽度
- 3. 更改标签宽度
- 4. 标签更改时UIButton更改宽度
- 5. 如何设置QWidget宽度?
- 6. 更改html中的标签宽度
- 7. 更改面板中标题的宽度
- 8. 如何更改select2标签的宽度?
- 9. 动态更改标签的宽度
- 10. Java Awt Robot更改Windows鼠标速度
- 11. 在Java中更改鼠标灵敏度
- 12. 动态更改鼠标速度
- 13. 在QWidget中跟踪鼠标光标
- 14. 更改UIActionSheet宽度
- 15. 更改表宽度
- 16. SlideJS更改宽度
- 17. 更改宽度SysIPAddress32
- 18. jQuery的鼠标滚轮变焦(改变DIV的宽度)
- 19. 如何更改标记边框宽度和填充宽度?
- 20. 更改UIPicker高亮标签宽度
- 21. 更改IE7 HTML标签宽度
- 22. 更改宽度/高度值
- 23. 更改SWF宽度/高度
- 24. 更改文本更改EditText的宽度
- 25. 更改鼠标坐标
- 26. 更改UIImageView的宽度
- 27. jquery更改div的宽度
- 28. 更改JTable列的宽度
- 29. 更改UIBarButtonItem的宽度
- 30. 更改菜单的宽度
我不知道QSplitter是你正在寻找的部件?它将允许用户通过在它们之间的拖动条上向左或向右拖动来选择两个小部件的宽度。 –